编译-第03章-词法分析

编译-第3章-词法分析

3.1 词法分析的功能

◆ 词法分析:根据词法规则识别及组合单词,进行词法检查。

◆ 对数字常数完成数字字符串到数值的转换。

◆ 删去空格字符和注解。

1
2
3
4
5
6
7
8
9
10
def say_hello():
print("Hello, World!")

• NAME: 'def'
• NAME: 'say_hello'
• OP: '('
• OP: ')'
• OP: ':'
• NEWLINE: '\n'
...

实现方案

  • 词法分析单独作为一遍:先词法分析,分析完成后进行语法分析
  • 词法分析单独作为语法分析的子程序,效率高
    1. 语法分析器(Parser)需要新词法单元时调用词法分析器
    2. 词法分析器返回下一个识别出的词法单元(类型+值)
    3. 语法分析器根据词法单元类型构建语法树

3.2 单词的种类及词法分析程序的输出形式

**单词的种类:**保留字;标识符:函数名等用户自定义;常数;分界符

单词的内部形式

  • key(type, value)
  • 常用分类:
    • 按照单词种类
    • 保留字和分界符按照一符一类(更常见)

3.3 正则文法和状态图(左线形文法)

A → Ba(左线性)

  • G中的非终结符都是一个状态(识别符号为终止状态,两个圈)
  • 设置一个开始状态S
  • 若Q→t, S → Q
  • 若Q→Rt, R → Q

image

六条规则,六条边

状态图可分析和识别字符串x,是规约的过程(自底向上的),每一步规约的正好是句柄

**句柄:**最左简单短语

3.4 词法分析程序的设计与实现

image

image

构造词法分析程序

1. 单词及内部表示

2. 词法分析程序需要引用的公共(全局)变量和过程

3. 词法分析程序算法

词法分析程序的自动生成