[NOTE] 文法和语言

文章目录

    • 语言的结构
    • 文法
      • 文法记号
      • 文法推导
      • Charset/String
      • 字符串运算
    • 文法的形式定义
      • 规则
    • 文法的相关概念
      • 直接/多步推导/规约
      • 句型和句子
      • 语言
      • 文法等价
    • 文法类型
      • 0型文法
      • 1型文法
      • 2型文法
      • 3型文法
    • 上下无关文法/语法树
      • 最左/右推导
      • 语法树
      • 二义性
    • 句型分析
      • 自上而下分析
      • 自下而上的分析
    • 短语/句柄
      • 利用句柄进行规约
    • 有害规则
      • 规则的优化
        • 代入法消除空规则

语言的结构

  • 词法: 定义符号的排列方式
  • 语句
  • 语义:静态/动态

文法是语法的抽象,语句是文法的实例

文法

  • =>
  • =>

文法记号

::=意思是左式由右式组成的.

是可替换部件.

∣ | 是or.
< a > = < b > < c > ∣ < d > → < a > = < b > < c > , < a > = < d > =|\rightarrow=,= <a>=<b><c><d><a>=<b><c>,<a>=<d>

约定:抽象部件用大写标识,实例用小写标识

文法推导

• 语法规则的形式化

• 语法规则含有语法单位符号 抽象

• 语法规则含有构成语句的单词符号 实例

• 特殊的语法单位符号:开始符号

Charset/String

字母表(charset)

符号串是字母表的闭包( S ∗ S^* S).单词和源程序都是符号串

length

符号串集合

字符串运算

  • 字符串的连接
  • 符号串幂运算
  • 符号串集的连接
  • 符号串集的幂
  • 闭包(包括Empty)/正闭包(不包括)

文法的形式定义

规则

是基于字符集的形如 α : : = β \alpha::=\beta α::=β的式子.也称重写规则,生成式.

该式规定了由抽象的形式部件向实例转化的规则.

文法的相关概念

文法G定义为一个四元组(VN,VT,P,S),记为 G = ( V N , V T , P , S ) G=(V_N,V_T,P,S) GVNVTPS。其中,

  1. V N V_N VN是非空有穷集合,称为非终结符集,其元素称为非终结符;形式符号集合
  2. V T V_T VT是有穷集合,称为终结符集,其元素称为终结符;最后的实例
  3. P是非空有穷集合,称为规则集,其元素是字母表 V N ∪ V T V_N∪V_T VNVT上的规则, V N ∪ V T V_N∪V_T VNVT称为文法的字母表V,且 V N ∩ V T = ∅ V_N∩V_T=\empty VNVT
  4. S ∈ V N S\in V_N SVN,称为开始符。

直接/多步推导/规约

按照规则对符号式进行一步/多部推导

eg.
∵ S → a S b ∴ a a S b b → a a a S b b b → a a a a a a S b b b b b b \because S\rightarrow aSb\\ \therefore aaSbb\rightarrow aaaSbbb\rightarrow aaaaaaSbbbbbb SaSbaaSbbaaaSbbbaaaaaaSbbbbbb

0或0步以上推导:就是上式一步到最后结果

句型和句子

含有一定数量的抽象组建的称句型

全部是实例的称句子

语言

文法的最终形态,记作 L ( G ) L(G) L(G).

定义为文法G产生的所有句子的集合.

文法的最终推导.

文法等价

i f   L ( G 1 ) = L ( G 2 ) if\ L(G_1)=L(G_2) if L(G1)=L(G2)

称为G1G2等价.

[NOTE] 文法和语言_第1张图片

文法类型

0型文法

所有的规则P中均含有非终结符(抽象部件 V N V_N VN).

也称短语文法.

特征: L ( G ) = { ∅ } L(G)=\{\empty\} L(G)={}

1型文法

除了0型文法的规则,附加:

除空规则外 ∣ α ∣ ≤ ∣ β ∣ |\alpha|\leq|\beta| αβ,也就是每次代换符号串会变长.

也称上下有关文法.

