首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >YACC/LEX从C文件调用解析器

YACC/LEX从C文件调用解析器
EN

Stack Overflow用户
提问于 2015-08-16 13:22:33
回答 1查看 752关注 0票数 0

对于一个项目,我使用yacc和lex/flex解析一个文件,我想从.y.l文件以外的其他地方调用解析器。

我可以调用yyparse()函数,但是如果我这样做,它将从stdin读取,因此我需要更改yyin,使其引用我的文件。但是,除了在.l文件中,我不能访问其他地方。

在flex手册页面中,我看到了选项--header-file=lex.h,他似乎是用于yacc的-d,但是当我使用它时,我有一个错误:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-16 13:30:14

最简单的解决方案是在需要使用它的文件中声明它:

代码语言:javascript
复制
extern FILE* yyin;

要使--header选项正常工作,需要将其放在源文件名之前:

代码语言:javascript
复制
flex --header-file=lex.h carnet.l

因为尽管flex实现了长选项,但它不符合GNU样式,即选项可能出现在位置参数之后。

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

https://stackoverflow.com/questions/32035517

复制
相关文章

相似问题

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