Cyan's Blog

Search

Search IconIcon to open search

Compiler-4-3_SLR_parse

Last updated Oct 15, 2022 Edit Source

# SLR parse

SLR (1) 分析法就是利用 Look ahead, 看看下一个符号和规约产生式的非终结符是不是一致的, 只有在一致的时候才进行规约, 消除了部分的冲突.

# DFA 的构造

SLR (k) 分析在 DFA 的构造上和 LR (0) 分析法完全一致.

# 分析表的构造

SLR (1) 在构造分析表的时候与 LR (0) 的唯一不同就是 Reduce 的填入方式:

对比:

# SLR (k) - k>1

SLR (k) 顾名思义就是在填表的时候向后观察 k 个符号, 怎样观察呢?

# First Follow 集合的推广

$First(A)$ 是 A 推出的所有终结符串里面的第一个终结符 $First_k(A)$ 即 A 推出的所有终结符串里面的前 k 个终结符 (所有长度为 k 的前缀)

同理, $Follow_k(A)$ 即 A 推出的所有终结符串里面的后 k 个终结符 (所有长度为 k 的后缀)

SLR (k) 比 SLR (1) 更强大, 但是也比 SLR (1) 复杂得多. 在实际应用中, 我们通常采用后面介绍的 LALR 分析方法.

# SLR 分析方法的不足

LR (1) 分析将前瞻符号的判断整合到 DFA 的构造过程中去, 解决了这个问题.