SLR、CLR、LALR Parser在编译器设计上有什么区别?
单反解析器
SLR代表“SimpleLRParser”。执行起来非常容易且具有成本效益。SLR解析动作和goto函数来自识别可行前缀的确定性有限自动机。它不会为所有语法制作专门定义的解析动作表,但确实在几种编程语言的语法上取得了成功。给定一个文法G。它扩充G以生成G',并且从G'可以构造C,即G'的一组项目的规范集合。它可以使用以下简单的LR解析表构造技术从C构建解析动作函数ACTION和goto函数。它需要我们理解语法的每个非终结符A的FOLLOW(A)。
CLR解析器
CLR是指规范前瞻。CLR解析使用LR(1)项的规范集合来构造CLR(1)解析表。与SLR(1)解析相比,CLR(1)解析表产生更多的状态。在CLR(1)中,它只能在先行符号中定位reduce节点。
LALR解析器
LALRParser是LookAheadLRParser。它的功能介于SLR和CLR解析器之间。它是CLRParser的压缩,因此在此获得的表将小于CLRParsingTable。
为了构建LALR(1)解析表,使用了LR(1)项的规范集合。在LALR(1)解析中,具有相同产生式但具有多个前瞻的LR(1)项被分组以形成单独的项集。除了解析表的一个区别外,它通常与CLR(1)解析相似。
所有这些LRParsers的整体结构是相同的。有一些共同的因素,例如大小、它们支持的上下文无关语法的类别,以及它们在时间和空间方面不同的成本。
让我们看看SLR、CLR和LALRParser之间的比较。