编译原理课程设计之第三章 上下文无关文法及分析
编译原理上下无关文法和文法分析

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讲)

• 例 ( {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
编译原理和技术
中国科学技术大学 计算机科学与技术学院 陈意云
上下文无关文法

第三部分上下文无关语言和下推自动机前面介绍的有限自动机是计算的初级模型,它所接受的正规语言不太关心字符串自身的结构。
上下文无关文法(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符号“|”表示“或”的含义。
编译原理第三章语法分析

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
第三章:上下文无关语法

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

例 设有文法 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语言的语法
• 什么是语言? • 如何描述语言? • 如何识别语言中的句子?
• 语言的定义
编译原理(清华)第三章文法和语言

例 文法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章 文法和语法

〈动词〉::= 是 | 学习
〈直接宾语〉::=〈代词〉|〈名词〉
“我是大学生”是否是该语言的句子?
〈句子〉::=〈主语〉〈谓语〉 〈主语〉::=〈代词〉|〈名词〉 〈代词〉::= 你 | 我 | 他 〈名词〉::= 王明 | 大学生 | 工人 | 英语 〈谓语〉::=〈动词〉〈直接宾语〉 〈动词〉::= 是 | 学习 〈直接宾语〉::=〈代词〉|〈名词〉 〈句子〉
}的文法。
分析: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之类的保留字组成。
- 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 有穷自动机:?