消除上下文无关语法的歧义

时间:2014-08-17 15:45:35

标签: parsing compiler-construction context-free-grammar

鉴于语法模糊,要删除运算符优先级问题,我们会将语法转换为遵循运算符优先级规则。为了解决运算符关联性问题,我们通过考虑与之关联的运算符将语法转换为左递归或右递归。

现在当计算机必须进行解析时,假设它是否使用递归下降算法,语法应该首先是明确的?或者根据算法,语法应该有不同的要求?

如果语法是递归的,则递归下降算法不会终止。现在我如何将一个明确的语法(解决相关性问题)作为输入给出算法?

1 个答案:

答案 0 :(得分:1)

语法必须是LL(k)才能使用标准的有效递归下降算法而不进行回溯。有一些标准的转换可用于将一般的LR语法(基本上是由基于确定性堆栈的算法可解析的任何语法)转换为LL(k)形式。它们包括左递归消除和左保理因子。这些是我在这里试图涵盖的广泛主题。但是在大多数好的编译器文本中都能很好地覆盖它们,并且在通过搜索可用的在线笔记中相当好。 Aho Sethi和Ullman编译器设计是这个和大多数其他编译器基础的很好的参考。