第四章 语法分析(1)

合集下载

第四章语法分析

第四章语法分析



最右推导
E rm E rm (E) rm (E + E) rm (E + id) rm (id + id)
4.1 上下文无关文法
4.1.3 分析树 例 E E + E | E E | (E ) | E | id
E

E
( E ) E + E id
id
4.1 上下文无关文法

4.2 语言和文法
4.2.7 提左因子

有左因子的文法 A b1 | b2 提左因子 A A A b 1 | b 2

4.2 语言和文法

例 悬空else的文法 stmt if expr then stmt else stmt | if expr then stmt | other 提左因子

无二义的文法
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
句型 文法G的开始符为S,S *, 可能含有非终结符, 则叫做文法G的句型。
4.1 上下文无关文法

例 E E + E | E E | (E ) | E | id 最左推导
E lm E lm (E) lm (E + E) lm (id + E) lm (id + id)

按串长进行归纳:配对括号串可由S推出

语法分析(1)

语法分析(1)

5
语言
• 语言:对字母表Σ来说,Σ*上的任意一个子集都
称为Σ上的一个语言,记为L(L Σ*)
• 句子:语言L的每一个字符串称为该语言的一个
语句或句子。 • 例:字母表{0,1}上的语言
{0,1} {00,11} {0,1,00,11} {0,1,00,11,01,10} {00,11}* {01,10}*
例:构造产生标识符的文法(续)
• 作为“标识符”的非终结符I,它或者是一 单个字母,或者为一字母后跟字母数字串, 即 I→L∣LS 因此,产生标识符的文法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
构造产生标识符的文法标识符是以字母开头的字母数字串用l表示字母类非终结符用d表示数字类非终结符而用t表示字母或数字类非终结符则如果用s表示字母数字串类则t是一字母或数字st也是字母数字串即有stst产生式stst是一种左递归形式由它可以产生一串t
编译原理 第4讲 语法分析(1)
贾西平 Email: jiaxp@
M B DD … D A
中间位 最 高 位 最 低 位
14
例3.2
• 由于中间部分可出现任意位,所以 另引入了一个非终结符M,它包括 M 最高位和中间位部分。假定开始符 B DD … 为N,则可得到文法G[N]为: • G=({0,1,„,9},{N,A,M,B,D},N,ξ) ξ:N→A∣MA /*一位数字│多位数字*/ M→B∣MD /*仅两位数字(无中间位)│
17
推导符号
• 通常,用 1 n 表示:从1出发,经过 一步或若干步,可以推出n。 用 1 n 表示:从1出发,经过0步或 若干步,可以推出n。

第四章 语法

第四章 语法

例句分析:
(1)太阳升起在浩荡的平原上。 (2)我们充分利用本地资源制造农业机械化的道路。 (3)在参观期间发生的令人感动的美丽事情层出不穷。 (4)其实对这一点我也以前不十分清楚。 (5)尽管天塌下来,我也能顶得住。 (6)我看书的入神时,不时门开了,好几个同学进来。
二、 语法的组合规则和聚合规则
2. 划分词类应注意的问题 ①在鉴别词类时可以参照词的意义,但不能完全根据意义,而 要有句法功能和形式上的实证。 ②在同一个词类当中,具体的成员有典型与非典型之分。 ③一个词可以兼属两个或两个以上的词类。
3.划分词类对句法描写的意义 划分词类是概括句法格式、发现组合规则的基础。词类 之于句法描写的重要性还表现为,给词分小类可以大大深化 句法描写。
第四章 语法
第一节 语法和语法单位 第二节 组合规则 第三节 聚合规则 第四节 变换 第五节 语言的结构类型和普遍特征
第一节 语法和语法单位
一 语言结构是有规则的
所谓语法,是指用词造句的规则。我们说话写文章都必 须遵守规则,否则的话,就会让对方感到别扭甚至产生误会 。 作为母语的语法规则是潜存于大脑的,通过说话可以表 现出来,但是规则具体是怎样的,一般人却难以说明白。语 法分析的主要任务就是把人们心知其意而难以言状的规则整 理出来,以便人们自觉的运用。语法学家的任务只是归纳、 整理客观存在的规则,选择恰当的方式进行描写,对于语法 规则,语法学家是无权做硬性的规定的。
四、 语法范畴
由词的变化形式所表示的意义方面的聚合,即语法意 义的类就叫做语法范畴。 (一)语法范畴的类: 体词属性范畴和谓词属性范畴 1. 体词属性范畴 就是由名词的词性变化形式表示的意义。印 欧语系的语言中的名词大都有词形变化,主要表示三种范 畴意义:性、数、格。

编译原理第三版课后习题答案

编译原理第三版课后习题答案

编译原理第三版课后习题答案编译原理是计算机科学中的一门重要课程,它研究的是如何将高级程序语言转换为机器语言的过程。

而《编译原理》第三版是目前被广泛采用的教材之一。

在学习过程中,课后习题是巩固知识、提高能力的重要环节。

本文将为读者提供《编译原理》第三版课后习题的答案,希望能够帮助读者更好地理解和掌握这门课程。

第一章:引论习题1.1:编译器和解释器有什么区别?答案:编译器将整个源程序转换为目标代码,然后一次性执行目标代码;而解释器则逐行解释源程序,并即时执行。

习题1.2:编译器的主要任务是什么?答案:编译器的主要任务是将高级程序语言转换为目标代码,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等过程。

第二章:词法分析习题2.1:什么是词法分析?答案:词法分析是将源程序中的字符序列划分为有意义的词素(token)序列的过程。

习题2.2:请给出识别下列词素的正则表达式:(1)整数:[0-9]+(2)浮点数:[0-9]+\.[0-9]+(3)标识符:[a-zA-Z_][a-zA-Z_0-9]*第三章:语法分析习题3.1:什么是语法分析?答案:语法分析是将词法分析得到的词素序列转换为语法树的过程。

习题3.2:请给出下列文法的FIRST集和FOLLOW集:S -> aAbA -> cA | ε答案:FIRST(S) = {a}FIRST(A) = {c, ε}FOLLOW(S) = {$}FOLLOW(A) = {b}第四章:语义分析习题4.1:什么是语义分析?答案:语义分析是对源程序进行静态和动态语义检查的过程。

习题4.2:请给出下列文法的语义动作:S -> if E then S1 else S2答案:1. 计算E的值2. 如果E的值为真,则执行S1;否则执行S2。

第五章:中间代码生成习题5.1:什么是中间代码?答案:中间代码是一种介于源代码和目标代码之间的表示形式,它将源代码转换为一种更容易进行优化和转换的形式。

04 语法分析-自上而下分析

04 语法分析-自上而下分析

待分析的输入串: 待分析的输入串:i+i
只有当a 只有当a是允许出 现在非终结符A 现在非终结符A后 面的终结符时, 面的终结符时, 才可能允许A 才可能允许A自动 匹配。 匹配。
尾随集的定义: VN尾随集的定义:
=*>…Aa Aa…, FOLLOW(A)={a|S =*> Aa , a∈VT}; 特别地,如果S=*> S=*>…A 那么# FOLLOW(A)。 特别地,如果S=*> A,那么# ∈FOLLOW(A)。
例子
文法: S→xAy A→**|* 文法: 输入串:x*y 输入串: S => => => => xAy x**y xAy x*y (S→ xAy) (A→**) 回溯) (回溯) (A→*)
带回溯自上而下分析面临的问题
问题: 问题: 文法的左递归问题 回溯问题 虚假匹配问题 出错位置不确定 低效
实现思想: 实现思想:
分析程序由一组递归过程组成。 分析程序由一组递归过程组成。每一过程 对应于一个非终结符号。 对应于一个非终结符号。 每一个过程的功能是:选择正确的右部。 每一个过程的功能是:选择正确的右部。 在右部中有非终结符号时, 在右部中有非终结符号时,调用该非终结 符号对应的过程。 符号对应的过程。
消除文法的左递归
文法不含回路(形如P=+> P推导 推导) 文法不含回路(形如P=+> P推导) 不含回路 前提: 前提: 不含以ε 也不含以ε 为右部的产生式 结论: 那么可以通过执行消除文法左递 结论: 那么可以通过执行消除文法左递 归的算法消除文法的一切左递归 归的算法消除文法的一切左递归 改写后的文法可能含有以ε (改写后的文法可能含有以ε 为右部的产生式)。 为右部的产生式)。

现代汉语句法分析——第四章

现代汉语句法分析——第四章

现代汉语句法分析——第四章
第四章是关于汉语中的动词短语分析的内容。

动词短语是由动词和它的补足语构成的结构,用来描述动作、状态或者发生的事件。

本章的内容包括动词短语的结构和分类,以及动词短语的句法功能和语义角色。

动词短语的结构由动词和它的补足语组成,补足语可以是宾语、宾语补足语、状语、状语补足语等。

动词短语的结构和组成成分的顺序可以有多种情况,相同的动词可以有不同的结构。

根据动词短语的句法功能和语义角色,可以将动词短语分为及物动词短语和不及物动词短语。

及物动词短语中的动词需要带有宾语,而不及物动词短语中的动词不需要宾语,只有主语。

在句法功能上,动词短语可以充当谓语、主语、宾语、状语等。

根据动词短语的语义角色,可以将其分为施事者、受事者、工具、目标等。

了解和分析动词短语的结构、句法功能和语义角色对于准确理解和使用汉语非常重要。

通过对动词短语的分析,可以更好地理解句子的结构,并准确表达自己的意思。

语法分析

语法分析
23
if(Yi∈VN) { if(i=n or 任一j(i+1≤j≤n)null(Yj)=true) FOLLOW(Yi)=FOLLOW(Yi)∪FOLLOW(A); if(Yi+1∈VT) Yi+1∈FOLLOW(Yi); else for(k=i+1;k<=n;k++) if(k=i+1 or i+1≤j≤k-1)null(Yj)=true ) FOLLOW(Yi)=FOLLOW(Yi)∪FIRST(Yk) }/*end of if*/ }/*end of for*/ } /*end of for*/ while FIRST,FOLLOW,nullable 不再改变
1、思路:对任一输入符号串,通过一切可能的办 法,从树根结点(识别符号)出发,根据文法自 上而下地为输入串建立一棵语法树;或者说, 从识别符号开始,根据文法试图为输入串建立 一个推导序列。 2、特点:是自顶向下分析的一般方法,分析过程 的本质是一种试探过程。
4
例∶假定有文法G[S]:(1)S->cAd (2)A->ab|a 对输入串w=cad。要求自上而下地构造w的语法树。 解决过程: S c a S c A a d A b d -对于输入串w,从文法的开始符号出 发,反复使用不同的产生式谋求匹配 输入串。当用某个非终结符号的候选 式进行匹配失败时,则推翻分析退回 到适当位置再重新试探其它候选式, 直到把所有可能的推导序列都试探完 仍不成功才能确认输入串不是该文法 的句子而报错 。称为带回溯的自顶 向下分析。 -回溯需要推导记住现场,浪费了大量 的时间和空间,必须设法消除。
在推导过程中,可以完全根据向前看符号唯 一决定选择哪个产生式往下推导,因此,分析过 程是完全确定的。这种分析称为确定的自顶向下 分析方法。

