第3章 语法分析1

合集下载

第3章 语法分析-编译原理及实践教程(第3版)-黄贤英-清华大学出版社

第3章 语法分析-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
• 文法是被用来精确而无歧义地描述语言的句子的构成方式. • 文法描述语言的时候不考虑语言的含义。
3.2.1 文法的定义
例1:有如下规则
<句子><主语><谓语> <主语><代词>|<名词> <代词>我 <名词>大学生 <谓语><动词><直接宾语> <动词>是 <直接宾语><代词>|<名词>
(表示由…组成)
• 归约:推导的逆过程。
• 直接归约:直接推导的逆过程
几个概念的形式定义
• 直接推导: 如果αβ是文法 G=(Vn,Vt,P,S)
的产生式,γ和δ是V*中的任意符号,若有符号 串v,w满足: v=γαδ,w=γβδ,则说v直接产生w,(w是v的 直接推导)记作:v=>w 例:S01, 0S0=>0010(直接推导γ=0,δ=0) • 如果存在v=>w0=>w1=>w2...=>Wn=w(n>0),则 称v推导出w(长度为n),记作v+=>w(至少一步) • 若有v=>w或v=w,则记作v*=>w(0步或若干步)
一个非终结符号,β∈V*)
–上例中: G=(Vn,Vt,P,<句子>)
Vn=(<句子>,<主语>,<谓语>,<代词>,<动词>,
<名词>,<直接宾语>)
Vt= (我,是,大学生)
P=
<句子><主语><谓语>
<主语> <代词>|<名词>

编译原理第三章练习题答案

编译原理第三章练习题答案

编译原理第三章练习题答案编译原理第三章练习题答案编译原理是计算机科学中的重要课程之一,它研究的是将高级语言程序转化为机器语言的过程。

在编译原理的学习过程中,练习题是提高理解和应用能力的重要途径。

本文将为大家提供编译原理第三章的练习题答案,希望能够对大家的学习有所帮助。

1. 什么是词法分析?请简要描述词法分析的过程。

词法分析是编译过程中的第一个阶段,它的主要任务是将源程序中的字符序列划分为有意义的词素(token)序列。

词法分析的过程包括以下几个步骤:1)扫描:从源程序中读取字符序列,并将其转化为内部表示形式。

2)识别:根据预先定义的词法规则,将字符序列划分为不同的词素。

3)分类:将识别出的词素进行分类,如关键字、标识符、常量等。

4)输出:将分类后的词素输出给语法分析器进行进一步处理。

2. 什么是正则表达式?请给出一个简单的正则表达式示例。

正则表达式是一种用于描述字符串模式的工具,它由一系列字符和操作符组成。

正则表达式可以用于词法分析中的词法规则定义。

以下是一个简单的正则表达式示例:[a-z]+该正则表达式表示匹配一个或多个小写字母。

3. 请简要描述DFA和NFA的区别。

DFA(Deterministic Finite Automaton)和NFA(Nondeterministic Finite Automaton)是有限状态自动机的两种形式。

它们在词法分析中常用于构建词法分析器。

DFA是一种确定性有限状态自动机,它的状态转换是确定的,每个输入符号只能对应一个状态转换。

相比之下,NFA是一种非确定性有限状态自动机,它的状态转换是非确定的,每个输入符号可以对应多个状态转换。

4. 请简要描述词法分析器的实现过程。

词法分析器的实现过程包括以下几个步骤:1)定义词法规则:根据编程语言的语法规范,定义词法规则,如关键字、标识符、常量等。

2)构建正则表达式:根据词法规则,使用正则表达式描述不同类型的词素。

3)构建有限状态自动机:根据正则表达式,构建DFA或NFA来识别词素。

my第03章-词法分析

my第03章-词法分析
第三章 词法分析
如果一个种别只含有一个单词符号,那么对 于这个单词符号,种别编码就完全代表它自身 了。若一个种别含有多个单词符号,那麽,对 于它的每个单词符号,除了给出种别编码之外, 还应给出有关单词符号的属性信息。 单词符号的属性是指单词符号的特征或特性。 属性值则是反映特性或特征的值。例如,对于 某个标识符,常将存放它有关信息的符号表项 的指针作为其属性值;对于某个常数,则将存 放它的常数表项的指针作为其属性值。
假定每半个区可容120个字符,而这 两个半区又是互补的。如果搜索指示器 从单词起点出发搜索到半区的边缘但尚 未达到单词的终点,那么就调用预处理 子程序,令其把后续的120个字符装入另 半区。我们认定在另半区一定可以达到 单词的终点。这意味着得标示符和常数 的长度实际上必须加以限制,否则即使 缓冲区再大也无济于事。
第三章 词法分析

