📜  LR解析器-JavaPoint

📅  最后修改于: 2020-12-06 06:45:41             🧑  作者: Mango

LR解析器

LR解析是自底向上解析的一种类型。它用于解析大量的语法。

在LR解析中,“ L”代表输入的从左到右扫描。

“ R”代表反向构造最正确的派生词。

“ K”是用于做出解析决定数量的前瞻输入符号的数量。

LR解析分为四个部分:LR(0)解析,SLR解析,CLR解析和LALR解析。

LR算法:

LR算法需要堆栈,输入,输出和解析表。在所有类型的LR解析中,输入,输出和堆栈均相同,但解析表不同。

图:LR解析器的框图

输入缓冲区用于指示输入结束,它包含要分析的字符串,后跟$符号。

堆栈用于包含语法符号序列,堆栈底部带有$。

解析表是一个二维数组。它包含两个部分:“操作”部分和“转到”部分。

LR(1)解析

LR(1)解析涉及的各个步骤:

  • 对于给定的输入字符串编写上下文无关的语法。
  • 检查语法的歧义性。
  • 在给定的语法中添加增材制作。
  • 创建LR(0)个项目的规范集合。
  • 绘制数据流程图(DFA)。
  • 构造一个LR(1)解析表。

增强语法

如果我们在给定的语法G中再增加一个产生式,则会生成增强的语法G`。它有助于解析器确定何时停止解析并宣布接受输入。

给定语法

S → AA
A → aA | b

增强语法G`表示为

S`→ S
S → AA
A → aA | b