我有一个应用程序,其中我已经有一个用于一种语法的解析器,我需要为另一个目的添加第二种不同的语法。
是否可以拥有多个?
如果是这样,你如何获得另一个入口点?
谢谢
大卫艾伦芬奇
我有一个应用程序,其中我已经有一个用于一种语法的解析器,我需要为另一个目的添加第二种不同的语法。
是否可以拥有多个?
如果是这样,你如何获得另一个入口点?
谢谢
大卫艾伦芬奇
我认为您可以通过使用--name-prefix
Bison--prefix
选项和 Flex 选项来实现这一点。
在这两种情况下,它们都允许您将yy
生成的函数上使用的默认“”前缀替换为您自己选择的前缀。
是的,这是可能的。
yacc 应该有一个 -p 标志,您可以在其中指定不同的前缀而不是默认的“yy”。
lex 生成的文件只包含一个外部使用的符号:yylex。例如,您可以使用 -Dyylex=mySecondLex 进行编译。
不是直接的答案,但您可能需要考虑使用更通用的方法,例如GoldParser,它允许您使用通用引擎来处理从语法生成的 LALR 和 DFA 表。
这样一来,您可以在同一个应用程序中使用任意数量的不同语法,并且更改语法不会创建新的源代码,而只会创建新的表格文件(可以作为嵌入式资源或类似资源包含在内)。
标准 lex 和 yacc 无法做到这一点。Flex 和 Bison 和其他一些实现一样。既然您(在评论中)说您没有使用 flex 和 bison,那么您使用的是哪个版本的 lex 和 yacc ?