Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将flex 2.5.4a迁移到2.6(词法分析器生成器)_C++_C_Flex Lexer_Lexical - Fatal编程技术网

C++ 将flex 2.5.4a迁移到2.6(词法分析器生成器)

C++ 将flex 2.5.4a迁移到2.6(词法分析器生成器),c++,c,flex-lexer,lexical,C++,C,Flex Lexer,Lexical,我有一个使用flex生成cc代码的文件。当我使用版本2.5.4a-10时,代码按预期工作 如果我使用较新的版本2.5.37,甚至更新的版本(如2.6),生成的代码似乎不会分配任何内容。它使用了一些用nullptr定义的指针,并导致崩溃 我认为在这两个版本之间,语法发生了变化。我发现Debian/Ubuntu有一个名为flex的软件包也很奇怪 flex是一种生成扫描仪的工具:识别词法的程序 文本中的模式。这是旧的2.5.4a版本,不再是 正在开发中。你通常应该选择flex,除非你有 与现代flex

我有一个使用flex生成cc代码的文件。当我使用版本2.5.4a-10时,代码按预期工作

如果我使用较新的版本2.5.37,甚至更新的版本(如2.6),生成的代码似乎不会分配任何内容。它使用了一些用nullptr定义的指针,并导致崩溃

我认为在这两个版本之间,语法发生了变化。我发现Debian/Ubuntu有一个名为flex的软件包也很奇怪

flex是一种生成扫描仪的工具:识别词法的程序 文本中的模式。这是旧的2.5.4a版本,不再是 正在开发中。你通常应该选择flex,除非你有 与现代flex不兼容的旧lexer文件

本产品包括加利福尼亚大学开发的软件, 伯克利及其贡献者。上游源代码可在以下位置找到:

http://flex.sourceforge.net/

(编者按:Flex已移动到,但v2.5.4a不存在。)

这个版本对我怀疑的其他人来说似乎是个大问题。说到我的问题:

有什么手册或指南,我需要做的是,为了使代码能够生成一些在Flex?/P>的最新版本中工作的C++代码? 编辑:下面是我从更大的东西中选取的简单示例:

    int num_lines = 0, num_chars = 0;

%%
\n      ++num_lines; ++num_chars;
.       ++num_chars;

%%
int main()
{
    yy_init=1;

    yylex();
    printf( "# of lines = %d, # of chars = %d\n",
            num_lines, num_chars );
    return 0;
}

使用
flex file.l
对其进行调整,并使用
gcc lex.yy.c-lfl
构建它。现在,如果您使用的是2.5.4版,它就可以工作了。对于更高版本,它的翻译和编译都很好,但是当你运行程序时,你会遇到分段错误。

我自己发现了这个问题。可以在旧版本中显式设置变量
yy_init
。在较新的版本中,这是不允许的。我不确定这是否是有意的,也许有人可以解释为什么会观察到这种行为。我觉得有点奇怪


如果有人有类似的问题,您可能需要查看
yy_init
变量。除此之外,我没有任何问题。

我自己发现了问题。可以在旧版本中显式设置变量
yy_init
。在较新的版本中,这是不允许的。我不确定这是否是有意的,也许有人可以解释为什么会观察到这种行为。我觉得有点奇怪


如果有人有类似的问题,您可能需要查看
yy_init
变量。除此之外,我没有任何问题。

如果您能提供一些您遇到的问题的实际细节,那将非常有用。显然,a将是理想的。是的,我知道,让我们试着上传一个。这个例子并不是那么小。如果你能提供一些关于你正在经历的问题的实际细节,那会很有帮助。显然,a将是理想的。是的,我知道,让我们试着上传一个。这个例子并不是那么小,这个变量是没有文档的,所以改变它是个坏主意。看起来将其设置为1将阻止flex初始化自身,那么为什么要这样做呢?嗨,jay,我从来都不想做这样的事情。我得到的密码大约有20年了。它将该变量定义为1。我需要问那个通过我的人,他为什么决定设置它。不管怎样,我已经决定把它改成可重入扫描仪。我们需要它,因为我们希望能够扫描多个流。我认为在这种情况下,改进对扫描仪状态的控制是一种更好的方法。该变量没有文档记录,因此更改它是一个坏主意。看起来将其设置为1将阻止flex初始化自身,那么为什么要这样做呢?嗨,jay,我从来都不想做这样的事情。我得到的密码大约有20年了。它将该变量定义为1。我需要问那个通过我的人,他为什么决定设置它。不管怎样,我已经决定把它改成可重入扫描仪。我们需要它,因为我们希望能够扫描多个流。我认为对于这种情况和改进对扫描仪状态的控制,这是一种更好的方法。