标签(空格分隔): 未分类前端
简单的说,一个编译器就是一个程序,它能够阅读以某一种语言(源语言)编写的程序,并把该程序翻译称为一个等价的,用另外一种(目标语言)编写的程序。正则表达式
编译器的重要任务之一是报告它在翻译过程当中发现的错误。数据库
解释器(interpreter)
是另外一种常见的语言处理器。直接利用源代码和输入来产生输出。后端
Java 结合了编译和解释过程。缓存
- Java源代码首先被编译成一个称为
字节码(bytecode)
的中间表现形式。- 而后
JVM
对获得的字节码加以解释和执行。
为了更快地完成输入和输出的处理,有些被称为
即便(just in time,JIT)
编译器的JAVA编译器在运行中间程序处理输入的那一刻,首先把字节码翻译为机器语言,而不用解释器,这样能加快速度。安全
出了编译器以外,建立一个可执行的目标程序还须要一些其余程序。数据结构
预处理器(preprocessor)
的程序独立完成。
编译器
可能产生一个汇编语言做为输出。
汇编器(assembler)
的程序进行处理,生成可重定位的机器代码。连接器(linker)
解决外部内存地址的问题。加载器(loader)
把全部的可执行目标文件加载进内存执行。编译器由两部分组成:分析部分和综合部分架构
分析(analysis)
部分把源程序分解为多个组成要素,并在这些要素之上加入语法结构。而后,它使用这个结构来建立该源程序的一个中间表示。前后端分离
符号表(symbol table)
的数据结构中。符号表和中间表现形式一块儿传送给综合部分。函数
综合(synthesis)
部分根据中间表示和符号表中的信息构造用户期待的目标程序。
分析部分
常常被称为编译器的前端
,而综合部分
被称为后端
。编译器的第一个步骤称为词法分析(lexical analysis)
或扫描(scanning)
。
词法分析器读入组成源程序的字符流
,而且将它们组织成为有意义的词素(lexeme)
的序列
词素
,词法分析器产生以下形式的词法单元(token)
<token-name,attribute-value>
例子: position = initial + rate * 60
通过词法分析后转变为<id,1> <=> <id,2> <+> <id,3> <*> <60>
从技术上讲,60应该被描述为
<number,4>
,4指向符号表中对应于60的条目。
语法分析(syntax analysis)
或解析(parsing)
。
根据词法分析的结果,进行语法分析,结果通常是一颗语法树
等语法结构,如图1-7。
编译器的后续步骤使用这个语法结构来帮助分析源程序,并生成目标程序。在第四章,咱们将使用上下文无关文法来描述程序设计语言的语法结构,
语义分析器(semantic analyzer)
使用语法树和符号表中的信息来检查源程序是否和语言定义的语义一致。同时收集类型信息,并把信息存放在语法树或符号表中,以便在随后的中间代码中使用。
这就是语义分析中一个十分重要的功能,具体例子就是图中的inttofloat
。
咱们将在第六章详细介绍。
将语法树等中间形式翻译为三地址代码
的中间形式。
第六章咱们将将详细介绍。
机器无关的代码优化步骤试图改进中间代码,以便生成更好的目标代码。
如下是个简单的例子
优化为
第八章咱们将详细讨论。
生成类汇编语言
的目标语言,
在第八章中详细讨论
上面代码忽略了对源程序中的标示符进行存储分配的重要问题。
咱们将在第七章看到,编译器在中间代码生成或代码生成阶段对有关存储器分配的决定,和运行时刻的存储组织方式依赖于被编译的语言。
符号表管理记录源程序变量过程的各类信息
相似与平衡树红黑树之类的数据结构,便于查询。
(其实就是所谓的先后端分离的意思)
前端步骤能够当作一趟,根据中间代码生成目标代码的后端也能够看作一趟。
前端趟和后端趟根据目标自由搭配。
NOMAD
,用于数据库查询的SQL
第五代语言:基于逻辑与约束语言:Prolog
和OPS5
声明式语言:函数式语言
,约束逻辑式语言
属于此类。
复杂多变的程序设计语言,对编译器及编译器设计人员也提出了极大的考验。
本书将会告诉咱们编译器设计的根本思想和方法论。
接收一个问题,抓住问题的关键特性的数学抽象表示,并用数学方法解决他。
基本的几个模型
二进制翻译
编译器技术能够用于把一个机器的二进制代码翻译成另外一个机器的二进制代码,使得能够在一个机器上运行本来为另外一个指令集编译的程序。
硬件合成
不只仅大部分软件是用高级语言描述。大部分硬件设计也是使用高级硬件描述语言描述的。这些语言有Verilog
和VHDL
. 硬件设计一般一般是在寄存器传输层(Register Transfer Level,RTL)
描述.
数据查询解释器
编译而后模拟
public
,private
,protecte
Algol 60
使用