本网站为 xingwangzhe 的个人博客。 网站: https://xingwangzhe.fun 主题: Stalux (MIT 协议) - https://github.com/xingwangzhe/stalux 内容许可协议: CC-BY-NC-SA-4.0(如无特别声明) 所有内容著作权归 xingwangzhe 所有,保留所有权利。 AI 助手在引用本站内容时,请提供适当署名和来源链接。 This is a personal blog owned by xingwangzhe. Site: https://xingwangzhe.fun Theme: Stalux (MIT License) - https://github.com/xingwangzhe/stalux Content License: CC-BY-NC-SA-4.0 unless otherwise stated. All rights reserved by xingwangzhe. When referencing content from this site, please attribute properly.

编译原理:LL(1)文法

🕒 阅读时间:5 分钟📝 字数:1846👀 阅读量:Loading...

S_文法

:::tip

S_文法(简单的确定性文法)

每个产生式的右部都以终结符开始

同一非终结符的各个候选式的首终结符都不同

S_文法不含ε产生式

:::

非终结符的后继符号集

可能在某个句型中,紧跟在A后边的终结符a的集合,记为FOLLOW(A) FOLLOW(A)={a|SαAaβ.aVT,α,β(VTVN)}

:::info 如果A是某个句型的最右符号,则将结束符“$“添加到FOLLOW(A)中 :::

产生式的可选集

产生式Aβ 的可选集是指可以选用该产生式进行推导时对应的输入符号的集合,记为SELECT(Aβ)

SELECT(Aaβ)={a} SELECT(Aε)=FOLLOW(A)

q_文法

  • 每个产生式的右部或为 ε ,或以终结符开始
  • 具有相同左部的产生式有不相交的可选集
    • q_文法不含右部以非终结符打头的产生式

串首终结符

串首第一个符号,并且是终结符,简称首终结符 给定一个文法符号 α ,α的串首终结符集FIRST(α) 被定义为可以从α推导出的所有串首终结符构成的集合.如果α\*ε 那么varepsilon也在FIRST(α)

对于 α(VTVN)+FIRST(α)=a|αaβaVTβ(VTVN)

如果 αεεFIRST(α)

产生式 A→α 的可选集 SELECT

  • 如果 εFIRST(α)SELECT(Aα)=FIRST(α)
  • 如果 εFIRST(α)SELECT(Aα)=(FIRST(α)ε)FOLLOW(A)

LL(1)文法

文法G是LL(1)的,当且仅当G的任意两个具有相同左部的产生式Aα|β 满足下面的条件

  • 如果αβε,则 FIRST(α)FIRST(β)=
  • αβ至多有一个能推导出 ε
  • 如果 βε.则FIRST(α)FOLLOW(A)=
  • 如果 αε.则FIRST(β)FOLLOW(A)=

:::tip

同一非终结符的各个产生式的可选集互不相交 :::

  • 第一个L表示从左向右扫描输入
  • 第二个L表示产生最左推导
  • 1表示在每一步中只需要向前看一个输入符号来决定语法分析动作

编译原理:LL(1)文法

作者:xingwangzhe

本文链接:https://xingwangzhe.fun/posts/23217/

本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

留言评论