第3章 语法分析
语法分析

11
3.2 上下文无关文法(CFG)
4. 产生式的缩写形式
当多个产生式的左部非终结符相同时,可合并为一个产生式。 新的产生式的左部是此非终结符,右部是所有原来右部的 或运算(并集合)。 [例3.3] G3.1可以重写为如下形式: P: E → E + E (1) E → E + E (1) E → E * E (2) | E * E (2) E → (E) (3) |(E) (3) (G3.2) E → -E (4) | -E (4) E → id (5) | id (5) 用“|”连接的每个右部称为一个候选项,具有平等的权利。 BNF如何表示?
E ( E id E E + ) E
id
E ( E
id
E E + ) E id
最左推导和最右推导 的中间过程对
3.2 上下文无关文法(CFG)
分析树既反映了产生句型的推导过程,又反映了句型的结构。 在更多的情况下,仅关注句型结构,而忽略推导过程。 定义3.6 对CFG G的句型,表达式的语法树被定义为具有下述 性质的一棵树: (1) 根与内部节点由表达式中的操作符标记; (2) 叶子由表达式中的操作数标记; (3)用于改变运算优先级和结合性的括弧,被隐含在语法 树的结构中。 语法树与分析树的最根本区别在于内部节点(包括根节点): 分析树的内部节点是非终结符; 语法树的内部节点是操作符(运算符); 或者说语法树中省略了反映分析过程的非终结符。
6
3.1 语法分析的若干问题
[例3.1] 下述两条是有语法错误的语句,其中第一条赋值句结 束时忘记加分号,采用紧急恢复方式和短语级恢复方式的 可能结果分别如下所示。 x := a + b y := c + d; 紧急方式: x := a + b + d; -- 丢弃b后若干记号,直到遇到+ 短语级恢复:x := a + b; -- 加入分号,使之成为一个赋值句 y := c + d;
计算机导论第3章 程序设计语言(答案)

第3章程序设计语言习题一、选择题1. A2. A3. D4. A5. AB6. C7.D8.C9.D 10. D11.ABCD 12.B 13.A 14.ABD二、简答题1.简述程序的概念。
答:一个程序就是能够实现特定功能的一组指令序列的集合。
或者程序=算法+数据结构。
2. 简述程序设计语言的发展阶段。
经历了机器语言、汇编语言和高级语言三个发展阶段。
机器语言又称面向机器的语言,是特定的计算机硬件系统所固有的语言,是CPU唯一能够真正不经过翻译而直接识别和执行的语言。
相比而言,其他任何语言编写的程序都必须最终转换成机器语言以后才能在CPU上执行。
由于二进制编码形式的机器指令不便于记忆和使用,人们很快引入了便于记忆、易于阅读和理解、由英文单词或其缩写符号表示的指令,称为汇编指令,又称符号指令或助记符。
利用汇编指令编写得到的程序称为汇编语言程序。
通过引入汇编语言,在一定程度上解决了低级语言程序设计的问题,之后又出现了程序的“可移植性”问题,即程序员编写的源程序如何从一台计算机方便地转移到另一台计算机上执行。
为了解决这个问题,人们引入了高级语言。
高级语言是一种利用意义比较直观的各种“单词”和“公式”,按照一定的“语法规则”来编写程序的语言,又称为程序设计语言或算法语言。
高级语言之所以“高级”,是因为高级语言把很多硬件上复杂费解的概念抽象化了,从而使得程序员可以绕开复杂的计算机硬件的问题、无需了解计算机的指令系统,就能完成程序设计的工作。
3. 简述程序设计过程的一般步骤。
程序设计的过程一般有四个步骤。
(1)分析问题在着手解决问题之前,应该通过分析,充分理解问题,明确原始数据、解题要求、需要输出的数据及形式等。
(2)设计算法算法是解题的过程。
首先集中精力于算法的总体规划,然后逐层降低问题的抽象性,逐步充实细节,直到最终把抽象的问题具体化成可用程序语句表达的算法。
这是一个自上而下、逐步细化的过程。
(3)编码利用程序设计语言表示算法的过程称为编码。
916073-编译原理原理与技术-第3章 语法分析

id
id
E E+E E E +E id E + E id id + E id id + id E
E +E
E
*
E id
id
id
3.2 语言和文法
• 文法的优点
–文法为语言给出了精确的、易于理解的语法规范 –自动产生高效的分析器 –可以给语言定义出层次结构 –以文法为基础的语言的实现便于语言的修改
FIRST(E) = FIRST(T) = FIRST(F) = { ( , id } FIRST(E ) = {+, } FRIST(T ) = {, } FOLLOW(E) = FOLLOW(E ) = { ), $} FOLLOW(T) = FOLLOW (T ) = {+, ), $} FOLLOW(F) = {+, , ), $}
id
+ term
term * factor
factor
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 • 两个最左推导: 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
3.3 自上而下分析
编译原理课程设计之第三章上下文无关文法及分析

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)
编译原理 第3章

