我正在实施普拉特的top down operator precedence解析器,我想知道它属于哪个正式类别 - 它是LR(1)吗?
答案 0 :(得分:4)
Pratt解析器不是LR解析器。它们也不是LL解析器。事实上,Pratt解析器通常用一些通用编程语言手工编码;该技术不是基于像下推有限状态自动机这样的抽象。这使得证明关于给定Pratt解析器的断言更加困难,例如它识别特定的正式语言。
通常,如果语法是运算符优先级语法,Pratt解析器可以很容易地设计为识别语言,因此它们可以被认为是运算符优先级解析的双重性,即使运算符优先级解析是自下而上的和Pratt解析器名义上是自上而下的。跟踪Pratt解析器以及同一语言的运算符优先级解析器的转换将显示相似性。
所以我认为有可能为Pratt解析器提出形式主义,但据我所知,没有一个存在。