3.2 词法分析器的设计 3.2.1 输入、预处理 词法分析器工作的第一步是输入源程序文本。输入串一 般放在一个缓冲区中,这个缓冲区称输入缓冲区。词法分 析器的工作可以直接在这个缓冲区中进行。但在许多情况 下,把输入串预处理一下,对单词符号的识别工作将是比 较方便的。 预处理工作包括对空白符、跳格符、回车符和换行符等 编辑性字符的处理,及删除注解等。 我们可以设想构造一个预处理子程序,他完成上面的工 作。每当词法分析器调用它时就处理出一串确定长度的输 入字符,并将其装入词法分析器所指定的缓冲区中(称为 扫描缓冲区)。这样分析器就可以在此缓冲区中直接进行 单词符号的识别工作。
a 0 b 2 b a a b 3 a
1
b
第三章 词法分析
替换规则
如:正规式:R=(a*b)*ba(a|b)*
第三章 词法分析
习题:画出状态转换图

编译原理教程-课后习题答案第三章语法分析

编译原理教程-课后习题答案第三章语法分析

由 A′→ABl 得 FIRST(′l′) FOLLOW(B) , 即 FOLLOW(B)={l};
由 A→aA′ 得 FOLLOW(A) FOLLOW(A′) , 即 FOLLOW(A′)={#,d};
第三章 语法分析
由 B→dB′ 得 FOLLOW(B) FOLLOW(B′) , 即 FOLLOW(B′)={l}。
c. 最左推导和最右推导必定相同
d. 可能存在两个不同的最左推导,但它们对应的语法树 相同
第三章 语法分析
(3) 采用自上而下分析,必须 。
a. 消除左递归
b. 消除右递归
c. 消除回溯
d. 提取公共左因子
(4) 设a、b、c是文法的终结符,且满足优先关系 ab和bc,则 。
a. 必有ac
b. 必有ca
第三章 语法分析
(2) 为了构造字母表Σ ={a,b}上同时只有奇数个a 和奇数个b的所有串集合的正规式,我们画出如图3-3 所示的DFA,即由开始符S出发,经过奇数个a到达状态 A,或经过奇数个b到达状态B;而由状态A出发,经过 奇数个b到达状态C(终态);同样,由状态B出发经过奇 数个a到达终态C。
第三章 语法分析
第三章 语法分析
3.1 完成下列选择题:
(1) 文法G:S→xSx|y所识别的语言是 。
a. xyx
b. (xyx)*
c. xnyxn(n≥0)
d. x*yx*
(2) 如果文法G是无二义的,则它的任何句子α 。
a. 最左推导和最右推导对应的语法树必定相同
b. 最左推导和最右推导对应的语法树可能不同
“A→α · ”动作的一定是 。
a. LALR文法 b. LR(0)文法
c. LR(1)文法 d. SLR(1)文法

编译原理第三章语法分析

编译原理第三章语法分析

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

916073-编译原理原理与技术-第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 自上而下分析

第3章词法分析1

第3章词法分析1

第三章 词法分析知识结构:功能 词法分析器的要求 单词符号分类 词法分析 单词内部形式器的设计 设计方发词法分析器的设计 状态图词法分析器组成正规表达式单词描述工具 正规集词法分析器 正规文法确定有限自动机(DFA )单词识别工具 非确定有限自动机(NFA )DFA 的最小化FA 的等价转换等价转换FA 的等价转换第一节 对词法分析器的要求一、词法分析器的功能输入源程序,输出单词符号(二元式表示)。

关键字:是由程序语言定义的具有固定意义的标识符。

标识符:用来表示各种名字,如变量等。

常数:常数的类型有整型,实型等。

运算符:算术运算符,关系运算符,逻辑运算符。

界限符:逗号,分号等。

三、单词符号内部的表示形式内部的单词符号TOKEN字(二元式),TOKEN字占用机器字的长度,依据信息量的多少而定。

1、TOKEN字结构CLASS:用整数表示。

VALUE:表示单词符号的属性(符号表指针)。

2、TOKEN的作用CLASS:用于语法分析器对源程序结构的分析。

VALUE:用于语义分析器对源程序具体操作的分析。

3、单词种别码划分原则CLASS:关键字,运算符,界限符(编译程序定义的符号)使用一字一种编码。

VALUE值省略。

VALUE:标识符,常数(用户定义的符号),存放符号表常数表的指针。

标识符,常数每一类为一种编码。

例:BEGIN A:= B END;词法分析结果:符号表(BEGIN,---- )Array(A ,K1 ) K1(:= ,--- )(B ,K3 ) K3(END ,--- )(;,--- )四、词法分析器的结构1、一遍扫描(交互式结构)。

2、多遍扫描(独立式结构)。

第二节词法分析器的设计一、设计步骤1、确定词法分析器的接口关系;2、确定单词分类和TOKEN字的结构;3、对每一类单词构造状态转换图;4、根据状态转换图设计算法。

二、功能描述1、组织源程序输入;2、按词法规则拼读单词符号,并转换成二元式;3、删除注解行,空格和无用符号;4、检查词法错误。

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

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

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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7
3.1.2 语法错误的处理原则(续2) <3> 语法错误的基本恢复策略 ——P44 1. 紧急方式恢复:抛弃若干输入,直到遇到输入记号属于
某个指定的合法记号(同步记号)集合为止。
2. 短语级恢复:采用串替换的方式对剩余输入进行局部纠 正(抛弃+插入)。
3. 出错产生式:用出错产生式捕捉错误(预测错误)。预
3.2.2 CFG产生语言的基本方法-推导(续3)
根据定义,再考察-(id+id)的推导过程
最左推导
E => -E => -(E) => -(E+E) => -(id+E) => -(id+id) α1 α2 α3 α4 α5 α6
其中,α1是文法开始符号,α6是句子,其他αi (i=2、 3、4、5)均是句型。 句型是一个相当广泛的概念,根据定义3.3可知,α1和 α6同样也是句型。 E → E + E (1) | E * E (2) |(E) (3) (G3.2) | -E (4) | id (5)
13
3.2.1 CFG的定义与表示(续3)
<3> 终结符与非终结符书写上的区分
(a) 用大小写区分: E → id
(b) 用""区分:
(c) 用<>区分:
E → "id"
E → E "+" E
<E> → <E> + <E>
本教材约定:
大写英文字母如:A、B、C表示非终结符; 小写英文字母如:a、b、c表示终结符; 小写希腊字母如:α、β、δ表示任意文法符号序列。
上次课内容
从正规式到词法分析器(等价变换的过程)
正规式描述模式 由正规式构造NFA NFA的确定化(子集法:smove, ε-闭包) DFA的最小化(可区分概念)
词法分析器:表驱动(自动生成)与直接编码
(手工编写)
1
第三章 语法分析
从词法分析的角度看:语言是一个单词的集合,称之
19
3.2.2 CFG产生语言的基本方法-推导(续2) 定义3.3 由CFG G所产生的语言L(G)被定义为: L(G) = { ω┃S=+>ω and ω∈T* }, L(G)称为上下文无关语言(Context Free Language, CFL),ω称为句子。 若S=*>α,α∈(N∪T)*,则称α为G的一个句型。 ■ 定义3.4 在推导过程中,若每次直接推导均替换句型中最左 边的非终结符,则称为最左推导,由最左推导产生的句型被 称为左句型。 ■ 类似的可以定义最右推导与右句型,最右推导也被称为 规范推导。 概念:句子、句型、 最左推导、左句型、 最右推导、右句型 20
前提:若文法正确,第一个产生式的左部是文法开始符号S;
则:
N(非终结符)是可以出现在产生式左边符号的集合,
T(终结符)是绝不会出现在产生式左边符号的集合
P: E E E E E → E + E → E * E →(E) → -E → id (1) (2) (3) (4) (5) S = E N = {E} T ={+,*,(,),-,id}
3
3.1 语法分析的若干问题
3.1.1 语法分析器的作用
语法分析器是编译器前端的重要组成部分,许多编译器, 特别是由自动生成工具构造的编译器,往往其前端的中心部 件就是语法分析器。•
语法分析器在编译器中的位臵和作用:
源程序 词法 记号流 分析器
语法分析器
分析树
前端其 他部分
中间表示
符号表始符号(Start symbol)。
11
3.2.1 CFG的定义与表示(续1) 例3.2 简单算术表达式的上下文无关文法可表示如下:
N = {E} T = {+,*,(,),-,id} P: E → E + E (1) E → E * E (2) E →(E) (3) E → -E (4) E → id (5) S = E
置型的短语级恢复方式。 4. 全局纠正:对错误输入序列x,找相近序列y,使得x变换 成y所需的修改、插入、删除次数最少。
8
3.1.2 语法错误的处理原则(续3) 例3.1 下述两条是有语法错误的语句,其中第一条赋值句结 束时忘记加分号,采用紧急恢复方式和短语级恢复方式的可 能结果分别如下所示。 x := a + b y := c + d; (没有分号)
6
3.1.2 语法错误的处理原则(续1) 大多数错误的诊断和恢复集中在语法分析阶段。 一是大多数错误是语法错误; 二是语法分析方法的准确性,它们能以非常有效的方法诊 断语法错误。 编译时想要准确诊断语义或逻辑错误有时是很困难的。 <2> 语法错误处理的目标 对语法错误的处理,一般希望达到以下基本目标: 1.清楚而准确地报告错误的出现,地点正确、不漏报、不 错报也不多报; 2.迅速地从每个错误中恢复过来(以便分析继续进行); 3.不应对语法正确源程序的分析速度降低太多。 回忆曾经用过的编译器编译时是如何报告错误的?
第三章 语法分析
语法的双重含意:
1. 语法规则:上下文无关文法来描述。
2. 语法分析:根据语法规则识别记号流中的语言结
构,采用自上而下和自下而上分析方法。 本章主要内容: 1. 与语法分析有关的基本概念和相关问题
2. 上下文无关文法
3. 自上而下分析 4. 自下而上分析
5. 上机作业-第二部分:函数绘图语言的语法分析器
14
<4> 产生式的缩写形式
3.2.1 CFG的定义与表示(续4)
当若干个产生式具有相同的左部非终结符时,可以将它们 合并为一个产生式。该产生式的左部是此非终结符,右部是所 有原来右部的或运算(并集合),产生式以该非终结符命名。
例3.3 G3.1可以重写为如下形式:
E → E + E | E * E |(E) | -E | id (1) (2) (3) (4) (5) (G3.2)
2. 上下文无关文法(CFG)
• • 文法的定义 文法的表示(产生式、终结符与非终结符的区分)
16
上次课程内容回顾
上下文无关文法(CFG)的定义 定义3.1 CFG是一个四元组G =(N,T,P,S),其中
(1)N是非终结符(Nonterminals)的有限集合;
(2)T是终结符(Terminals)的有限集合,且N∩T=Φ; (3)P是产生式(Productions)的有限集合, A→α,其中A∈N(左部),α∈(N∪T)*(右部), 若α=ε,则称A→ε为空产生式(也可以记为A →); (4)S是非终结符,称为文法的开始符号(Start symbol)。
1. 紧急方式: x := a + b + d; -- 丢弃b后若干记号,直到遇到“+”合法记号为止 2. 短语级恢复:x := a + b; -- 加入分号,使之成为一个赋值句 y := c + d;
9
语法分析的双重含意: 1. 语法规则:上下文无关文法来描述。 2. 语法分析:根据语法规则识别记号流中的 语言结构,采用自上而下和自下而上分析
18
(G3.2)
3.2.2 CFG产生语言的基本方法-推导(续1)
定义3.2 利用产生式产生句子的过程中,将产生式A→γ的右 部代替文法符号序列αAβ中的A得到αγβ的过程,称αAβ 直接推导出αγβ,记作:αAβ=>αγβ。
若 对 于 任 意 文 法 符 号 序 列 α1 , α2 , ...αn , 均 有 α1=>α2=>...=>αn,则称此过程为零步或多步推导,记为: α1=*>αn,其中α1=αn的情况为零步推导。 若α1≠αn,即推导过程中至少使用一次产生式,则称此 过程为至少一步推导,记为:α1=+>αn。 定义3.2强调了两点:——p52 α,有α=*>α,即推导具有自反性(可以推导出自身); 若α=*>β,β=*>γ,则α=*>γ,即推导具有传递性。
方法。
10
3.2 上下文无关文法(Context Free Grammar,CFG)
3.2.1 CFG的定义与表示
定义3.1 CFG是一个四元组G =(N,T,P,S),其中
(1)N是非终结符(Nonterminals)的有限集合;
(2)T是终结符(Terminals)的有限集合,且N∩T=Φ; (3)P是产生式(Productions)的有限集合, A→α,其中A∈N(左部),α∈(N∪T)*(右部), 若α=ε,则称A→ε为空产生式(也可以记为A →);
21
3.2.3 分析树与语法树
对于推导: E => -E => -(E) => -(E+E) => -(id+E) => -(id+id) 它产生句子的方式不直观,看起来比较困难。 分析树是推导的图形表示,它的表示很直观,并且同时 反映语言结构的实质和推导过程。
定义 3.5 对CFG G的句型,分析树被定义为具有下述性质的 一棵树。 (1)根由开始符号所标记; (2)每个叶子由一个终结符、非终结符、或ε标记; (3)每个内部结点由一个非终结符标记; (4)若A是某内部节点的标记,且X1,X2,...,Xn是该节点 从左到右所有孩子的标记,则A→X1X2...Xn是一个产生式。若 A→ε,则标记为A的结点可以仅有一个标记为ε的孩子。
22
例3.5
3.2.3 推导、分析树与语法树(续2) -(id+id)的推导过程。
E => -E => -(E) => -(E+E) => -(id+E) => -(id+id) 用分析树的方式如下:
相关文档
最新文档