首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用flex编译多个lexer时会出现重新定义错误

使用flex编译多个lexer时会出现重新定义错误
EN

Stack Overflow用户
提问于 2015-04-24 11:56:05
回答 1查看 247关注 0票数 0

我有两个lexers shell.l和javascript.l,分别带有前缀(%option prefix) shell和javascript ( shell.l中的%option prefix="shell“和javascript.l中的%option prefix="javascript”)。

我从另一个文件( main_file.c)中依次调用词法分析器,如下所示:

代码语言:javascript
复制
somefunc(){
.....
shelllex();

......
javascriptlex();
}

为了调用它们,我在main_file.c中包含了这两个词法分析器的头文件:

代码语言:javascript
复制
#include <.....>
#include "lex.shell.h"
#include "lex.javascript.h" 

并且,我在编译flex文件时创建了这些头文件,如下所示:

代码语言:javascript
复制
flex --header-file=lex.shell.h shell.l
flex --header-file=lex.javascript.h javascript.l
gcc -o lang lex.shell.c lex.javascript.c main_file.c -lfl

当我编译main_file.c时,我得到如下重新定义的错误:

在code_detector.c:16:0包含的文件中:

代码语言:javascript
复制
lex.javascript.h:227:29: error: redefinition of ‘yy_nxt’
 static yyconst flex_int16_t yy_nxt[][128] =
                             ^
In file included from code_detector.c:15:0:
lex.shell.h:227:29: note: previous definition of ‘yy_nxt’ was here
 static yyconst flex_int16_t yy_nxt[][128] =

我已经浏览了其他几篇SO帖子,但没有找到太多帮助。如果能帮助我解决这些问题,我将非常感激!

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-04-25 01:45:54

显然,存在一个错误,如果存在%option full,它会导致扫描仪转换表yy_nxt错误地写入头文件。这应该在最新版本的flex (2.5.39)中得到修复。

如果你不想升级你的flex版本,一个简单的变通办法是避免使用%option full。您可能会发现速度损失是不可测量的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29838458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档