代码之家  ›  专栏  ›  技术社区  ›  David Allan Finch

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

  •  6
  • David Allan Finch  · 技术社区  · 17 年前

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

    有可能不止一个吗?

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

    大卫·艾伦·芬奇

    4 回复  |  直到 12 年前
        1
  •  10
  •   Alnitak    17 年前

    我想你可以通过使用 --name-prefix --prefix 选择Flex。

    yy “在使用您自己选择的前缀生成的函数上使用的前缀。

        2
  •  2
  •   Ingo    17 年前

    是的,有可能。

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

    例如,您可以使用-dylex=mySecondLex进行编译。

        3
  •  1
  •   Lucero    17 年前

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

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

        4
  •  1
  •   T.E.D.    17 年前

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