编译原理课程设计之第三章 上下文无关文法及分析
编译原理上下无关文法和文法分析
![编译原理上下无关文法和文法分析](https://img.taocdn.com/s3/m/e7f6e75701f69e3142329412.png)
exp -> exp op exp | (exp) | number op -> + | - | *
BNF
• • • • • • •
Introduction
• Parsing is the task of determining the syntax, or structure, of a program. • It is also called syntax analysis. • The syntax of a programming language is usually given by the grammar rules of a context-free grammar. • The rules of context-free grammar are recursive. • Data structures representing the syntactic structure are also recursive – a parse tree or syntax tree.
The Parsing Process
parser Sequence of tokens
Syntax tree
• Usually, the sequence of tokens is not an explicit input parameter, but the parser calls a scanner procedure such as getToken to fetch the next token from the input as it is needed during the parser process.
03-第3章-语法分析-编译原理-中国科技大学(共13讲)
![03-第3章-语法分析-编译原理-中国科技大学(共13讲)](https://img.taocdn.com/s3/m/7ea3cffc9e314332396893d8.png)
• 例 ( {id, +, , , (, )}, {expr, op}, expr, P )
expr expr op expr expr expr op +
3.2 语言和文法
• 无二义的文法 stmt matched _stmt | unmatched_stmt matched_stmt if expr then matched_stmt else matched_stmt | other unmatched_stmt if expr then stmt | if expr then matched_stmt else unmatched_stmt
3.2 语言和文法
expr expr + term | term term term factor | factor factor id | (expr)
expr term
term expr factor id term factor id expr + term * factor id id + id id 分析树
3.2 语言和文法
3.2.3 验证文法产生的语言 G : S (S) S | L(G) = 配对的括号串的集合 • 按串长进行归纳:配对括号串可由S推出
–归纳基础: S – 归纳假设:长度小于2n的都可以从S推导出来 – 归纳步骤:考虑长度为2n(n 1)的w = (x) y S (S)S * (x) S * (x) y
编译原理和技术
中国科学技术大学 计算机科学与技术学院 陈意云
上下文无关文法
![上下文无关文法](https://img.taocdn.com/s3/m/17cc2f7931b765ce050814d8.png)
第三部分上下文无关语言和下推自动机前面介绍的有限自动机是计算的初级模型,它所接受的正规语言不太关心字符串自身的结构。
上下文无关文法(CFL)是一种简单的描述语法规则的递归方法,语言中的字符串由这些规则产生。
所有的正规语言都能用上下文无关文法描述,它也可以描述非正规语言。
上下文无关文法描述的语法规则更复杂多变,可以在相当大的程度上,描述高级程序设计语言的语法和其他一些形式语言。
类似正则语言对应的抽象机模型是有限自动机,CFL也有对应的抽象机模型。
CFL对应的计算模型是在有限自动机的基础上增加存储空间得到,并被设想成无限空间(对应有限自动机的有限空间),采用了一种简单的管理模式,栈(stack),这种新的计算模型(或抽象机)称为下推自动机(pushdown automata),下推是栈最典型的操作。
有必要在下推自动机中保留非确定性,确定型下推自动机不能接受所有的CFL,但给定一个CFG,容易构造一个相应的非确定型下推自动机,它在识别字符串过程中的移动模拟了文法的推导过程,这个过程称为分析(parse)。
分析不是一定需要下推自动机来完成。
CFL仍然不够通用,不能包括所有有意义的、或有用的形式语言。
采用类似第五章的技术,我们将给出一些不是CFL的简单例子,这些技术也用于解决与CFL相关的判定问题。
6 上下文无关文法6.1 上下文无关文法的定义为了描述我们在第二部分考察的各种语言,包括一些非正则语言,我们引入一种语言的递归定义方法,称为文法。
文法与我们熟悉的语言的语法描述相近,是描述语言和分析语言的有力工具。
问题:文法的形式化定义似乎可以模仿有限自动机,比如5元组或6元组之类。
例子6.1 正如我们在例子2.16中所见,字母表{a, b}上的回文语言pal可以用下面的递归方法描述:1.Λ, a, b∈pal2.对每个S∈pal,aSa和bSb也属于pal3.pal中不包含其他字符串如果将上面的符号S看成一个变量,代表了所有我们希望计算(比如某种递归算法)的pal 的元素,那么上面的规则1和规则2可以非正式地重新表述如下:1.S的值可以是Λ, a, b2.每个S可以写成aSa或bSb的形式如果我们用→表示“可以取值为”,则可以写出下面的式子:S→aSa→abSba→abΛba=abba上面的产生过程可以总结成下面的两组产生式(或称规则):S→a | b | ΛS→aSa | bSb符号“|”表示“或”的含义。
编译原理第三章语法分析
![编译原理第三章语法分析](https://img.taocdn.com/s3/m/e8d4a339dd36a32d73758186.png)
3.2 语言和文法
• 文法的优点
–文法给出了精确的,易于理解的语法说明 –自动产生高效的分析器
–可以给语言定义出层次结构
3.2 语言和文法
• 文法的优点
–文法给出了精确的,易于理解的语法说明 –自动产生高效的分析器
–可以给语言定义出层次结构
–以文法为基础的语言实现便于语言的修改
3.2 语言和文法
F id | (E)
3.2 语言和文法
E E+T|T TT* F|F F id | (E)
E T T T * F id F id
E E
T F
+
T F
T * F
id
*
F
id
id id * id * id 和 id + id * id 的分析树
id
3.2 语言和文法
3.2.5 消除二义性 stmt if expr then stmt | if expr then stmt else stmt | other • 句型:if expr then if expr then stmt else stmt
3.2 语言和文法
3.2.5 消除二义性 stmt if expr then stmt | if expr then stmt else stmt | other • 句型:if expr then if expr then stmt else stmt • 两个最左推导: stmt if expr then stmt if expr then if expr then stmt else stmt stmt if expr then stmt else stmt if expr then if expr then stmt else stmt
第三章:上下文无关语法
![第三章:上下文无关语法](https://img.taocdn.com/s3/m/0e3b1780f5335a8102d220ff.png)
Bb
A1 SA Ua
After Step 4 Grammar is in CNF
第三章:上下文无关语法
6
第三章:上下文无关语法
26
主要内容
2.1 上下文无关文法概述
2.2 下推自动机
2.3 非上下文无关语言
第三章:上下文无关语法
27
下推自动机
考虑语言 { 0n1n | n≥0} 的识别装置
, $
q1
q2
1, 0
q4
q3
, $
0, 0 1, 0
M = ({q1,q2,q3,q4}, {0,1}, {0,$}, , q1, {q1,q4}),
(q1, , ) = { (q2, $) }, (q2, 0, ) = { (q2, 0) }
(q2, 1, 0) = { (q3, ) }, (q3, 1, 0) = { (q3, ) }
S ASA | aB | a | SA | AS
Ab|S B b
Before removing
After removing
A B
第三章:上下文无关语法
A B
23
例题
Then, we remove A S
S0 ASA | aB | a | SA | AS
S ASA | aB | a | SA | AS
第三章:上下文无关语法
18
例题
S ASA | aB AB|S Bb|
S0 S S ASA | aB AB|S Bb|
第三章:上下文无关语法
19
例题
After that, we remove B
S0 S S ASA | aB AB|S Bb|
3第三章 上下文无关文法及分析1
![3第三章 上下文无关文法及分析1](https://img.taocdn.com/s3/m/49f83102aeaad1f347933f12.png)
例 设有文法 G2=(VN,VT,P,S) 其中,VN={A}、VT={a}、P={ A→Aa, A→ } 试问:此文法描述的语言L(G2)=?
解:由于从开始符号A出发,可以有 AAaa=a AAa Aaa aa=aa AAa Aaa Aaaa =aaa =aaa 得L(G2)={a,aa,aaa,aaaa,}={an,n>1}
其中符号“*”表示经过0步或多步推导(S=u则称 为0步推导,而Su则称为1步推导,“+”则称为 一步或多步推导)。
仅含终结符的句型称为句子。
• 语言的形式化定义
文法G所描述的语言用L(G)表示,它由文法G所产 生的全部句子组成,即:
L(G)={w|wVT+ 且S+w } 这个定义式的意义如下: (1)符号串w是从开始符号推导出来的; (2)w仅由终结符号组成; (3)w称为该语言的句子; (4)L(G)是由所有这样的句子构成的。
• 问题:属于VT+的符号串x,是否一定属于L(G)?
例 设有文法 G1=(VN,VT,P,S) 其中,VN={A}、VT={a}、P={A→a} 试问:此文法描述的语言L(G1)=?
解:由于从开始符号A出发,只能推导出一个句子 a,所以 L(G1)={a},因此文法G1所定义的语言 L(G1)是有穷语言。 由于VT+ ={a,aa,aaa, },因此L(G1)只是 VT+ 的一个真子集。
第3章
语言和上下文无关文法及分析
主要内容
文法及语言的表示及定义 分析过程 分析树与抽象语法树 二义性 文法的扩展表示:EBNF和语法图 TINY语言的语法
• 什么是语言? • 如何描述语言? • 如何识别语言中的句子?
• 语言的定义
编译原理(清华)第三章文法和语言
![编译原理(清华)第三章文法和语言](https://img.taocdn.com/s3/m/52a510daa58da0116c17498f.png)
例 文法G: S→0S1,S→01 有直接推导: 0S1 00S11 ( S→0S1 ) 00S11 000S111 ( S→0S1 ) 000S111 00001111 ( S→01 ) S 0S1 ( S→0S1 )
推导和归约 若存在v=w0 w1 ... wn=w ,(n>0) 则称v推导出w,或w归约到v,记为v=+>w 若有v =+>w,或v=w,则记作v=*>w
2. 符号串 – 定义:由字母表中的符号组成的任何有穷序列 – 例: 0,00,10是字母表∑={0‚1}上的符号串 a,ab,aaca是Α={a‚b,c}上的符号串 – 在符号串中,符号是有顺序的,顺序不同,代 表不同的符号串,如:ab和ba不同 – 不含任何符号的符号串称为空串,用ε表示 注意:{ε}并不等于空集合{ } – 符号串长度: 符号串中含有符号的个数 如: |abc|=3 | ε|=0
3.3 文法和语言的形式定义
1.文法的定义 2.文法的简化表示法 3.推导与归约 4.句型、句子、语言的定义 5.文法的等价
1.文法的定义
产生式(规则) 产生式是一个有序对(α,β),通常写作 α→β(或α::=β ) 文法定义: 文法G(Grammar)定义为四元组(VN,VT,P,S) VN (Nonternimal):非终结符集 VT (Terminal):终结符集 P (Production): 产生式(规则)集合 S: 开始符号或识别符号
第三章
文法和语言
学习目标: 掌握:自上而下与自下而上的分析方法 理解:文法的形式定义,推导,归约,句 型,句子,语言,上下文无关文法,规范 句型,语法树,短语,直接短语,句柄 了解:文法的类型,文法使用中的限制, 文法的二义性
编译原理(第二版)第3章 文法和语法
![编译原理(第二版)第3章 文法和语法](https://img.taocdn.com/s3/m/576a69747fd5360cba1adbd4.png)
〈动词〉::= 是 | 学习
〈直接宾语〉::=〈代词〉|〈名词〉
“我是大学生”是否是该语言的句子?
〈句子〉::=〈主语〉〈谓语〉 〈主语〉::=〈代词〉|〈名词〉 〈代词〉::= 你 | 我 | 他 〈名词〉::= 王明 | 大学生 | 工人 | 英语 〈谓语〉::=〈动词〉〈直接宾语〉 〈动词〉::= 是 | 学习 〈直接宾语〉::=〈代词〉|〈名词〉 〈句子〉
}的文法。
分析:n≧1,所以必须用递归规则。a和b的 个数 一样多,但c的个数不同,所以将生成 含 a,b的部分与生成含e的部分分开,A生成 ab,B生成e. G[Z]:Z→AB
A→aAb|ab
B→eB|ε
4)文法的等价
• 若L(G1)=L(G2),则称文法G1和G2是等价的。
如文法G1[A]:A→0R 与 G2[S]:S→0S1 等价
设 z = abc, 那么 z 的头是: ε ,a ,ab , abc(除 abc 外都是固有头) z 的尾是: ε ,c ,bc , abc(除 abc 外都是固有尾)
4、符号串的运算
符号串的长度:符号串中符号的个数.符号串s的长度 记为|s|。 ε的长度为0 符号串的连接:符号串x、y的连接,是把y的符号写在 x的符号之后得到的符号串xy 例 x=ST,y=abu 则 xy=STabu
|x|=2,|y|=3,|xy|=5
εx = xε= x
方幂:符号串x自身连接n次得到的符号串 xx…xx(n个x)定义为 xn x0=ε , x1=x, x2=xx, x3=xxx x=AB, 则 x0=ε , x1=AB, x2=ABAB, x3=ABABAB 对于 n>0, xn = xxn-1 = xn-1x
例如: 汉语的字母表中包括汉字、数字及标点符号等。 C语言的字母表是由字母、数字、若干专用符号及IF、 FOR之类的保留字组成。
编译原理课程设计之第三章上下文无关文法及分析
![编译原理课程设计之第三章上下文无关文法及分析](https://img.taocdn.com/s3/m/fcf2a2c4a300a6c30d229f76.png)
14
无关文法及分析
1. 上下文无关文法(即2型文法)的形式定义:
上下文无关文法是一个四元组(VT , VN , P , S):
① ②
终非结终符 结集 符合 集合VTVN(与VT产的不生左相式部交)
产生式 的右部
③ 产生式或文法规则A→α形成的集合P,
其中A∈VN,α∈(VT∪VN)* 4) 开始符号S,其中S∈VN
25
无关文法及分析
3.2 上下文无关文法的形式定义
1. 上下文无关文法(即2型文法)的形式定义 2. chomsky文法的分类 3. 推导和规约的定义 4. 句型和句子的定义 5. 最左和最右推导 6. 文法定义的语言 7. 递归产生式和递归文法 8. 文法和语言
mcy
编译原理课程设计之第三章上下文
mcy
编译原理课程设计之第三章上下文
1
无关文法及分析
第三章 上下文无关文法及分析
本章的目的是为语言的语法 描述寻求形式工具,要求该 工具对程序设计语言给出精 确无二义的语法描述。
mcy
编译原理课程设计之第三章上下文
2
无关文法及分析
第三章 上下文无关文法及分析
✓3.1 语法分析过程 ▪ 3.2 上下文无关文法的形式定义
下面的2型文法描述了包含加法、减法和乘法的简 单整型算术表达式的语法结构。
文法G[exp]:
exp → exp op exp exp →(exp) exp → number
34-3 是符合该 语法结构的简单 整型算术表达式 (句子)吗?
op → + | - | *
mcy
编译原理课程设计之第三章上下文
令G是一个如上所定义的文法,则G=(VT,VN,P,S)
编译原理第三章1
![编译原理第三章1](https://img.taocdn.com/s3/m/851dee73f8c75fbfc77db29a.png)
《 课前思政教育---疫情期间增强自律性 》
- 19/74页 -
→ * •E E+E | E E | (E) |
i •E
•*
《 课前思政教育---疫情期间增强自律性 》
- 20/74页 -
•5.语言
• 文法G[S]产生的所有句子的集合称为
文
•*
• 法G所定义的语言,记为L(G[S]):
• 由语言定义可知:
E id
id
id
《 课前思政教育---疫情期间增强自律性 》
- 40/74页 -
3.2 语言和文法
• 文法的优点
• 文法给出了精确的,易于理解的语法说明。 • 对于某些文法类,可以为其中的文法自动产生高效的分析器。 • 可以给语言定义出层次结构(如嵌套和配对)。 • 以文法为基础的语言的实现便于语言的修改。
•我们提出一个问题:
•这种推导过程是否唯一?
《 课前思政教育---疫情期间增强自律性 》
- 30/74页 -
• 同一个句型(句子)可以通过不 同的推导序列推导出来,这是因为 在推导过程中与所选择非终结符的 次序有关。
《 课前思政教育---疫情期间增强自律性 》
- 31/74页 -
•例如,设有文法G[N1]
3.2 语言和文法
《 课前思政教育---疫情期间增强自律性 》
- 43/74页 -
3.2 语言和文法
• 从软件工程角度看,词法分析和语法分析的分离有如下好处
ü 简化词法分析器的设计 ü 编译器的效率会改进 ü 编译器的可移植性加强 ü 便于编译器前端的模块划分
《 课前思政教育---疫情期间增强自律性 》
《 课前思政教育---疫情期间增强自律性 》
编译原理文法__上下文无关文法及其语法树-二义性
![编译原理文法__上下文无关文法及其语法树-二义性](https://img.taocdn.com/s3/m/ab13d810bed5b9f3f90f1c1c.png)
• 二义性问题不可判定
不存在一个算法, 能在有限步骤内, 确切判定任给的 一个文法是否为二义的 二义性: 存在性证明 无二义性: 可以为无二义性寻找一组充分条件
(3). 二义性证明举例
证明以下文法是二义的 G:〈语句〉→ if〈条件〉then〈语句〉 | if〈条件〉then〈语句〉else〈语句〉 | 其他语句 证明: 找到一个句子, 该句子对应两个不同的语法树
(4).二义性的消除
定义表达式的无二义文法 G' : E→ T | E+T T→ F | T*F F→ (E) | i
* 定义条件语句的无二义文法
G': <语句> → <匹配句> | <非匹配句> <匹配句 >→ if<条件>then<匹配句 >else<匹配句 > | <其他语句> <非匹配句> → if <条件> then <语句 > | if<条件>then<匹配句>else<非匹配句>
规则: 每个else和最近的尚未匹配的then匹配
if c1 then if c2 then s1 else s2
* (5). 先天二义的语言
• 如果产生上下文无关语言的每一个文法都是二 义的,则说此语言是先天二义的。
• There are some languages, for which no unambiguous grammars can be found. Such languages are said to be inherently ambiguous.
二义性的判定?二义性问题不可判定?不存在一个算法能在有限步骤内确切判定任给的一个文法是否为二义的确切判定任给的一个文法是否为二义的?二义性
(22)第三章 第五讲 上下文无关文法与下推自动机(简介)
![(22)第三章 第五讲 上下文无关文法与下推自动机(简介)](https://img.taocdn.com/s3/m/9f829ec876eeaeaad1f3309f.png)
特例:在定义中只要取w2=ε,则生成式的形式变为: A→w1C , A→w3 。这显然是右线性文法。因此,右线性 文法是线性文法的特例。
五、受限型上下文无关文法
2. 顺序文法
定义:对于上下文无关文法G , 如果非终结符可以排序为: A1,A2,A3,......,An ,当P中有生成式Ak→β时,若β内不含有l < k的Al,则称G是顺序文法。 实例:设文法G=({A2},{a,b},P,A2),其中生成式P如下: A2→aA2b , A2→ε 由定义可知,该文法G是顺序文法,由它产生的语 言为: L(G)={anbn | n≥0}。(参考书第181页的例2有错) 结论:线性文法总可以设法转换为顺序文法。利用顺序文 法进行文法分析是比较方便的。这样一来,前面所有的有 关右线性文法的分析都可以转换为对顺序文法的分析。
注意:由上一讲我们已经知道下推自动机的终止状态接受 和空栈接受是可以互换的,所以下面的两条定理就只强调 了下推自动机的空栈接受与上下文无关文法的关系。 定理18 (P161):设上下文无关文法G=(N,T,P,S),产生语言 L(G),则存在一个下推自动机M,以空栈方式接受语言 LФ(M),使得有LФ(M)=L(G) (证明略: P162~P164)
定理19 (P166):设下推自动机M以空栈方式接受语言 LФ(M),则存在一个上下文无关文法G产生语言L(G) , 使得有: L (G)=LФ (M) (证明略: P 166~P169)
一、上下文无关文法与下推自动机的关系
2.上下文无关语言的泵浦引理 也即中间部分不会很长。 定理20:设L是上下文无关语言,存在常数p,如果w∈L且 |w|≥p,则w可写为w=w1w2w0w3w4,使w2w3≠ε(即w2,w3不同时 为ε),|w2w0w3|≤p及对于i≥0,有w1w2iw0w3iw4∈L。 注意:利用泵浦引理只能证明某些语言不是上下文无关语 言,而不能足以证明某语言一定是上下文无关语言。因 为泵浦引理所给出的条件只是上下文无关语言的必要条 件而不是充分条件。 例如:可以证明:L1 上下文无关语言。 ={anbncn|n≥1}和L
上下文无关文法
![上下文无关文法](https://img.taocdn.com/s3/m/aab267c52cc58bd63186bdde.png)
上下文无关文法百科名片形式语言理论中一种重要的变换文法,用来描述上下文无关语言,在乔姆斯基分层中称为2型文法。
由于程序设计语言的语法基本上都是上下文无关文法,因此应用十分广泛。
目录[隐藏]简介例子范式同态映射下的性质文法形式和文法的相似性文法的二义性子文法类[编辑本段]简介上下文无关文法(Content-Free Grammar, CFG)在计算机科学中,若一个形式文法G = (N, Σ, P, S) 的上下文无关文法产生式规则都取如下的形式:V -> w,则称之为上下文无关的,其中V∈N ,w∈(N ∪Σ)* 。
上下文无关文法取名为“上下文无关”的原因就是因为字符V 总可以被字串w 自由替换,而无需考虑字符V 出现的上下文。
一个形式语言是上下文无关的,如果它是由上下文无关文法生成的﹙条目上下文无关语言﹚。
上下文无关文法重要的原因在于它们拥有足够强的表达力来表示大多数程序设计语言的语法;实际上,几乎所有程序设计语言都是通上下文无关文法过上下文无关文法来定义的。
另一方面,上下文无关文法又足够简单,使得我们可以构造有效的分析算法来检验一个给定字串是否是由某个上下文无关文法产生的。
例子可以参见LR 分析器和LL 分析器。
BNF ﹙巴克斯-诺尔范式﹚经常用来表达上下文无关文法。
文法规则使用相似的表示法。
名字用斜体表示(但它是一种不同的上下文无关文法字体,所以可与正则表达式相区分)。
竖线仍表示作为选择的元符号。
并置也用作一种标准运算。
但是这里没有重复的元符号(如正则表达式中的星号*),稍后还会再讲到它。
表示法中的另一个差别是现在用箭头符号“→”代替了等号来表示名字的定义。
这是由于现在的名字不能简单地由其定义取代,而需要更为复杂的定义过程来表示,这是由定义的递归本质决定的。
同正则表达式类似,文法规则是定义在一个字母表或上下文无关文法符号集之上。
在正则表达式中,这些符号通常就是字符,而在文法规则中,符号通常是表示字符串的记号。
什么是上下文无关文法
![什么是上下文无关文法](https://img.taocdn.com/s3/m/50580b6624c52cc58bd63186bceb19e8b8f6ec64.png)
什么是上下文无关文法
这个是在语法分析阶段学习到的概念。 若一个G = (N, Σ, P, S) 的产生式规则都取如下的形式:V->w,则谓之。其中 V∈N ,w∈(N∪Σ)* 。 上下文无关文法取名为“上下文无关”的原因就是因为字符 V 总可以被字串 w 自由替换,而无需考虑字符 V 出现的上下文。
上下文无关文法重要的原因是:一方面他有足够强的语言表达力来表示大多数程序设计语言的语法;另一方面,足够简单。
编译原理第三章语法分析
![编译原理第三章语法分析](https://img.taocdn.com/s3/m/9ee82be82cc58bd63186bdab.png)
递归下降程序:
void F() { if(lookahead= =’i’) match(‘i’); else if(lookahead= =’(’) { match(‘(’); E(); if(lookahead= =’)’) match(‘)’); else error(); } else error(); }
输入串
id+id*id;# id+id*id;# id+id*id;# id+id*id;# id+id*id;# +id*id;# +id*id;#
动作
pop(L),push(E;L) pop(E),push(TE’) pop(T),push(FT’) pop(F),push(id) pop(id),next(ip) pop(T’)
形式语言分类
定义:若文法G=(N,T,P,S)的每个产生式α→β中,均有 α∈(N∪T)*N(N∪T)*,且至少含有一个非终结符, β∈(N∪T)*,则称G为0型文法(短语文法)。 ①1型文法(上下文有关文法):G的任何产生式α→β(S→ε 除外)均满足|α|≤| β| (|x|表示x中文法符号的个数); ②2型文法(上下文无关文法):G的任何产生式形如A→β, 其中A∈N,β∈(N∪T)*; ③3型文法(正规文法、线性文法):G的任何产生式形如A→a 或者A→aB(或者A→Ba),其中A,B∈N,a∈T*。
定义:将产生式A→γ的右部代替文法符号序列αAβ 中的A得到αγβ的过程,称为αAβ直接推导 出αγβ,记作:αAβαγβ。
编译原理-西安交通大学(冯博琴)第三章上下文无关文法
![编译原理-西安交通大学(冯博琴)第三章上下文无关文法](https://img.taocdn.com/s3/m/ba363b8bc8d376eeaeaa317f.png)
2、二义性问题
定义:
文法G的某一句子有两棵不同的树,则G为二义的。
二义性对语法分析不便,因此希望:
1)判定二义否 2)无二义性的充分条件 3)如何消除二义性
解决办法:尽量去掉二义性
①如对上例,可以通过阐明运算符的优先性和 结合性来解除文法的二义性
②通过重写一个文法,把结合性和优先规则结 合进文法本身中去 注意到,L(G)=L(G’),G≠G’
该文法的: VN是出现P的左部所有符号集合 V是P的所有符号
∴VT = V \ VN S是该文法所定义的句子名字
∴写出了P ,就能找出其它三元素
2、从此可见
终结符:是用以组成语言中的串的基本符号,与
程序语言中“单词”是同义语; 如:表达式id+(id)*( - id)中,+、-、*、/、↑、id均为 终结符
得到相同的语法树 •有的语法,对于同一句子、应用不同规则进行推
导得到不同的语法树
例4 根据文法G对句子id + id * id进行推导
①文法G E -> E+E|E*E|( E )| i
②推导1 E => E+E => id+E => id+E*E => id+id*E => id+id*id ③推导2 E => E*E => E+E*E => id+E*E => id+id*E => id+id*id
问题: 如何描述语言 定义: 文法是描述语言的语法结构的形式规则(即语法规
则) 目的: 解决语言的有穷说明问题,包含对语法的描述,但
却不表达任何语义
1、文法的描述应达到要求:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
令G是一个如上所定义的文法,则G=(VT,VN,P,S)
mcy
15
文法举例
例 G1 =({N} , {0,1}, {N→0N, N→1N, N→0, N→1}, N) 其中:非终结符集合: VN ={N} 终结符集合: VT ={0,1} 产生式的集合: P={N→0N,N→1N,N→0,N→1}
mcy
20
3型文法:通常,我们把右线性文法及左线性文法
统称为3型文法或正规文法。 若文法G中任一产生式α→β的形式都为A→aB 或 A→a,其中 A∈VN ,B∈VN ,a∈VT ,则称G 为右线性文法; 类似地,如果G中仅含有形如A→Ba 或 A→a的 产生式,则称G为左线性文法;
mcy
mcy
27
直接推导“”或一步推导 若有v,w满足: v=γαδ, w=γβδ
其中:α→β是文法G的产生式,
γ∈ (VT ∪ VN)*,δ∈ (VT ∪ VN)*
则称v直接推导到w,记作 v w,称w直接归 约到v。 注:直接推导就是产生式规则的一次运用, 即用产生式的右部替换左部。
mcy
mcy
32
4. 句型和句子的定义
定义4 句型和句子:设G=(VN , VT , P , S)是一文 法,且 V=VN∪VT 若S =>*α,α∈V*,则称α为文法G的句型;
若S=>+α,α∈VT*,则称α为文法G的句子;
mcy
33
简单整型算术表达式文法:
exp → exp op exp|(exp)|number op → +|-|* 给出算术表达式(34-3)*42的一个推导,请 列出推导过程中出现的句型和句子。
的终结符、非终结符、开始符号分别为?
mcy
18
3.2 上下文无关文法的形式定义
1.
2. 3. 4. 5. 6. 7. 8.
上下文无关文法(即2型文法)的形式定义 chomsky文法的分类 推导和规约的定义 句型和句子的定义 最左和最右推导 文法定义的语言 递归产生式和递归文法 文法和语言
mcy
19
mcy
2
第三章 上下文无关文法及分析
形式工 3.1 语法分析过程 具 3.2 上下文无关文法的形式定义 3.3 二义性文法
作业
mcy 3
3.1 语法分析过程 语法分析程序的任务:
语法分析以词法分析程序输出的单词序列为输
入,分析源程序的语法结构,判断它是否为相 应程序设计语言的合法程序。 通常语法分析的结果是构造出表示该语法结构 的分析树(parse tree)或语法树(syntax tree)。 语法分析阶段可以确定单词流中违反源语言语 法结构规则的错误。
开始符号为:N
mcy
16
通常情况下,文法只用产生式的集合表示:
G1[N]: 也可写成:
N→0N N→1N N→0 N→1
G1[N]:
N→0N | 1N | 0 | 1
mcy
17
文法G[exp] exp → exp op exp exp →(exp)
exp → number
op → + | - | *
2. chomsky文法的分类
通过对产生式施加不同的限制,chomsky将文法分为四种类型: 0型文法:若文法G中任一产生式α →β ,都有 α ∈(VN∪VT)+,β ∈(VN∪VT)* ,则称G为0型文法 1型文法:若文法G中任一产生式α →β ,都有 α ∈(VN∪VT)+,β ∈(VN∪VT)* |β |≥|α |, 仅仅 S→ε 除外,则称G为1型文法 2型文法:若文法G中任一产生式α →β ,都有α ∈VN, β ∈(VN∪VT)* ,则称G为2型文法,也称为上下文无关文法
mcy
34
算术表达式(34-3)*42的推导: exp exp op exp exp op number exp * number (exp) * number (exp op exp) * number (exp op number) * number (exp - number) * number (number - number) * number
mcy
10
问:下面的语句是否是一个符合上述语法结构的简单句 子?
big elephant ate the peanut. 冠词 形容词 名词 动词 冠词 名词 我们把上述两个字符串中间用一箭头分隔构成的有序 对称为产生式。其中, “ →”表示“由……组成”, “ →”也可以用=,::=,:来代替。
mcy
8
Chomsky文法分为四个层次:0型,1型,2
型和3型文法。
其中2型文法(或上下文无关文法)被证明是程
序设计语言中最有用的。 今天2型语言已代表着程序设计语言语法结构的 标准方式。
mcy
9
Chomsky文法就是用生成方式来描述语言的:语言
中的每个句子可以用严格定义的规则来构造。 文法示例: 简单句子的语法结构可有以下规则表示: <句子>→<主语> <谓语> <主语>→ <冠词> <形容词> <名词> <谓词>→ <动词> <直接宾语> <直接宾语>→<冠词> <名词>
mcy
35
3.2 上下文无关文法的形式定义
1.
2. 3. 4. 5. 6. 7. 8.
上下文无关文法(即2型文法)的形式定义 chomsky文法的分类 推导和规约的定义 句型和句子的定义 最左和最右推导 文法定义的语言 递归产生式和递归文法 文法和语言
mcy
36
5. 最左和最右推导
最左推导 对于文法G[S]: S * 是一个最左推导 是指:在推导过程中的任何一步直接推导α β , 都是对字符串α 中的最左非终结符进行替换,其中 α 、β 是句型。 简单整型算术表达式文法:
mcy
4
如何来描述一种语言(符号串的集合)?
如果语言是有穷的(只含有有穷个句子),
可以将句子逐一列出来表示。
如果语言是无穷的,找出语言的有穷表示。
mcy
5
语言的有穷表示有两个途经:
生成方式(文法):语言中的每个句子可以用
严格定义的规则来构造。 识别方式(自动机):用一个过程,当输入的 一任意串属于语言时,该过程经有限次计 算后就会停止并回答“是”,若不属于, 要么能停止并回答“不是”,要么永远继 续下去 。
mcy
38
S * 是一个最右推导是指:在 推导过程中的任何一步直接推导α β ,都是 对字符串α 中的最右非终结符进行替换,其中 α 、β 是句型。
最右推导: 最右推导也被称为规范推导。由规范推导所得
的句型称为规范句型。
mcy
39
算术表达式(34-3)*42的最右推导: exp exp op exp exp op number exp * number (exp) * number (exp op exp) * number (exp op number) * number (exp - number) * number (number - number) * number
28
例:G[S]:S→0S1,S→01 直接推导: S 0S1 0S1 00S11 00S11 000S111 000S111 00001111
Байду номын сангаас
mcy
29
推导的定义
若存在v=w0w1 ... wn=w (n>0), 我们用
v=>+w表示一步或多步推导,称v推导出w, 或w归约到v; 若有v=>+w,或v=w,则记为v=>*w,表示 零步或多步推导。
21
例:1型(上下文有关)文法
文法G[S]: S→CD
C→aCA C→bCB AD→aD BD→bD Aa→bD
Ab→bA
Ba→aB Bb→bB C→ε D→ε
mcy
22
例:2型(上下文无关)文法 文法G[S]:S→AB A→BS|0
B→SA|1
mcy
23
例:3型(上下文无关)文法
G[S]: S→0A|1B|0 A→0A|1B|0S B→1B|1|0
作业
mcy 13
3.2 上下文无关文法的形式定义
1.
2. 3. 4. 5. 6. 7. 8.
上下文无关文法(即2型文法)的形式定义 chomsky文法的分类 推导和规约的定义 句型和句子的定义 最左和最右推导 文法定义的语言 递归产生式和递归文法 文法和语言
mcy
14
1. 上下文无关文法(即2型文法)的形式定义: 上下文无关文法是一个四元组(VT , VN , P , S): 产生式 ① 终结符集合VT 产生式 的左部 的右部 ② 非终结符集合VN(与VT不相交) ③ 产生式或文法规则A→α形成的集合P, 其中A∈VN,α∈(VT∪VN)*
exp → exp op exp|(exp)|number op → +|-|*
mcy
37
算术表达式(34-3)*42的最左推导:
exp exp op exp (exp)op exp (exp op exp)op exp (number op exp)op exp (number - exp)op exp (number - number) op exp (number - number) * exp (number - number) * number
mcy
6
寻求程序设计语言语法结构的形式化描述: 正规表达式:? Number=digit digit* Digit=0|1|2|3|4|5|6|7|8|9 有穷自动机:?