是否可以在同一个应用程序中使用两个或更多Lex / Yacc解析器

时间:2009-04-08 13:34:33

标签: parsing bison yacc lex flex-lexer

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

是否可以有多个?

如果是这样,你怎么得到另一个切入点?

由于

david allan finch

4 个答案:

答案 0 :(得分:8)

我认为您可以使用Bison的--name-prefix选项和Flex的--prefix选项来实现此目的。

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

答案 1 :(得分:2)

是的,这是可能的。

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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