我已经编写了一个库来匹配一组模式的字符串,现在我可以轻松地将词汇扫描程序嵌入到C程序中.
我知道有许多成熟的工具可用于创建词法扫描程序(lex和re2c,仅列出前两个想到的)这个问题不是关于词法分析器,而是关于"扩展"C语法的最佳方法.词法分析器示例只是一个普遍问题的具体案例.
我可以看到两种可能的解决方案
我已经做过两个但问题是:"你会根据以下标准考虑哪一个更好的做法?"
换句话说,如果你不得不维护或编写一个使用这两种方法之一的软件,那么一个人会不会让你失望?
例如,以下是针对以下问题的词法分析器:
在两种风格.
/**** SCANNER STYLE 1 (preprocessor) ****/
#include "pmx.h"
t = buffer
while (*t) {
switch pmx(t) { /* the preprocessor will handle this */
case "&q" : /* skip strings */
break;
case "&f<?=eE>&F" : /* sum numbers */
sum += atof(pmx(Start,0));
break;
case "&b()": /* skip lists */
break;
case "&iend" : /* stop processing */ …Run Code Online (Sandbox Code Playgroud) 在最近的Erlang R14中,inets的文件httpd.hrl已被移除:
src/httpd.hrl
Run Code Online (Sandbox Code Playgroud)
至:
src/http_server/httpd.hrl
Run Code Online (Sandbox Code Playgroud)
在二郎的Web框架,包括使用以下指令几个地方的文件:
-include_lib("inets/src/httpd.hrl").
Run Code Online (Sandbox Code Playgroud)
因为我喜欢Erlang Web用两个版本的Erlang(R13和R14)进行编译,所以理想情况下我需要的是:
-ifdef(OLD_ERTS_VERSION).
-include_lib("inets/src/httpd.hrl").
-else.
-include_lib("inets/src/http_server/httpd.hrl").
-endif.
Run Code Online (Sandbox Code Playgroud)
即使可以通过以下方式检索ERTS版本:
erlang:system_info(version).
Run Code Online (Sandbox Code Playgroud)
这在预处理时确实是不可能的.
如何处理这些情况?解析变换是唯一的方法吗?还有更好的选择吗?
我需要一些线索来使用PHP和/或Java(当前为Spring + Hibernate)中的工具来进行内容的断字。我在包含的文件中有一些文本内容,而在数据库中有一些。所有文本都是utf-8编码的,我需要使用软连字符作为支持,这在大多数浏览器中都很常见。
因此,此存储原始:
<p> These words need hyphenation</p>
Run Code Online (Sandbox Code Playgroud)
会变成这样的东西
<p> The­se wor­ds need hyp­he­na­tion</p>
Run Code Online (Sandbox Code Playgroud)
在最终加载的网页的源代码中。
任何想法如何实现这一目标?
对于没有使用服务器端代码且仅使用纯HTML源文件的情况,也欢迎使用HTML标记内包含连字符的文本编辑工具的建议。
另外,我还没有找到连字单词列表的良好来源。
在Delphi中,您可以定义符号,就像在C/C++中一样.
德尔福:
{$DEFINE MY_SYMBOL}
Run Code Online (Sandbox Code Playgroud)
C/C++:
#define MY_SYMBOL
Run Code Online (Sandbox Code Playgroud)
这允许您通过{$IFDEF MY_SYMBOL}在Delphi或#ifdef MY_SYMBOLC/C++中使用来检查符号是否已定义.
这是一个布尔值 - 符号是在预处理期间定义的.但是,C/C++还允许您为预处理器符号赋值.例如:
#ifdef DEBUG
#define DB_HOST "127.0.0.1"
#else
#define DB_HOST "123.456.789.123"
#endif
Database *pDatabase = new Database(DB_HOST);
Run Code Online (Sandbox Code Playgroud)
是否可以在Delphi中为预处理器符号赋值,或者Delphi是否仅允许您确定是否已定义符号?
编辑:由于Delphi不支持预处理器中的符号值,我假设它不支持预处理器宏.我在这个假设中是对的吗?
例如,在C中,您可以定义一个预处理器宏,在编译之前将其与适当的参数一起复制和粘贴.当您希望"内联函数"功能用于快速操作(例如,二进制逻辑,在整数值中测试,位移等)而没有堆栈帧的开销,参数传递等时,这非常有用.
#define OK_FLAG 0x00000001
#define OK(f) (f & OK_FLAG)
#define WEAK_XOR_CIPHER(v) (v ^ 0xff)
Run Code Online (Sandbox Code Playgroud) 我是Gulp的新手..我已经能够成功安装和连接并缩小我的.js和.css文件,但是,有一个我要排除的.css文件 - print.css
我按照这里的说明操作:https://www.npmjs.org/package/gulp-ignore在我的本地目录中安装gulp-ignore,并将我的gulpfile.js修改为:
// Include gulp
var gulp = require('gulp');
// Include Our Plugins
var jshint = require('gulp-jshint');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var minifyCSS = require('gulp-minify-css');
var imagemin = require('gulp-imagemin');
var exclude = require('gulp-ignore').exclude;
var paths = {
scriptsNonAuth: ['Non-Auth/javascript/*.js'],
scriptsAuth: ['Auth/javascript/*.js'],
stylesNonAuth: ['Non-Auth/css/*.css'],
stylesAuth: ['Auth/css/*.css'],
};
// CSS Task - Non Authenticated
gulp.task('minify-css-non-auth', function() {
gulp.src(paths.stylesNonAuth)
.pipe(minifyCSS(opts))
.pipe(concat('all.min.css'))
.pipe(gulp.dest('Non-Auth/css'))
});
// CSS Task - Authenticated
gulp.task('minify-css-auth', function() { …Run Code Online (Sandbox Code Playgroud) 如果我有中等数量的基本特征并从中生成中等阶数的多项式特征,那么弄不清楚特征数组的哪一列preprocess_XX对应于基本特征的哪种转换可能会引起混淆。
我以前使用sklearn的旧版本(也许是0.14?)执行以下操作:
import numpy as np
from sympy import Symbol
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(4)
x1 = Symbol('x1')
x2 = Symbol('x2')
x3 = Symbol('x3')
XX = np.random.rand(1000, 3) # replace with the actual data array
preprocess_symXX = poly.fit_transform([x1, x2, x3])
preprocess_XX = poly.fit_transform(XX)
print preprocess_symXX
Run Code Online (Sandbox Code Playgroud)
太棒了 它会产生类似的输出[1, x1, x2, x3, x1**2, ... ],这会让我知道列的preprocess_XX实际多项式函数来自哪里。
但是现在,当我这样做时,它会抱怨TypeError: can't convert expression to float。引发此异常的原因是sklearn.utils.validation调用了一个函数check_array(),该函数试图将输入转换poly.fit_transform()为dtype=float。
您是否有建议,如何看待基本特征的多项式与输出中的哪一列相对应,而fit_transform()?现在 …
我正在做论文,我必须将源代码解析并标记为单个函数.对于每个函数,我想提取类型的名称,称为函数名称和类型转换.铿锵声是这种工作的正确工具吗?如果是,我该怎么做?
下面是一个简单的C函数.粗体是我想要的提取项目:
static char func1(unsigned int a, struct foo *b)
{
int c = 0;
struct bar *d;
if (a == 0) {
d = func2((int) a);
} else {
c = func3((struct bar *) b);
}
return c;
}
我正在使用自定义注释处理器并遇到一个新问题.我正在使用Gradle(3.1.1),当我将处理器生成的文件路径添加到sourceSet时,我会遇到奇怪的问题.
gradle clean build然后我执行了一个gradle build后来的构建得到了摧毁.我得到的堆栈跟踪是一个非常常见的令我惊讶的.
An exception has occurred in the compiler (1.8.0_91). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
java.lang.IllegalStateException: endPosTable already set
at com.sun.tools.javac.util.DiagnosticSource.setEndPosTable(DiagnosticSource.java:136)
at com.sun.tools.javac.util.Log.setEndPosTable(Log.java:350)
at com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:667)
at com.sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.java:950)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.<init>(JavacProcessingEnvironment.java:892)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.next(JavacProcessingEnvironment.java:921)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1187)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
at com.sun.tools.javac.main.Main.compile(Main.java:523)
at com.sun.tools.javac.main.Main.compile(Main.java:381)
at com.sun.tools.javac.main.Main.compile(Main.java:370)
at …Run Code Online (Sandbox Code Playgroud) 一个简单的问题,谷歌没有帮助我.在C++中使用#elif上下文中的子句是否合法#ifdef?它似乎与c ++ 11模式(MSVC 2015/2017,clang,GCC)中的所有主要编译器一样编译和工作,但我不确定它是否符合标准.
unixpreproc.cpp
#ifdef unix
#warning "unix is defined"
#endif
#ifdef __unix__
#warning "__unix__ is defined"
#endif
void main() {}
Run Code Online (Sandbox Code Playgroud)
使用Intel C ++编译器19.0.3:
icpc -o unixpreproc unixpreproc.cpp显示同时定义了unix和__unix__宏
但
icpc -std=c++11 -o unixpreproc unixpreproc.cpp显示仅__unix__已定义。这是故意的吗?它没有记录在英特尔编译器手册中。
preprocessor ×10
c++ ×2
java ×2
macros ×2
c ×1
c++11 ×1
delphi ×1
eclipse ×1
erlang ×1
gradle ×1
gulp ×1
hyphenation ×1
icc ×1
javascript ×1
lexer ×1
llvm ×1
llvm-clang ×1
optimization ×1
php ×1
python ×1
scikit-learn ×1
symbols ×1
sympy ×1
unix ×1