对于一个项目,我使用yacc和lex/flex解析一个文件,我想从.y或.l文件以外的其他地方调用解析器。
我可以调用yyparse()函数,但是如果我这样做,它将从stdin读取,因此我需要更改yyin,使其引用我的文件。但是,除了在.l文件中,我不能访问其他地方。
在flex手册页面中,我看到了选项--header-file=lex.h,他似乎是用于yacc的-d,但是当我使用它时,我有一个错误:
lex: can not open --header-file=lex.h
/usr/bin/m4:stdin:2837: ERROR: end of file in string那么,如何在我的程序中访问yyin,或者有更简单的解决方案来调用解析器呢?
编辑:
我试图将extern FILE * yyin;放在.l文件的顶部,但它不起作用。
编辑2:
当我将它添加到C文件中时,它就能工作了。
编辑3:
我的flex版本是2.5.39,我使用的命令行是:
lex carnet.l --header-file=lex.h
发布于 2015-08-16 13:30:14
最简单的解决方案是在需要使用它的文件中声明它:
extern FILE* yyin;要使--header选项正常工作,需要将其放在源文件名之前:
flex --header-file=lex.h carnet.l因为尽管flex实现了长选项,但它不符合GNU样式,即选项可能出现在位置参数之后。
https://stackoverflow.com/questions/32035517
复制相似问题