第04章-语法分析自上而下分析

第04章-语法分析自上而下分析
否符合语法规则。 ▪ 语法分析器的工作本质:按文法的产生式,识别
输入符号串是否为一个句子。 ▪ 语法分析器在编译器中的地位:
源程序
单词符号
词法分析器
取下一个单 词符号
语法分析器
语法分析树
编译器的 后继部分
2021/4/6
符号表
3
4.1 语法分析器的功能
▪ 语法分析方法
➢ 自上而下分析法
从文法的开始符号出发,反复使用文法的产生式, 寻找与输入符号串匹配的推导。
分析输入串x*y(记为)。
xx**yy
SS
IPIPIP xx A y * **
2021/4/6
7
4.2 自上而下分析面临的问题
▪ 当某个非终结符有多个产生式候选时,可 能带来如下问题:
➢ 1.分析过程中,当一个非终结符用某一个候选 匹配成功时,这种匹配可能是暂时的。这时, 不得不“回溯”。
➢ 2.文法左递归问题。一个文法是含有左递归的 ,如果存在非终结符P
➢ 最后所得的无左递归文法是: S→Qc | c Q→Rb | b R→bcaR | caR |a R R→ bca R |
➢ 不同排序所得的文法的等价性是显然的。
2021/4/6
17
4.3.2 消除回溯、提左因子
▪ 为了消除回溯就必须保证:对文法的任何 非终结符,当要它去匹配输入串时,能够 根据它所面临的输入符号准确地指派它的 一个候选去执行任务,并且此候选的工作 结果应是确信无疑的。
2021/4/6
14
4.3.1 左递归的消除
▪ 例4.3 考虑文法G(S)
S→Qc|c Q→Rb|b R→Sa|a
➢ 令它的非终结符的排序为R、Q、S。 ➢ 对于R,不存在直接左递归。 ➢ 把R代入到Q的有关候选后,把Q的规则变为
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

