1.2 the structure of a compiler
Compiler
1.2 the structure of a compiler
Compiler : analysis and synthesis
syntactically 语法上的
semantically 语意上的
The analysis part breaks up the source program into constituent pieces and imposes a grammatical structure on them.
The analysis part also collects information about the source program and stores it in a data structure called a symbol table, which is passed along with the intermediate representation to the synthesis part.
The synthesis part constructs the desired target program from the intermediate representstion and the information in the symbol table .
The analysis part is often called the front end of the compiler ;the synthesis part is the back end .
A typical decomposition of a compiler into phases is shown :

1.2.1 lexical analysis
lexemes .
<token-name, attribute-value>



1.2.2 syntax analysis
The parser uses the first components of the tokens produced by the lexical analyzer to create a tree-like intermediate representation that depicts the grammatical structure of the token steam . A typical representation is a syntax teee in which each interior node represents an operation and the children of the node represent the arguments of the operation .
1.2.3 semantic analysis
The semantic analysis uses the syntax tree and the information in the symbol table to check the source program for semantic consistency with the language definition .
Type checking :
coercions: the language specification may permit some type conversions called coercions
1.2.4 intermediate code generation
This intermediate representation should have two important properties : it should be easy to produce and it should be easy to translate into the target machine .
three-address code .
1.2.5 code optimization
The machine -independent code -optimization phase attempts to improve the intermediate code so that better target code will result .
12.6 Code generation
The code generator takes as input an intermediate representation of the source program and maps it into the target language .
A crucial aspect of code generation is the judicious assignment of registers to hold variables .

ldf :load float
mulf:multiplies float
addf : add float
stf :store float
1.2.7 symbol-table management
an essential function of a compiler is to record the variable names used in the source program and collect information about various attributes of each name .
The symbol table is a data structure containing a record for each variable name ,with fields for the attributes of the name .
1.2.8 The grouping of phases into passes
the discussion of phases deals with the logical organization of a compiler . In an implementation ,activities from several phase may be grouped together into a pass
With these collections ,we can produce compilers for different source languages for one target machine by combining different front ends with the back end for that target machine . Similarly ,we can produce compilers for different target machines ,by combining a front end with back ends for different target machines .
1.2.9 compiler-construction tools
some commonly used compiler-construction tools includes
1. parser generators that automatically produce syntax analyzers from a grammatical description of a programming language .
1.2 the structure of a compiler的更多相关文章
- How a C++ compiler implements exception handling
Introduction One of the revolutionary features of C++ over traditional languages is its support for ...
- IDEA指定.class文件输出位置
1.File > Project Structure > Project > Project compiler output 项目中的默认编译输出总目录 2.我习惯于把.class ...
- Chapter 4 Syntax Analysis
Chapter 4 Syntax Analysis This chapter is devoted to parsing methods that are typically used in comp ...
- Day004 选择结构
选择结构 if单选择结构(if) if双选择结构(if...else...) if多选择结构(if..else if...else) 嵌套的if结构 switch多选择结构 switch语句中的变量类 ...
- High-level structure of a simple compiler高級結構的簡單編譯器
1.lexical analysis,which analyzes the character string presented to it and divides it up into tokens ...
- Learning to write a compiler
http://stackoverflow.com/questions/1669/learning-to-write-a-compiler?rq=1 Big List of Resources: A N ...
- compiler
http://www.lingcc.com/2012/05/16/12048/ a list of compiler books — 汗牛充栋的编译器参考资料 Posted on 2012年5月16日 ...
- Tcl与Design Compiler (八)——DC的逻辑综合与优化
本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 对进行时序路径.工作环 ...
- IntelliJ IDEA(七) :Project Structure
Project Structure “ 项目结构”对话框允许您管理项目和IDE级别的元素,例如Modules,Facets,Libraries, Artifacts和SDK. 在大多数情况下,左边部分 ...
随机推荐
- 11 Vue学习 headtop
1: HeaderTop.vue : 面包屑:el-breadcrumb 定义面包屑, separator是分隔符. el-breadcrumb-item: 是面包屑中用 分隔符 分开的多 ...
- springboot集成报错,想要集成tk.mybatis报错,反射方法异常
在添加注释 @MapperScan("com.leyou.item.mapper")的时候,如果不小心就会导包倒错应该导成 import tk.mybatis.spring.ann ...
- Linux 切换字符界面和图形界面
1. 切换方式 # root 权限 systemctl get-default # 获取当前模式 systemctl set-default graphical.target # 设置开机为图形界面 ...
- 《深入分析Java Web技术内幕》读后感(Tomcat)
第11章 P286 Tomcat总体结构 1.service 2.server 3.组件的生命 Connector Container 1.容器的总体设计 2.Engine容器 3.Host容器 4. ...
- Java线程安全与多线程开发
互联网上充斥着对Java多线程编程的介绍,每篇文章都从不同的角度介绍并总结了该领域的内容.但大部分文章都没有说明多线程的实现本质,没能让开发者真正“过瘾”. 从Java的线程安全鼻祖内置锁介绍开始,让 ...
- RobotFramework+selenium环境安装
1.安装python 2.7.12 https://www.python.org/downloads/release/python-2712/ 安装完成之后配置好path,将下面的类似安装路径加入pa ...
- Maven修改默认仓库为阿里云仓库
Maven 仓库默认在国外, 国内使用难免很慢,我们可以更换为阿里云的仓库. 第一步:修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加 ...
- Unity 5着色器系统代码介绍(下)
http://forum.china.unity3d.com/thread-25738-1-10.html 上一篇对着色器系统的工作原理做了介绍,现在我们将继续深入,将目光聚焦在标准着色器的光照函数. ...
- Unity3d 5.3.5使用sqlite3
http://blog.csdn.net/glunoy/article/details/52037598 国内讲的乱七八糟,更有故作神秘提供Mono.Data.Sqlite.dll System.Da ...
- 聊聊ES6中的generator
generatorgenerator(生成器)是ES6标准引入的新的数据类型.一个generator看上去像一个函数,但函数执行中间可以停止. ES6定义generator标准的哥们借鉴了Python ...