检查两个yacc语法是否相同

时间:2016-12-21 19:25:39

标签: parsing complexity-theory

你已经编写了一个yacc语法(或者你选择的工具中的其他一些LALR语法),并且你已经决定要重构一些产品以提高效率,清晰度等等。例如,你有:

xs : xs ';' x
   | xs ';'
   | x

您希望更明显的是可以有多个分号,因此您将其重写为:

semi_plus : semi_plus ';'
          | ';'
xs : xs semi_plus x
   | x

好吧,看起来似乎有道理......但我确实正确地进行了重构吗?如果我能将这些声明传递给一个可以告诉我语法是否等效的工具,那将是很棒的。 (现在,我们只考虑是否识别相同语言的问题。)

一个下意识的反应是引用上下文无关语法等价是不可判定的。事实上,甚至确定CFG是否是常规的问题is undecidable。但yacc不承认CFG:它识别确定性上下文无关语法,对于这些,已知equivalence is decidable。但有没有人实施过任何这些决策程序?

0 个答案:

没有答案