且w1 = a1a2 ai 1 ,1 ≤ i ≤ n
注意,i=1时,w1=ε,A=S 时 注意 ε 由假设可知,到目前为止 的前缀 由假设可知 到目前为止,w的前缀 1 到目前为止 的前缀w 已匹配,现在需对 进行推导. 现在需对Aβ 已匹配 现在需对 β进行推导
消除回溯 回溯的条件 回溯
由前面的讨论可知,要实现无回溯的 分析 文法必须满足一定的 由前面的讨论可知,要实现无回溯的↓分析,文法必须满足一定的 无回溯 条件.为导出这些条件,我们定义候选式的 我们定义候选式的终结首符集 条件.为导出这些条件 我们定义候选式的终结首符集 FIRST(γ)={a | γ* aδ, a∈VT,δ∈ δ∈V*} 并约定 γ*ε γ δ ∈ δ∈ ε ε∈FIRST(γ) 时,ε∈ ε∈ γ 若对于A-产生式的每个候选式γ 产生式的每个候选式 若对于 产生式的每个候选式γi(i=1,2,…,m)都推不出 ε, 且 都推不出 FIRST(γi) 互不相交 则当正扫描的当前输入符号为 γ 互不相交,则当正扫描的当前输入符号为 ai∈FIRST(γj)时,唯一可用于推导的产生式只能是 →γ 唯一可用于推导的产生式只能是A→γ ∈ γ 时 唯一可用于推导的产生式只能是 →γj. 例如,文法 文法G1[S]: S→AA A→aAb | *, A-产生式有两 例如 文法 → → 产生式有两 个候选式, FIRST(aAb)={a} 个候选式 且 FIRST(*)={*},两集不相交 设输入串为 两集不相交,设输入串为 两集不相交 设输入串为aa*bb*,其最左 其最左 推导为 SAA (a) aAbA (a) aaAbbA (*) aa*bbA (*)aa*bb* (#) 上面第每步推导右侧括号内为当前扫描的输入符号,#为结束符. 注:上面第每步推导右侧括号内为当前扫描的输入符号,#为结束符 上面第每步推导右侧括号内为当前扫描的输入符号,#为结束符 我们得到了一个无回溯的条件: 我们得到了一个无回溯的条件: FIRST(γi) ∩FIRST(γj)= γ γ
消除回溯 回溯的条件 回溯
例 S→aA | b A→cAS | ε FIRST(cAS)={c} FOLLOW(A) → → =FIRST(S)∪ =FIRST(S)∪{#}={a,b,#} 两个集合不相交, 故可进行无回溯的↓ 分析.设输入串w=aca# w=aca#,其推导过程如下: w=aca#
输入是待分析的符号串(单词流), 输入是待分析的符号串(单词流), 结尾. 以# 结尾. 分析表是一二维数组,M:VN×(VT∪ 分析表是一二维数组,M:VN×(VT∪{#}) (P∪ M[A,a]的值按下述规则 →(P∪{ERR}), M[A,a]的值按下述规则 确定:对于每个产生式A→γ1| 2|…| 1|γ 确定:对于每个产生式A→γ1|γ2| |γm (1)若 FIRST(γ 则置M[A,a]= →γi ; M[A,a]="A (1)若a∈FIRST(γi), 则置M[A,a]= A→γi"; (2)ε∈FIRST(γ ε∈FIRST( a∈ (2)ε∈FIRST(γi), a∈FOLLOW(A), 置 M[A.a]="A→γi , M[A.a]= A→γi", (3)除上述两种情况外 其它元素均填"ERR". 除上述两种情况外, (3)除上述两种情况外,其它元素均填"ERR . 分析表元素的含义: 分析表元素的含义:指明当前应用何产生式进 行推导, 行推导,或指明输入串出现错误
最后,我们将消除回溯的条件归纳为, ,A最后,我们将消除回溯的条件归纳为,对G中每个A∈VT,A-产生式中任何两 中每个A 个候选式γ 均满足: 个候选式γi,γj,均满足: (1)FIRST(γi) ∩FIRST(γj)= (i≠j 1≤i,j≤m) (2) γi,γj中,至多有一个能推导出ε; (3)若γj*ε,则FIRST(γi)∩FOLLOW(A)= (i=1,2,…,m i≠j) 条件(2)可省略. (1) (2)可省略 注: 条件(2)可省略. 即(1) (2) LL(1)文法 我们把满足上述条件的文法称为LL(1)文法
4.1.4 预测分析法
预测分析法的分析器由一张预测分析表 预测分析法的分析器由一张预测分析表 的分析器由一张 (LL(1)分析表),一个控制程序( 分析表),一个控制程序 (LL(1)分析表),一个控制程序(表驱动程 及一分析栈 分析栈组成 序)及一分析栈组成
输入 a1 a2 … ai … an #
对已给的输入串w,试图自 ↓:对已给的输入串 试图自 对已给的输入串 例:E→T|EAT → 上而下地建立一棵语法树;或 上而下地建立一棵语法树 或 T→F|TMF F→(E)|i → → 者说,从 出发 出发,为 构造一个 者说 从S出发 为w构造一个 A→+|- M→* | / (4.1) → → 最左推导.若成功 若成功,则 最左推导 若成功 则w∈L(G), 设w=i+i*i,每个产生式从 每个产生式从 否则拒绝. 否则拒绝 左至右试验.从 出发 出发: 左至右试验 从E出发 一般说来,在为 在为w寻求最左推 一般说来 在为 寻求最左推 导的每一步,都涉及使用何产 导的每一步 都涉及使用何产 ETF(E) 生式进行替换的问题.最简单 生式进行替换的问题 最简单 i 的方法是,逐一试探. 的方法是 逐一试探 逐一试探 TMFFMF(E)MF 遗憾的是,逐一试探也不能完 遗憾的是 逐一试探也不能完 iMF i*F 全解决问题.例如 在含有左递 例如,在含有 全解决问题 例如 在含有左递 的文法中,就会出现不能终 归的文法中 就会出现不能终 i/F 止的替换现象. 止的替换现象 TMFMF … TMFMFMF...
ห้องสมุดไป่ตู้
4.1.1 消除文法的左递归
设文法是已简化的.若文 设文法是已简化的 若文 法含直接左递归式: 法含直接左递归式 A→Aα | β → α (α∈ α∈V+) , 引入新的非 α∈ 令其产生α 终结符A',令其产生 终结符 令其产生α*, 则有: 则有 A→ βA' A'→ αA'|ε → → ε 由于β不以A打头 非左 由于β不以 打头,A非左 打头 递归. 递归 的文法(4.1), 对P105的文法 的文法 可改写为 E→TE' E'→ATE'|ε → → ε T→FT' T'→MFT'|ε → → ε F→(E)|i A→+|→ → M→ *|/ →
S#aA# acAS# acS# acaA# aca# 功.
当前输入符a属于FIRST(aA),用S→aA推导 当前输入符c属于FIRST(cAS),用A→cAS推导 当前输入符a属于FOLLOW(A),用A→ε推导. 当前输入符a属于FIRST(aA),用S→aA推导 当前输入符#属于FOLLOW(A),用A→ε推导,成
消除回溯 回溯的条件 回溯
然而还存在另外一种情况,可能存在某个候选式γ 然而还存在另外一种情况,可能存在某个候选式γi, γi*ε, ε∈FIRST( i)(这样的是唯一的(?!)) 此时, FIRST(γ (?!)), 即ε∈FIRST(γi)(这样的是唯一的(?!)),此时,为匹配当前 扫描的符号a就可能有两种选择 一是存在某γ 两种选择, 扫描的符号a就可能有两种选择,一是存在某γj,使γj推导出 打头的符号串,另一种选择是让A推导出γ 并让跟随在A 以a打头的符号串,另一种选择是让A推导出γi,并让跟随在A 后的符号串推导出以a打头的符号串. 后的符号串推导出以a打头的符号串. 若这两种选择都可行,则回溯不可避免. 因此, 若这两种选择都可行,则回溯不可避免. 因此,就必须要求 跟在A后的符号串不能推导出其它γ 当γi *ε时,跟在A后的符号串不能推导出其它γj 所能推 导出的首终结符符号串.为此,我们定义可紧跟在 可紧跟在A 导出的首终结符符号串.为此,我们定义可紧跟在A后的所 有终结符之集 S# Aaδ a∈VT∪ δ∈V*} FOLLOW(A)={a | S#*αAaδ, a∈VT∪{#}, α,δ∈V*} 其中, 为一句型的尾符号时,# ,#∈ 其中,当A为一句型的尾符号时,#∈FOLLOW(A). 现在,我们可把无回溯的另一条件描述为 另一条件描述为: 现在,我们可把无回溯的另一条件描述为: 若γi*ε,则 FOLLOW(A)与其它的 互不相交: 与其它的γ FOLLOW(A)与其它的γj互不相交: FOLLOW(A)∩FIRST(γj)= FOLLOW(A)∩FIRST(γj)=.
自顶向下分析方法的特点
1.若G有左递归,则分析不能正常进行.因此, ↓分析必须 必须 先消除文法的左递归; 先消除文法的左递归 2.分析过程是反复进行试探的过程,因此,难免会出现大量 的回溯.特别是当wL(G)时,只有在穷举完所有的试 探后才能拒绝w. 由于回溯,就需将从出错点到迄今为止已做过的大量 工作废弃,显然会大大降低分析的效率 降低分析的效率.特别是在语法 降低分析的效率 分析阶段还往往要进行同步的语义分析和处理,这些 工作也就白做了.因此,消除回溯 ↓分析 消除回溯是↓分析的另一目标. 消除回溯 3.当拒绝w时,只能知道w不是句子,不知出何错及出在何 处
4.1.1 回溯的消除及LL(1)文法
为得到w 为得到w的剩余部分aiai+1…an.由最左 为解决回溯问题, 为解决回溯问题,我们从句子的最 推导的定义,考虑A的所有产生式: 推导的定义,考虑A的所有产生式: 左推导开始讨论. 左推导开始讨论. 为一CFG CFG, 设G=(VN,VT,P,S) 为一CFG, A → γ1 | γ 2 | | γ m 上的符号串, w=a1a2…an是VT上的符号串,现需判 是否是L(G)中的句子.为此, L(G)中的句子 明w是否是L(G)中的句子.为此,从S 对于当前输入符号a 对于当前输入符号ai,若只有一个 开始进行最左推导. 开始进行最左推导.设经若干步推 称为候选式) γj (称为候选式)使得从γjβ出发可 导后我们得到 以推导出一个以ai打头的符号串: 以推导出一个以a 打头的符号串:
相关文档
最新文档