Bison语法/解析器的多个起点

时间:2014-05-06 07:56:49

标签: c parsing bison yacc flex-lexer

好的,所以我有一个完整的(和工作的)Bison语法。

如果我愿意的话,我希望能够设置另一个起点(%start)。

这怎么可行,而不必创建单独的语法/解析器?

1 个答案:

答案 0 :(得分:1)

我将尝试组合一个可以执行此操作的yacc版本。有一个复杂的现象使它看起来不那么琐碎:组成“结束”符号的问题。这种方法最有用的地方是在中间流中处理块(例如,Knuth的[c] Web的TeX处理器可以做到这一点)。沿着这些思路,可以使用此示例的另一个示例是为预处理层和语言层提供统一的解析器,以及将各个宏本身作为完整的解析单元进行处理(以及能够说明哪些宏体是常见的句法单元,例如“表达”或“陈述”,而并非如此。

在这些应用程序中,没有自然的“结束”符号来标记要分析的段的边界。通常,LR方法要求这样做,以便识别何时采取“接受”动作。否则,您将不得不接受-减少(甚至接受转移)冲突!