8

我有一个应用程序,其中我已经有一个用于一种语法的解析器,我需要为另一个目的添加第二种不同的语法。

是否可以拥有多个?

如果是这样,你如何获得另一个入口点?

谢谢

大卫艾伦芬奇

4

4 回答 4

11

我认为您可以通过使用--name-prefixBison--prefix选项和 Flex 选项来实现这一点。

在这两种情况下,它们都允许您将yy生成的函数上使用的默认“”前缀替换为您自己选择的前缀。

于 2009-04-08T13:36:54.767 回答
2

是的,这是可能的。

yacc 应该有一个 -p 标志,您可以在其中指定不同的前缀而不是默认的“yy”。

lex 生成的文件只包含一个外部使用的符号:yylex。例如,您可以使用 -Dyylex=mySecondLex 进行编译。

于 2009-04-08T13:39:20.487 回答
1

不是直接的答案,但您可能需要考虑使用更通用的方法,例如GoldParser,它允许您使用通用引擎来处理从语法生成的 LALR 和 DFA 表。

这样一来,您可以在同一个应用程序中使用任意数量的不同语法,并且更改语法不会创建新的源代码,而只会创建新的表格文件(可以作为嵌入式资源或类似资源包含在内)。

于 2009-04-08T13:47:47.797 回答
1

标准 lex 和 yacc 无法做到这一点。Flex 和 Bison 和其他一些实现一样。既然您(在评论中)说您没有使用 flex 和 bison,那么您使用的哪个版本的 lex 和 yacc ?

于 2009-04-08T14:08:54.673 回答