[NOTE] 文法和语言

语言的结构

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

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

文法

  • =>
  • =>

文法记号

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

是可替换部件.

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

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

文法推导

• 语法规则的形式化

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

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

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

Charset/String

字母表(charset)

符号串是字母表的闭包( 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) 。其中,

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

直接/多步推导/规约

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

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

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

句型和句子

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

全部是实例的称句子

语言

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

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

文法的最终推导.

文法等价

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

称为G1G2等价.

在这里插入图片描述

文法类型

0型文法

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

也称短语文法.

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

1型文法

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

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

也称上下有关文法.

2型文法

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

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

3型文法

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

这种称右线性3型文法.

还有左线性.

统称为3型正规文法.

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

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

上下无关文法/语法树

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

最左/右推导

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

一种范式.

语法树

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

在这里插入图片描述

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

二义性

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

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

句型分析

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

自上而下分析

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

自下而上的分析

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

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

通常使用句柄.

短语/句柄

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

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

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

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

终结符A的短语

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

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

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

To Be Continued…

利用句柄进行规约

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

有害规则

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

规则的优化

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

代入法消除空规则

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

  • 找到导致 ξ \xi 的形式组件左式
  • 将该左式带入为右式
  • 消去左式
发布了80 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/POTASSIUM711/article/details/102546686
今日推荐