个性化阅读
专注于IT技术分析

SLR(1)解析

SLR(1)是指简单的LR解析。与LR(0)解析相同。唯一的区别在于解析表。要构造SLR(1)解析表, 我们使用LR(0)项的规范集合。

在SLR(1)解析中, 我们仅在左手侧跟随放置减少移动。

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

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

单反(1)桌子的构造

下面列出了用于构建SLR(1)表的步骤:

如果状态(Ii)即将在终端上变为某个其他状态(Ij), 则它对应于动作部分中的换档。

SLR(1)解析

如果状态(Ii)即将变为变量上的其他状态(Ij), 则它对应于go移至go零件中的go。

SLR(1)解析1

如果状态(Ii)包含最终项(如A→ab•), 但没有转换到下一个状态, 则该生产称为减少生产。对于“跟随”(A)中的所有端子X, 都写上减少条目及其生产编号。

S -> •Aa 
  A->αβ•
Follow(S) = {$}
            Follow (A) = {a}
SLR(1)解析2

单反(1)语法

S→E E→E + T | T T→T * F | F F→id

添加增广产品并在G的每个产品的第一个位置插入“•”符号

S`→•E E→•E + T E→•T T→•T * F T→•F F→•id

I0状态:

将增产增加到I0状态并计算关闭

I0 =闭合(S`→•E)

将所有以E开头的产品添加到I0状态, 因为“。”其次是非终结符。因此, I0状态变为

I0 = S`→•E E→•E + T E→•T

在修改后的I0状态中添加所有以T和F开头的产生, 因为“。”其次是非终结符。因此, I0状态变为。

I0 = S`→•E E→•E + T E→•T T→•T * F T→•F F→•id

I1 =转到(I0, E)=闭包(S`→E•, E→E•+ T)I2 =转到(I0, T)=闭包(E→T•T, T•→* F)I3 =转到(I0, F)=闭包(T→F•)= T→F•I4 =转到(I0, id)=闭包(F→id•)= F→id•I5 =转到(I1, +)=闭包(E→E +•T)

在I5州添加所有以T和F开头的产品, 因为“。”其次是非终结符。因此, I5状态变为

I5 = E→E +•T T→•T * F T→•F F→•id

转到(I5, F)=闭合(T→F•)=(与I3相同)转到(I5, id)=闭合(F→id•)=(与I4相同)

I6 =转到(I2, *)=闭包(T→T *•F)

在I6州添加所有以F开头的产品, 因为“。”其次是非终结符。因此, I6状态变为

I6 = T→T *•F F→•id

转到(I6, id)=闭包(F→id•)=(与I4相同)

I7 =转到(I5, T)=闭包(E→E + T•)= E→E + T•I8 =转到(I6, F)=闭包(T→T * F•)= T→T * F•

绘图DFA:

SLR(1)解析3

单反(1)表

SLR(1)解析4

说明:

第一(E)=第一(E + T)∪第一(T)第一(T)=第一(T * F)∪第一(F)第一(F)= {id}第一(T)= {id}第一( E)= {id}跟随(E)=开头(+ T)∪{$} = {+, $}跟随(T)=开头(* F)∪开头(F)= {*, +, $}跟随[F)= {*, +, $}

  • I1包含驱动S→E•并跟随(S)= {$}的最后一项, 因此动作{I1, $} =接受
  • I2包含驱动E→T•并跟随(E)= {+, $}的最后一项, 因此动作{I2, +} = R2, 动作{I2, $} = R2
  • I3包含驱动T→F•并跟随(T)= {+, *, $}的最后一项, 因此动作{I3, +} = R4, 动作{I3, *} = R4, 动作{I3, $} = R4
  • I4包含驱动F→id•并跟随(F)= {+, *, $}的最后一项, 因此动作{I4, +} = R5, 动作{I4, *} = R5, 动作{I4, $} = R5
  • I7包含驱动E→E + T•并跟随(E)= {+, $}的最后一项, 因此动作{I7, +} = R1, 动作{I7, $} = R1
  • I8包含驱动T→T * F•并跟随(T)= {+, *, $}的最后一项, 因此动作{I8, +} = R3, 动作{I8, *} = R3, 动作{I8, $} = R3。
赞(0)
未经允许不得转载:srcmini » SLR(1)解析

评论 抢沙发

评论前必须登录!