【发布时间】:2017-09-06 11:21:28
【问题描述】:
我有一个使用 flex 生成 cc 代码的文件。当我使用 2.5.4a-10 版本时,代码按预期工作。
如果我使用更新的版本 2.5.37 甚至更新的版本(如 2.6),生成的代码似乎没有分配任何东西。它使用一些用 nullptr 定义的指针并崩溃。
我认为这些版本之间的语法发生了变化。我觉得 Debian/Ubuntu 有一个名为 flex-old 的软件包也很奇怪:
flex 是一个生成扫描器的工具:识别词法的程序 文本中的模式。这是旧的 2.5.4a 版本,不再是 正在开发中。你通常应该选择 flex,除非你有 旧版词法分析器文件不适用于现代 flex。
本产品包含由加州大学开发的软件, 伯克利及其贡献者。上游源代码可以在
http://flex.sourceforge.net/
(编者注:Flex 已移至 Github,但 v2.5.4a 不存在。)
对于我怀疑的其他人来说,那个版本似乎很重要。回答我的问题:
是否有任何手册或指南说明我必须做些什么才能移植该代码以生成一些适用于最新版本 flex 的 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 版,它就可以工作了。在以后的版本中,它可以很好地翻译和编译,但是当您运行程序时,您会遇到分段错误。
【问题讨论】:
-
如果您能提供一些有关您遇到的问题的实际详细信息,将会很有帮助。显然,minimal reproducible example 是理想的选择。
-
是的,我知道,让我们尝试上传一个。这个例子不是那么小。
标签: c++ c flex-lexer lexical