Jac*_*ack 6 yacc lex bison parser-generator
在项目中处理多个Flex/Bison解析器的最佳方法是什么?
我写了一个解析器,现在我需要在同一个项目中使用第二个解析器.到目前为止,在parser1.y我插入main(..)方法的第三部分并yyparse从那里调用.
我想获得是一种有两个不同的解析器(什么parser1.y和parser2.y),并能够从外部函数中使用它们(让我们假设main在main.cpp).
我应该使用哪些预防措施来导出文件yyparse外的函数.y以及如何处理两个解析器?
PS.我正在使用g ++编译而不是Flex和Bison的C++版本,我想保持这种方式(因此避免将解析器封装在对象中).
sta*_*ify 11
除了Leffler的回答,我想在这里提供另一种方法:
在.lex您可以使用的文件中%option prefix="PREFIX",以及您可以使用的.y文件中%define api.prefix PREFIX,这与传递-p PREFIX给Bison和-P PREFIXFlex相同.
请注意,在覆盖默认前缀后yy,您可以通过原始yy*和被覆盖的方式访问内部名称PREFIX*,而显然对于外部名称,您必须使用它PREFIX*来访问它们.
请注意,Bison提供'-p zz'选项,用'zz'而不是'yy'为符号添加前缀.
类似地,Flex提供'-P zz'选项以使用'zz'而不是'yy'为符号添加前缀.它使用'-p'进行性能报告."可惜他们彼此不一致.