文章目录
语言的结构
- 词法: 定义符号的排列方式
- 语句
- 语义:静态/动态
文法是语法的抽象,语句是文法的实例
文法
- =>
… =>
文法记号
::=意思是左式由右式组成的.
是可替换部件.
∣
|
∣是or.
<
a
>
=
<
b
>
<
c
>
∣
<
d
>
→
<
a
>
=
<
b
>
<
c
>
,
<
a
>
=
<
d
>
<a>=<b><c>|<d>\rightarrow<a>=<b><c>,<a>=<d>
<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) G=(VN,VT,P,S)。其中,
- V N V_N VN是非空有穷集合,称为非终结符集,其元素称为非终结符;形式符号集合
- V T V_T VT是有穷集合,称为终结符集,其元素称为终结符;最后的实例
- P是非空有穷集合,称为规则集,其元素是字母表 V N ∪ V T V_N∪V_T VN∪VT上的规则, V N ∪ V T V_N∪V_T VN∪VT称为文法的字母表V,且 V N ∩ V T = ∅ V_N∩V_T=\empty VN∩VT=∅;
- S ∈ V N S\in V_N S∈VN,称为开始符。
直接/多步推导/规约
按照规则对符号式进行一步/多部推导
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
∵S→aSb∴aaSbb→aaaSbbb→aaaaaaSbbbbbb
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等价.
文法类型
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
- 以终结符或非终结符作为节点,子树根-子结点是规则的左-右式.
推出 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 U⇒U
- 不可达:不在任何右部出现的非终结符对应的规则
- 不可终止规则:不能推导出终结串
规则的优化
- 去除不可达规则
- 修改不可终止规则
代入法消除空规则
前提: ξ ∉ L ( G [ S ] ) \xi \not\in L(G[S]) ξ∈L(G[S])
- 找到导致 ξ \xi ξ的形式组件左式
- 将该左式带入为右式
- 消去左式