程序设计语言可以通过描叙语法和语义两个方面来定义语法制导翻译技术:通过构造一个把中缀表达式转换成后缀表代式的编译器来介绍先构造一个简单的程序,如只处理+和-的表达式,然后再扩展成功能较强的编译器,能处...
程序设计语言可以通过描叙语法和语义两个方面来定义
语法制导翻译技术:通过构造一个把中缀表达式转换成后缀表代式的编译器来介绍
先构造一个简单的程序,如只处理+和-的表达式,然后再扩展成功能较强的编译器,能处理一般的程序
词法分析器:把输入字符流转换成记号流,
编译器前端的结构:
字符流——(词法分析器)——记号流——(语法制导翻译器)——中间表示
1语法定义:
(1)如c语言:if(表达式)语句else语句
stmt-if(expr) stmt else stmt
(2)上下文无关文法
一个记号集合,称为终结符号
一个非终结符集合
一个产生式集合
左部(非终结符)——右部(记号和非终结符)
一个开始符合
约定:数字,符号,黑体字if等为终结符
开始符号为左部的产生式列在最上面
斜体名字表示非终结符号
其他的均为记号
2.分析树
(1)树根标记为开始符号
(2)每个叶接点由记号标记
(3)每个内结点由一个非终结符标识
(4)如果A-XYZ,则表示成 A
x y z
一棵分析树从左到右的叶结点是这棵分析树生成的结果。为给定的记号串找到一个分析树的过程称为这个串的语法分析
3.二义性
(1)一棵分析树读完它的叶结点只能生成唯一的一个串,但是,一个文法可能有多棵分析树生成相同的记号串,这样的文法为具有二义性的文法
3操作符的结合规则
左结合:9+5+2=(9+5)+2
右结合:a=b=c =a=(b=c)
使用expr和term分别表示两种优先级,factor表示基本单元如数字和带括号额表达式
学员评论