一个简单的语法制导编译器:前端
该部分的重点是编译器的前端,特别是词法分析、语法分析和中间代码生成。从小事作起,首先创建一个可以将中缀表达式转换为后缀表达式的语法制导翻译器,而后再将其扩展,使之能将某些程序片断转换为三地址码,如图所示:后端

编译器再分析阶段(前端)把一个源程序划分红各个组成部分,并生成源程序的内部表示形式。这种内部表示称为中间代码,而后编译器在综合阶段(后端)将这个中间代码翻译成目标程序。spa
一个编译器前端的模型:翻译

-
- 词法分析:使编译器能够处理多个字符组成的构造(好比标识符)和表达式。
- 标识符:标识符由多个字符组成,其在语法分析阶段被称为词法单元。
- 表达式:由数值、标识符和“空白字符”(空格、制表符和换行符)等组成。
- 词素:源代码中的一个字符串序列。
- 词法:词素的正确形式(正则文法)
- 语法分析(语法扫描):把词法记号流依照语言的语法结构按层次分组,以造成语法短句
- 上下文无关文法:不只能够描述一个语言的语法,还能够指导程序的翻译过程。
- 语法:程序设计语言的语法描述了该语言的程序的正确形式,常使用上下文无关文法或BNF(Backus-Naur范式)的表示方法来描述语法。
- 语法制导翻译:面向文法的编译技术。
- 语义:该语言的语义定义了程序的含义,结合非形式化描述和启发性的示例来描述语言的语义。
- 中间代码的生成:
- 语法树(抽象语法树):源程序的层次化语法结构。
- 三地址码(三地址指令序列):x = y op z,其中op是一个二目运算符,y和z是运算份量的地址,x是运算结果的存放地址。最多只执行一个运算,一般是计算、比较或者分支跳转运算。

参考-《编译原理(第二版)》 设计