2型文法

所有的规则P的左式均只有非终结符(大写的)

则称2型文法,也就是上下无关文法(因为这种规则下使用哪种规则和非终止符周围的终止符(单词实例)无关.

3型文法

所有的规则P形如 α → a B \alpha\rightarrow aB αaB,a为终结符(实例),B为非终结符.

这种称右线性3型文法.

还有左线性.

统称为3型正规文法.

这种文法的特点是有固定的推导范式有利于自动化处理.

以后的文法都指2/3型文法.这两种文法也是规范文法.

上下无关文法/语法树

  • 特征:规则的左式只有非终结符
  • 改写:G[S],S是开始符
  • 只列规则.

最左/右推导

在推导的每一步都从最左/右的第一个非终止符开始.

一种范式.

语法树

  • 以开始符S为root
  • 以终结符或非终结符作为节点,子树根-子结点是规则的左-右式.

[NOTE] 文法和语言_第2张图片

推出 L ( G [ S ] ) = a a b a a L(G[S])=aabaa L(G[S])=aabaa

二义性

如果对应文法规则,某句子存在两个语法树,称为二义性.

  • 如果无二义性,一个语法树反映了全部的推导过程
  • 此时最左/最右推导唯一.
  • 对于一个二义性文法,可能存在等价的非二义性文法(?)

句型分析

判断符号串是否符合文法,等价转化为推导或者归约问题.
S → α a n d α ∈ V T ∗ S\rightarrow \alpha\\and\\\alpha\in V_T^* SαandαVT
自下而上/自上而下

自上而下分析

  • 使用最左推导
  • 遍历每一个规则的可能推导
  • 如果遍历到 α \alpha α,确认是.
  • 穷举全部的推导空间,如果没有一个符合则认为失败.

自下而上的分析

从符号串 α \alpha α开始逐步进行规约直到到达开始符号S.

检查规则的右部,如果有规则相同则进行规约.否则考虑检查子串.

通常使用句柄.

短语/句柄

对于G[S]和句型(含有抽象部件和实例的串),如果有S可通过若干步推导成符号串 α A δ \alpha A\delta αAδ,并且 A ⇒ + β A\Rightarrow ^+\beta A+β,则称 β \beta β是句型 α β δ \alpha\beta\delta αβδ相对于非终结符A的短语

如果A一步推到 β \beta β,则称为直接短语.

句型的最左直接短语称句柄.

  • α A δ \alpha A\delta αAδ是L(G)中的一个句型. α \alpha α δ \delta δ是包含终结符和非终结符的句型.
  • α A δ \alpha A\delta αAδ可以推出 α β δ \alpha\beta\delta αβδ.
  • 直接短语当且仅当 A ⇒ β A\Rightarrow \beta Aβ.
  • 句柄是最左的直接短语.

终结符A的短语

如果A一步推到 β \beta β,则称为直接短语.

句型的最左直接短语称句柄.

  • α A δ \alpha A\delta αAδ是L(G)中的一个句型. α \alpha α δ \delta δ是包含终结符和非终结符的句型.
  • α A δ \alpha A\delta αAδ可以推出 α β δ \alpha\beta\delta αβδ.
  • 直接短语当且仅当 A ⇒ β A\Rightarrow \beta Aβ.
  • 句柄是最的直接短语.

To Be Continued…

利用句柄进行规约

  • 找到句柄,规约为该句柄对应的形式化组件(非终止符)
  • 去掉该部分(该部分已经规约完毕)
  • Loop…

有害规则

  • U ⇒ U U\Rightarrow U UU
  • 不可达:不在任何右部出现的非终结符对应的规则
  • 不可终止规则:不能推导出终结串

规则的优化

  • 去除不可达规则
  • 修改不可终止规则

代入法消除空规则

前提: ξ ∉ L ( G [ S ] ) \xi \not\in L(G[S]) ξL(G[S])

  • 找到导致 ξ \xi ξ的形式组件左式
  • 将该左式带入为右式
  • 消去左式

你可能感兴趣的:(编译原理)