3.1.3 识别标识符的若干约定和策略
定义标识符的语法规则为 <标识符>→<字母>∣<标识符><字母>∣<标识符><数字> 从语法上来说,标识符的长度似乎可以任意。 然而,考虑实现技术,许多语言都对标识符的最大允许长度作 了限制。
编译原理
7
设计扫描器时,按如下原则行事: 1. 如果一个标识符中的字符个数超过最大允许长度,则把尾部 多出的字符截去; 2. 对于字符个数不超过最大允许长度的标识符,则按“尽可能 长”的策略来识别标识符。
图3.5 状态图
首先,在开始状态R下扫描的第一个符号是0,转到状态 V,表示0是句柄,归约到V。接下来,在状态V扫描1, 转到状态S,此时句柄为V1,归约成S。再往下扫描1,由 状态S转到状态U,表示句柄为S1归约为U。最后,扫描0, 转到状态S,此时句柄为U0,归约为S,
编译原理 27
图3.6(a)列出分析的每一步。形成图3.6(b)所示的语法 树。 自底向上的分析。
读入a1,沿矢线方向到下一状态,在此状态时扫 描a2,……, 直至W中全部字符读完且进入终态F,则W已被接受。
编译原理 19
例:下面的状态图对于串baabba的识别 S→aA|bB,A→bB|aD|a,B→aA|bD|b,D→aD|bD|a|b
a
A a a
a
S b
b
B
a
D b a,b b Z
编译原理
16
E d
d 0
d
d
d 5 d 6
1
.
d
2
E
4
±
. 图3.4文法G<无符号数>的状态图
编译原理第三章1

《 课前思政教育---疫情期间增强自律性 》
- 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 语言和文法
• 从软件工程角度看,词法分析和语法分析的分离有如下好处
ü 简化词法分析器的设计 ü 编译器的效率会改进 ü 编译器的可移植性加强 ü 便于编译器前端的模块划分
《 课前思政教育---疫情期间增强自律性 》
《 课前思政教育---疫情期间增强自律性 》
《编译原理教程》课后习题答案第三章语法分析

