当前位置:文档之家› 第四章语法分析

第四章语法分析




最右推导
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推出
归纳基础: S 归纳假设:长度小于2n的都可以从S推导出来
归纳步骤:考虑长度为2n(n 1)的w = (x) y
S (S)S * (x) S * (x) y
4.2 语言和文法
4.2.4 适当的表达式文法 用一种层次观点看待表达式 id id (id+id) + id id + id
term
factor id
*
* factor
term
factor
id id id id 分析树
id
4.2 语言和文法
4.2.5 消除二义性
stmt if expr then stmt | if expr then stmt else stmt | other
句型:if expr then if expr then stmt else stmt 两个最左推导:
言的注解和空白的规则反映在文法中,文法将大 大复杂 注解和空白由自己来处理的分析器,比注解和空 格已由词法分析器删除的分析器要复杂得多
4.2 语言和文法
4.2.3 验证文法产生的语言 G : S (S) S | L(G) = 配对的括号串的集 合
4.2 语言和文法
4.2.3 验证文法产生的语言 G : S (S) S | L(G) = 配对的括号串的集合
4.1.4 二义性 id id + id
E E E E E+E id E E E +E id E + E id E + E id id + E id id + E id id + id id id + id 两个不同的最左推导
4.1 上下文无关文法
4.1.2 推导(自顶向下)
把产生式看成重写规则,把符号串中的非终结符
用其产生式右部的串来代替

例 E E + E | E E | (E ) | E | id
E E (E) (E + E) (id + E) (id + id)

概念
例 算术表达文法 EE+T|T TTF|F F ( E ) | id 消除左递归后文法 E TE E + TE | T FT TFT| F ( E ) | id

(T+T...+T) (FF...F)
4.2 语言和文法
非直接左递归 S Aa | b A Sd | 先变换成直接左递归 S Aa | b A Aad | bd | 再消除左递归 S Aa | b A bd A | A A adA |
4.2 语言和文法
4.2.6 消除左递归
消除左递归 AAα | β
A βR R α R | ε
4.2 语言和文法
4.2.6 消除左递归

文法左递归
A +A

直接左递归
串的特点
A A | b
b . . .

消除直接左递归 A b A A A |
4.2 语言和文法
E id
E +
E E
E *
+ E
E
id
id
id
id
4.2语言和文法

文法的优点
文法给出了精确的,易于理解的语法说明 自动产生高效的分析器 可以给语言定义出层次结构
以文法为基础的语言的实现便于语言的修改

文法的问题
文法只能描述编程语言的大部分语法,不能描述
语言中上下文有关的语法特征
4.2 语言和文法

简化表示
E E A E | (E ) | E | id A+|
4.1 上下文无关文法

文法书写上的约定
终结符 字母表中的小写字母,如 a,b,c 黑体串,如 id, while 数字 0, 1, … , 9 标点符号,如括号,逗号等 运算符号,如+, -等 非终结符 字母表中的大写字母,如A, B, C 字母S,并且通常代表开始符号 小写字母的名字(斜体),如expr, stmt

例 ( {id, +, , , (, )}, {expr, op}, expr, P )
expr expr op expr expr expr op +
4.1 上下文无关文法

简化表示
expr expr op expr op + | | (expr) | expr | id
2 型语言 由 2型文法定义 • 产生式形式为:A -> b 又称 正规文法! ⑷ 3 型语言 由 3型文法定义 • 产生式形式为:A->aB , A->a , A->
【注】 四类语言为 包含关系,且有 L0 ⊃L1 ⊃ L2 ⊃ L3; 编译处理中,主要应用后两种文法!
乔姆斯基


艾弗拉姆· 诺姆· 乔姆斯基(英语 :Avram Noam Chomsky, 1928年12月7日-) 美国哲学家、语言学家、认知学 家、逻辑学家、政治评论家。乔 姆斯基是麻省理工学院语言学的 荣誉退休教授,他的生成语法被 认为是20世纪理论语言学研究上 的重要贡献。
句法结构
《句法结构》是乔姆斯基介绍转换生成语 法的《语言学理论的逻辑结构》一书的精 华版。这一理论认为说话的方式(词序) 遵循一定的句法,这种句法是以形式的语 法为特征的,具体而言就是一种不受语境 影响并带有转换生成规则的语法。 儿童被假定为天生具有适用于所有人类语 言的基本语法结构的知识。这种与生俱来 的知识通常被称作普遍语法。
从正则式构造出的词法分析器效率高
4.2 语言和文法

从软件工程角度看,词法分析和语法分析的 分离有如下好处
简化设计
编译器的效率会改进
编译器的可移植性加强 便于编译器前端的模块划分
4.2 语言和文法

能否把词法分析并入到语法分析中,直接从 字符流进行语法分析
若把词法分析和语法分析合在一起,则必须将语
4.1 上下文无关文法

文法书写上的约定
字母表中后面的大写字母,如X,Y,Z,可以是
终结符或非终结符 字母表中后面的小写字母,如u,v … z 可代表终 结符号串 小写希腊字母,如,b,可代表文法的符号串 对于A 1,A 2,... A n可以写成 A 1 | 2 | … | n

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
4.2 语言和文法

练习
第四章 语法分析
第四章 语法分析
源程序 词 法 分析器
记 号 分析器 取下一个 记号 分析 前端的 中间 树 其余部分 表示
符号表

本章内容
上下文无关文法
自上而下分析和自下而上分析 围绕分析器的自动生成展开
上下文无关文法
4.1~4.3
4.1 上下文无关文法
4.1.1 上下文无关文法的定义
正则式能定义一些简单的语言,能表示给定结构
的固定次数的重复或者没有指定次数的重复 例:a (ba)5, a (ba)*
正则式不能用于描述配对或嵌套的结构
例1:配对括号串的集合 例2:{wcw | w是a和b的串}
4.1 上下文无关文法

上下文无关文法是四元组(VT , VN , S, P)
VT : VN : S: P : 终结符集合 非终结符集合 开始符号,非终结符中的一个 产生式集合, 产生式形式 : A expr (expr) expr id op
4.2 语言和文法
相关主题