编译器结构:


- 编译器实例:(stack:栈式计算机)

编译器的前端:

词法分析:
- 手工实现(需要书写词法分析器):


词法分析识别关键字和标识符
- 方法一:

- 方法二:

2, 自动生成(需要书写声明式的规范):正则表达式
- 正则表达式的定义:

- 例子:
如果是C语言,∑=ASCII;如果是Java语言,∑=UNodd

- 简化的正则表达式:

有限状态自动机:

- DFA与NFA的区别:


例一(确定的有限状态自动机DFA):输入的字符串一定被自动机接受


例二(非确定的有限状态自动机NFA):输入的字符串可能被自动机接受,也可能被自动机接受

从接受正则表达式到生成词法分析器代码流程:

- 从RE到NFA:

转换规范:

例子:
将a ( b | c )*转换为NFA:

2, NFA转换为DFA:


将a ( b | c )*转换为DFA:

DFA的最小化:





