Yin的笔记本

vuePress-theme-reco Howard Yin    2021 - 2025
Yin的笔记本 Yin的笔记本

Choose mode

  • dark
  • auto
  • light
Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • Linux
  • MyIdeas
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • JavaScript
  • Python
  • Nvidia
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
author-avatar

Howard Yin

303

Article

153

Tag

Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • Linux
  • MyIdeas
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • JavaScript
  • Python
  • Nvidia
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
  • 语法分析树/派生树

    • 语法分析树的产物/结果
      • 语法分析树的子树
        • 语法分析树和上下文无关语言的等价性
          • 歧义性
            • 固有歧义性
            • 经典案例:四则运算表达式的语法分析树

        语法分析树/派生树

        vuePress-theme-reco Howard Yin    2021 - 2025

        语法分析树/派生树


        Howard Yin 2020-12-14 07:37:05 数学形式语言与自动机计算理论形式语言上下文无关语言上下文无关文法下推自动机

        语法分析树是分析上下文无关语言的重要工具,其算法多见于各自高级语言的编译器中。

        CFGG=(V,T,P,S)G=(V,T,P,S)G=(V,T,P,S)的语法分析树/派生树定义为:

        • 每个内节点都标记为VVV中的一个变元
        • 每个叶节点都标记为T∪{ε}T\cup\{\varepsilon\}T∪{ε}中的变元、终结符或空串
        • 某个内节点AAA的子节点从左至右分别是X1,X2,…XnX_1,X_2,\dots X_nX1​,X2​,…Xn​表示A→X1X2…Xn∈PA\rightarrow X_1X_2\dots X_n\in PA→X1​X2​…Xn​∈P
        • 若有Xi=εX_i=\varepsilonXi​=ε那么AAA只能有一个子节点ε\varepsilonε,表示A→ε∈PA\rightarrow\varepsilon\in PA→ε∈P

        # 语法分析树的产物/结果

        语法分析树的全部叶节点从左到右连接起来组成的符号串称为树的产物/结果。

        若某个语法分析树的根节点是AAA其产物为α\alphaα,则它们之间的关系记为

        /∣\αA\mathop{/|\backslash}\limits_{\alpha}^A α/∣\A​

        # 语法分析树的子树

        语法分析树中标记为AAA的内节点及其全部子孙节点构成的子树称为AAA子树。

        # 语法分析树和上下文无关语言的等价性

        对于CFGG=(V,T,P,S)G=(V,T,P,S)G=(V,T,P,S)且A∈VA\in VA∈V,有:

        A⇒∗α⇔/∣\αAA\mathop{\Rightarrow}\limits^*\alpha\Leftrightarrow \mathop{/|\backslash}\limits_{\alpha}^A A⇒∗α⇔α/∣\A​

        证明:充分性和必要性都可以通过A⇒jαA\mathop{\Rightarrow}\limits^j\alphaA⇒jα从j=1j=1j=1开始归纳证明,具体证明过程略

        # 歧义性

        如果CFGGGG使得有两棵不同的语法分析树产生同一个产物,那么称该CFG是歧义的。

        # 固有歧义性

        同一个CFL可以有多个CFG定义。对于某些CFL,可以设计出不歧义的CFG;而对于某些CFL,它的所有CFG都是歧义的,称这种CFL是固有歧义的。

        注:“判断给定CFG是否歧义”是一个不可计算问题。

        # 案例:固有歧义语言L={aibjck∣i=j∨j=k}L=\{a^ib^jc^k|i=j\vee j=k\}L={aibjck∣i=j∨j=k}

        对于任何形式为anbncna^nb^nc^nanbncn的串,总存在两棵语法分析树。因此LLL是固有歧义的。

        # 经典案例:四则运算表达式的语法分析树

        例如,《上下文无关文法》一节中提到的四则运算表达式的案例在没有确定运算优先级时就是歧义的:

        G={{E,I},{0,1,+,−,×,÷,(,)},P,E}G=\{\{E,I\},\{0,1,+,-,\times,\div,(,)\},P,E\} G={{E,I},{0,1,+,−,×,÷,(,)},P,E}

        P={E→E+E∣E−EE→E×E∣E÷EE→(E)∣II→0∣1∣I0∣I1}P=\left\{ \begin{aligned} E&\rightarrow E+E|E-E\\ E&\rightarrow E\times E|E\div E\\ E&\rightarrow (E)|I\\ I&\rightarrow 0|1|I0|I1\\ \end{aligned} \right\} P=⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧​EEEI​→E+E∣E−E→E×E∣E÷E→(E)∣I→0∣1∣I0∣I1​⎭⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎫​

        1+0∗101+0*101+0∗10就能由两个语法分析树产生:

        显然根据正常的四则运算规则,第二棵子树才是正确的计算过程。这种歧义性在程序编译的实际应用中是不能被允许的。

        可以对PPP稍加改造使之成为无歧义的:(使×\times×和÷\div÷父节点的子树中不存在括号外的+++和−-−)

        P={E→E+E∣E+F∣F+E∣F+FE→E−E∣E−F∣F−E∣F−FE→(E)∣IF→F×F∣F÷FF→(F)∣IF→(E)I→0∣1∣I0∣I1}P=\left\{ \begin{aligned} E&\rightarrow E+E|E+F|F+E|F+F\\ E&\rightarrow E-E|E-F|F-E|F-F\\ E&\rightarrow (E)|I\\ F&\rightarrow F\times F|F\div F\\ F&\rightarrow (F)|I\\ F&\rightarrow (E)\\ I&\rightarrow 0|1|I0|I1\\ \end{aligned} \right\} P=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​EEEFFFI​→E+E∣E+F∣F+E∣F+F→E−E∣E−F∣F−E∣F−F→(E)∣I→F×F∣F÷F→(F)∣I→(E)→0∣1∣I0∣I1​⎭⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎫​

        这样,1+0∗101+0*101+0∗10就能由唯一的语法分析树产生:

        帮助我们改善此页面!
        创建于: 2020-11-15 15:50:50

        更新于: 2020-12-14 07:37:56