编译原理(一)

编译器结构:

编译原理(一)_第1张图片

 

 编译原理(一)_第2张图片

 

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

编译原理(一)_第3张图片

 

 编译器的前端:

编译原理(一)_第4张图片

 

 词法分析:

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

编译原理(一)_第5张图片

 

 

编译原理(一)_第6张图片

 

 词法分析识别关键字和标识符

  • 方法一:

编译原理(一)_第7张图片

 

  •  方法二:

编译原理(一)_第8张图片

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

  • 正则表达式的定义:

编译原理(一)_第9张图片

 

  • 例子:

如果是C语言,∑=ASCII;如果是Java语言,∑=UNodd

编译原理(一)_第10张图片

 

  •  简化的正则表达式:

编译原理(一)_第11张图片

 

 有限状态自动机:

编译原理(一)_第12张图片

  • DFA与NFA的区别:

编译原理(一)_第13张图片

编译原理(一)_第14张图片

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

编译原理(一)_第15张图片

 

 

 编译原理(一)_第16张图片

 

 

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

编译原理(一)_第17张图片

 

 

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

 

 

编译原理(一)_第18张图片

 

 

  1.  从RE到NFA:

编译原理(一)_第19张图片

转换规范:

编译原理(一)_第20张图片

 

 

 

  • 编译原理(一)_第21张图片
  • 编译原理(一)_第22张图片

例子:

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

编译原理(一)_第23张图片

2, NFA转换为DFA:

编译原理(一)_第24张图片

 编译原理(一)_第25张图片

 

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

编译原理(一)_第26张图片

 

 DFA的最小化:

 编译原理(一)_第27张图片

 

 

 

 

 

 

 

 

你可能感兴趣的:(编译原理(一))