一、编译器的实现步骤
1、词法分析,将原文件划分为单独的单词或关键字。
2、语法分析,利用上下文无关文法分析程序的短语结构。
3、语义分析,根据短语建立抽象语法树,确定短语含义、变量关联声明、检查表达式类型。
4、翻译,根据抽象语法树翻译成中间表示树不依赖任何特定的程序语言和目标机器结构。
5、指令选择,根据目标机器的指令体系,对中间表示树的节点进行划分。
6、控制流分析。
7、数据流分析。
8、寄存器分配。
9、代码生成。
在上编译原理课程的时候,我们完成了一个基于miniJava的编译器和垃圾回收器
代码:https://github.com/xuhaoavl/tiger
二、词法分析器
1、词法记号,编程语言语法单元的一系列字符,词法记号一般分为有限的几种。
例如:ID(字符串)、NUM(整数)、REAL(实数)、IF(if)、VOID(void)、COMMA(逗号)。。。。
2、正则表达式,一般用正则表达式匹配字符窜的方式检查字符串类型。
符号(a,v,h,b等),或(a|b)、并(a·b)、空(ε)、重复(克林闭包,所有可能的字符串)
有一些可能会产生模糊性,例如if8是字符串还是if和8,对此有以下两种解决方法
a、最长匹配,选择可以匹配正则表达式的最长输入字符串。
b、优先匹配