第三章 语法分析 来消除左递归。由此,将产生式B→Bb|d改造为
B→dB′ B′→bB′| ε
其次,应通过提取公共左因子的方法来消除G[A]中的回 溯,即将产生式A→aABl|a改造为 A→aA′ A′→ABl | ε
最后得到改造后的文法为 G[A′]:A→aA′ A′→ABl | ε B→dB′ B′→bB′| ε
S→(T) | aS′ S′→+S | ε T→ST′ T′→,ST′| ε 改造后的文法已经是LL(1)文法,不带回溯的递归子程序如下: void match (token t)
{ if ( lookahead==t) lookahead=nexttoken; else error ( ); }
第三章 语法分析 void S ( ) {
第三章 语法分析 3.3 已知文法G[S]为S→aSb|Sb|b,试证明文法
G[S]为二义文法。 【 解 答】 由 文 法G[S] :S→aSb|Sb|b ,对 句 子
aabbbb可对应如图3-1所示的两棵语法树。
第三章 语法分析
S aSb aSb
Sb b
S Sb aSb aSb b
图3-1 句子aabbbb对应的两棵不同语法树
第三章 语法分析
求得:
FIRST(A)={a}
FIRST(A′)={a, ε }
FIRST(B)={d}
FIRST(B′)={b, ε }
对文法开始符号A,有FOLLOW(A)={#}。
由 A′→ABl 得 FIRST(B)\{ ε }FOLLOW(A) , 即 FOLLOW(A)={#,d};
第三章 语法分析 【解答】 (1) 消除左递归后,文法G[D′]如下:
D→TL T→int|long|short L→idL
《编译原理教程》习题解析与上机指导(第四版) 第三章

B.一个非终结符
C.多个终结符
D.多个非终结符
(20) LL(1)分析表需要预先定义和构造两族与文法有关的集
合。
A.FIRST和FOLLOW
B.FIRSTVT和FOLLOW
C.FIRST和LASTVT
D.FIRSTVT和LASTVT
(21) 设a、b、c是文法的终结符且满足优先关系ab和bc,则 。
D.翻译过程
(12) 规范归约中的“可归约串”由 定义。
A.直接短语
B.最右直接短语
C.最左直接短语
D.最左素短语
(13) 规范归约是指 。
A.最左推导的逆过程
B.最右推导的逆过程
C.规范推导
D.最左归约的逆过程
(14) 文法G[S]:S→aAcB | Bd
A→AaB | c
B→bScA | b
则句型aAcbBdcc的短语是 。
A.Bd
B.cc
C.a
D.b
(15) 文法G[E]:E→E+T | T
T→T*P | P
P→(E) | i
则句型P+T+i的句柄和最左素短语是 。
A.P+T和T
B.P和P+T
C.i和P+T+i
D.P和P
(16) 采用自顶向下分析,必须 。
A.消除左递归
B.消除右递归
C.消除回朔
D.提取公共左因子
(17) 对文法G[E]:E→E+S | S
满足ab、a⋖b和a⋗b三种关系之一 D.文法可存在…QR…的句型且任何终结符对(a,b)满足
ab、a⋖b和a⋗b三种关系
(23) 任何算符优先文法 优先函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3章 语法分析
最后可得产生标识符的文法G[I]为:
G = ({a,b,„,z,0,„,9},{I,S,T,L,D},I,ξ) ξ: I→L∣LS S→T∣ST T→L∣D
L→a∣b∣„∣z
D→0∣1∣„∣9
计算机科学与技术学院 20
第3章 语法分析
例3.2:写一文法,使其语言是奇数集合,但不允许出
计算机科学与技术学院 28
第3章 语法分析
1. 0型文法与0型语言(对应图灵机)
如果文法G的每一个产生式具有下列形式: α→β 其中,α V* VN V* , β V* , V=VT∪VN 。 0型文法又叫短语文法,记为PSG。0型文 法相应的语言称为0型语言或称递归可枚举集, 它的识别系统是图灵(Turing)机。
解:① VN={N,D}
VT={0,1,2,3,4,5,6,7,8,9}
② L(G)的句子是一些不舍前零的数字串。
计算机科学与技术学院 26
第3章 语法分析
3.1.2 形式语言分类
什么是形式语言?
• 序列的集合称为形式语言。具体地说,每个形 式语言都是某个字母表上按某种规则构成的所 有符号串的集合。(反之,任何一个字母表上 字符串的集合均可以定义为一个形式语言)
计算机科学与技术学院 9
第3章 语法分析
作为规则左部至少出现一次的那些语 法变量称为非终结符号,而不出现在规则 左部的符号称为终结符号;
非终结符号<句子>,出现在文法的最
开始,称为开始符号(识别符号)。
计算机科学与技术学院 10
第3章 语法分析
在Pascal语言中,<语句>用下述一组规则来定义: <语句>→<条件语句>|<当语句>|<复合语句>|<赋值语句> <条件语句>→if <布尔表达式> then <语句> else <语句> <当语句>→while <布尔表达式> do <语句> <复合语句>→begin <语句表> end <语句表>→<语句>|<语句> ; <语句表> <赋值语句>→<变量>:=<算术表达式>
• 对于每个具体语言,都有语法和语义两个方面, 形式语言是指不考虑语言的具体意义(不考虑语 义),只考虑其语法形式。
计算机科学与技术学院 27
第3章 语法分析
语言学家 Chomsky 于1956年首先建立了形 式语言的描述,定义了四类文法及相应的形式 语言,并分别与相应的识别系统相联系。 Chomsky把文法分成4种类型:0型文法、1 型文法、2型文法和3型文法。 文法的能力按由强到弱排列为: 0型文法 > 1型文法 > 2型文法 > 3型文法 注:四类文法的差别在于对产生式施加不同的 限制。
E→E+E∣E*E∣(E)│ i 从E出发进行一系列的推导,表达式i+i*i的推导如下: E ⇒ E+E ⇒ E+E*E ⇒ E+E*i ⇒ E+i*i ⇒ i+i*i
+
计算机科学与技术学院 24
第3章 语法分析
定义3:
假定G[S]是一个文法,S是它的开始符号, * 如果S⇒α,α∈(VT∪VN)*,则称α是文法G[S]的 一个句型;如果α∈VT*,则称α是文法G[S]的一 个句子(仅含终结符的句型是一个语法分析
显然,按照上述办法,还可以生成: “王明是大学生”
“王明学习英语”
“我学习英语”
“你学习英语”
“他是工人”
“你学习王明”
等几十个句子。
计算机科学与技术学院 7
第3章 语法分析
“我大学生是”不符合上述规则,我们说 它不是句子。这些规则成为我们判别句子结构 合法与否的依据,换句话说,这些规则看成是 一种元语言,用它描述汉语。这样的语言描述 称为文法。
计算机科学与技术学院 29
第3章 语法分析
2.1型文法与1型语言(对应线性界限自动机, 自然语言)
文法G的每一个产生式α→β,均在0型文法 的基础上增加了字符长度上满足∣α∣≤∣β∣的 限制,则称文法G为1型文法或上下文有关文法, 记为CSG。 1型文法相应的语言称为1型语言或上下文有 关语言,它的识别系统是线性界限自动机。
定义4:
对于文法G[S],它所产生的句子的全体称为 由文法G[S]产生的语言,记为L[G],即有: L[G] ={α∣S ⇒+ α且α∈VT*}
计算机科学与技术学院 25
第3章 语法分析
例:有文法G[N]:
N→D|ND
D→0|1|2|3|4|5|6|7|8|9
问:① VN 和 VT 各是什么?
② L(G) 的句子是什么?
实体的相关规则可能不止一个。例如,有:
P→α1
P→α2
……
P→αn
可缩写成:
P→α1∣α2∣„∣αn
其中,每个αi(i=1,2,„,n)称为P的一个候选式
计算机科学与技术学院 17
第3章 语法分析
例3.1: 构造产生标识符的文法。
解:标识符是以字母开头的字母数字串。
用L表示“字母”类非终结符; 用D表示“数字”类非终结符; 用T表示“字母或数字”类非终结符。 则有: L→a∣b∣„∣z D→0∣1∣„∣9 T→L∣D
计算机科学与技术学院 13
第3章 语法分析
(4) ξ是产生式的非空有限集,其中每个产生式 (或称规则)是一序偶(α,β),通常写作
α→β 或 α::=β
α为产生式的左部,β为产生式的右部,
α∈(VT∪VN)+ 且 至 少 有 一 个 非 终 结 符 , 而 β∈(VT∪VN)*
计算机科学与技术学院 14
计算机科学与技术学院 22
第3章 语法分析
定义 2:
设文法 G = (VT,VN,S,ξ)且α、β∈(VT∪VN)*,如果存 在产生式 A→δ(δ∈(VT∪VN)*),则称αAβ可直接推导出 αδβ,即
αAβ ⇒ αδβ
其中“⇒”表示直接推导。
对推导的进一步定义如下: 若存在一个自α1至αn的推导序列: α1 ⇒ α2 ⇒ α3 ⇒ „ ⇒ α n 称α1可推导出αn。
想一想:根据以上规则,字符串 While x<=y do x:=(x+1) 是否为一个合法的句子?
计算机科学与技术学院 12
第3章 语法分析
定义1:文法G定义为四元组 (VT,VN,S,ξ),
其中:
(1) VT为终结符号集,这是一个非空有限集,它的 每个元素称为终结符号;
(2) VN 为非终结符集,它也是一个非空有限集, 其每个元素称为非终结符号,且有VT∩VN=Φ; (3) S为一文法开始符号(或识别符号),是一个 特殊的非终结符号,即S∈VN;
计算机科学与技术学院 23
第3章 语法分析
关于推导的两种表示形式:
① 用α1 ⇒ αn表示:从α1出发,经过一步或若干步,可推 导出αn。
+
② 用α1 ⇒*αn表示:从α1出发,经过0步或若干步可推导 * 出αn。换言之α1 ⇒ αn意味着,或者α1=αn,或者α1 ⇒ αn。
例如:对下面的文法G[E]:
语法是指一组规则,用它可以形成和产生一 个合适的程序。 目前广泛使用的程序设计语言语法结构的描 述工具是上下文无关文法。
计算机科学与技术学院 2
第3章 语法分析
文法是描述语言语法结构的形式规则 (即语法规则)。文法是程序语言的生成系 统,而自动机则是程序语言的识别系统; 用文法可以精确地定义一个语言,并依据 该文法构造出识别这个语言的自动机。因
计算机科学与技术学院 21
第3章 语法分析
假定开始符号为N,则可得到文法G[N]为:
G = ( {0,1,„,9} , {N,A,M,B,D} , N ,ξ)
ξ: N→A∣MA M→B∣MD
/*一位数字│多位数字*/
/*仅两位数字(无中间位)│多于两 位数字*/
A→1∣3∣5∣7∣9 B→1∣2∣3∣4∣5∣6∣7∣8∣9 D→0∣B
<布尔表达式>→<算术表达式><关系运算符><算术表达式>
计算机科学与技术学院 11
第3章 语法分析
<关系运算符>→<|>|<=|>=|=|<>
<算术表达式>→<变量>|<常量>
|(<算术表达式><算术运算符><算术表达式>)
<算术运算符>→+|-|*|/ <常量>→0|1| 2| 3|4|5|6|7|8|9 <变量>→a|b|c|d|…|x|y|z
计算机科学与技术学院 4
第3章 语法分析
例如,“我是大学生”它的语法结构可以由以下规 则描述(用→表示“由…组成” 或“定义为”):
<句子> → <主语><谓语>
<主语> → <代词> | <名词> <代词> → 我 | 你 | 他 <名词> → 王明 | 大学生 | 工人 | 英语 <谓语> → <动词><直接宾语> <动词> → 是 | 学习 <直接宾语> → <代词> | <名词>
计算机科学与技术学院 18
第3章 语法分析
用S表示“字母数字串”类,由于T是一字 母或数字,ST也是字母数字串。 则有: S→T∣ST