编译原理第一章
词法分析
double f = sqrt(-1);
TDOUBLE TIDENT TOP TIDENT
(“double”) (“f”) (“=“) (“sqrt”)
TLPAREN (“(“)
TOP
(“-”)
TINTCONSTANT (“1”)
TRPAREN (“)”)
TSEP
(“;”)
词法分析
词法分析(lexical analysis or scanning) --The stream of characters making up a source program is read from left to right and grouped into tokens,which are sequences of characters that have a collective meaning.
* 60 ;
语法分析 Syntax Analysis 功能:层次分析.依据源程序的语法规则把源 程序的单词序列组成语法短语(表示成语法 树).
也称为 “parsing” 使用 context-free grammars 结构上的合法性Structural validation (可生成语法树或推导Creates parse tree
单词---token 保留字---reserved word 标识符 ---identifier(user-defined name)
例
程序文本If x = y then z := 1 else z := 2; 经词法分析,变成一个个单词 if, x, =, y, then, z, :=, 1, else, z, :=, 2, ; 语言的单词符号是由词法规则所确定的。
4 词法分析程序的自动构造
词法分析程序是编译程序的一个构成部分,它的主要 任务是扫描源程序,按构词规则识别单词,并报告发 现的词法错误。正则表达式和有穷状态自动机分别作 为单词的描述工具和识别机制,成为词法分析程序的 自动构造原理,学习Lex(Flex)工具的使用方法。
教学内容
5 语法分析程序的构造
参考书:《Compilers: Principles, Technigues, and Tools》 Alfred V.Aho, Ravi Sethi, Jeffrey D.Ullman, AddisonWesley,1986. 影印版:人民邮电出版社, 2001
参考书:《程序设计语言 编译原理》(第3 版),陈火旺、刘春林等,国防工业出版社 2000
9 代码优化和目标代码生成
代码优化是对代码作一些等价变换,以使得 最后生成的目标代码更为高效。介绍优化技 术,优化分类以及优化工作的基础-控制流 和数据流分析问题。
编译的最后一个逻辑阶段是目标代码生成。 目标代码生成程序的设计细节要考虑目标语 言和操作系统的特点。讨论目标代码生成程 序设计的一般问题,包括指令选择,寄存器 分配和计算顺序选择。
教学内容
6 语义分析和中间代码生成 在词法分析和语法分析之后,编译程序下一 个逻辑阶段的任务是语义分析和生成中间代 码。引入属性文法和语法制导的翻译的概念, 介绍中间代码的形式,针对一些语法成分讨 论相应语义处理工作的描述。
7 符号表 介绍符号表的一般组织和使用方法,讨论分 程序结构语言的名字作用域分析及符号表设 计方案。
教学内容
1 编译程序概述 编译程序是现代计算机系统的基本组成部分之 一.编译程序一般由词法分析程序,语法分析程 序,语义分析程序,中间代码生成程序,目标 代码生成程序,代码优化程序,符号表管理程 序和错误处理程序等成分构成。本章概要介绍 编译成分的主要功能以及编译阶段的逻辑关系。
2 PL/0 编译程序剖析 给出一个简单的类Pascal语言,其编译程序用 高级语言(C和Pascal)实现。通过剖析该高 级语言程序以理解各编译成分的功能及手工实 现方法。
language) 语言处理程序(language processor) 语言转(变)换(language transformation)
编译逻辑过程
词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成
词法分析—第一步识别单词
英文句子由单词构成 This line is a longer sentence. (字母组成的有集体含义的最小成分) 句子开头的单词第一个字母要大写 空格是单词分隔符 句点是句子结尾
4 各部分权重
– 书面练习抽查 – 课堂小测(两次) 10% – 实践20%或35% (必做: Project1占10%; 选做: Project2占
25%, Project3占10% ;任选:Project4待定) – 期末考试 70%或55%
教材及主要参考书
教材:《编译原理》(第2版),张素琴、 吕映芝、蒋维杜、戴桂兰,清华大学出版社 2004
predicate then-stmt If-then-else
adjective else-stmt
double f = sqrt(-1);
“sqrt(-1)”的推导
规则 Expression -> UnaryExpression Expression -> FuncCall Expression -> TINTCONSTANT UnaryExpression -> TOP Expression FuncCall -> TIDENT TLPAREN Expression TRPAREN
教师联系信息
张素琴 电话62785601 办公室 东主楼10-207 zsq-dcs@
董渊 电话62794240 办公室 东主楼10-209 dongyuan@
王生原 电话62794240 办公室 东主楼10-209 wwssyy@
什么是编译程序
语言转(变)换系统
C++
C++编译器
Java
Java编译器
C Bytecode
术语
编译程序(compiler) 编译程序的源语言(源程序) (source
language)(source program) 编译程序的目标语言(目标程序) (object or
target language)(object or target program) 编译程序的实现语言(implementation
件语言书写的各种程
系统软件:居于计算 机系统中最靠近硬件
序处理成可在计算机 上执行的程序。
的一层,其他软件一 软件语言:用于书写
般都通过系统软件发 软件的语言。它主要
挥作用。他和具体的 包括需求定义语言,
应用领域无关,如编 功能性语言,设计性
译系统和操作系统等。 语言,程序设计语言
以及文档语言。
or derivation)
This line is a longer sentence
This line
is
a
longer sentence
pronoun noun verb article adjective noun
subject
sentence
object
分析程序成分
x=y
Z
1
Z2
G
assign
什么是编译程序
功能
高级语言 书写的程序
编译程序
术语
编译程序的源语言(源 程序)
编译程序的目标语言 (目标程序)
编译程序的实现语言
SO I
低级语言程序
ST I
什么是编译程序
分类
– 软件 – 系统软件 – 语言处理系统
编译系 统 操作系统
裸机
分类
软件:计算机系统中 语言处理系统:把软
的程序及其文档
自顶向下的语法分析。可以看作是为一个输入串寻找 一个最左推导的过程,也等价于从根开始,按前序生成 结点,为输入串构造分析树的过程。讨论一种有效的 无回溯的自顶向下分析程序,这种分析程序称为预测 分析程序。介绍对于一个文法类:LL(1)文法, 如 何自动的构造预测分析程序。
自底向上(自下而上)语法分析方法,也称移进-归 约分析法。它的实现思想是对输入符号串自左向右进 行扫描,并将输入符逐个移入一个后进先出栈中,边 移进边分析,一旦栈顶符号串形成可归约串,就用相 应非终结符代替可归约串,这称为一步归约,重复这 一过程,直到归约到栈中只剩文法的开始符号时,则 为分析成功,并确认输入串是文法的句子。本章介绍 LR分析法,分析过程中归约的是当前句型的句柄, 称为规范归约。重点讲解LR类(LR(0)、SLR (1)、LALR(1)、LR(1))文法的分析表的构 造原理。
ist his linealo gerse nte nce.
词法分析
从左至右扫描字符流的源程序、分解构成 源程序的字符串,识别出(拼)一个个的 单词(符号)
单词符号是语言中具有独立意义的最基 本结构。多数程序语言中,单词符号一 般包括 —各类型的常数、保留字、标识 符、运算符、界符等等。
例如
double f = sqrt(-1);
课程架构:
1 理论和实践并重的课程 2 理论部分的题目出现于书面练习,课堂小测和期末考试 3 实践题目(Project)
– Project1: 用高级语言(C或Pascal)实现扩充的PL/0编译程序
– Project2: 使用编译构造工具实现面向对象语言Tool的编译程序 – Project3: 使用编译构造工具实现扩充的PL0编译程序 – Project4: 用GCC裁制一个编译器(任选)
《编译原理》课程信息
教学目的与要求:
编译程序是现代计算机系统的基本组成部 分之一。本课程重点讲述编译程序的设计 原理和常用实现技术。通过课程的学习和 实验的完成,应该清楚的理解一个编译程 序是如何工作的;如果在以后遇到了任何 一个程序设计语言,应该知道如何实现这 个语言的多数机制;应具有一定的使用编 译构造工具开发编译程序的经验;会将所 学的常用技术和算法应用于类似的软件的 设计和实现中。