词法分析是编译的第一个阶段

1.1、词法分析的任务

从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。

将识别出的单词转换成统一的机内表示——词法单元(token)形式

token:< 种别码,属性值 >

token是一个2元组,由种别码和属性值构成。

种别码表示单词的种别,那么程序设计语言中的单词的类型都包含哪些呢?

1.2、大体上分为5类

自然语言处理 什么是token_标识符

1、给定一个程序语言,它的关键字是可以提前确定的,这种是一个单词会给定一个种别码

2、标识符是一个开放的集合,也就是不能事先枚举所有的标识符,因此将所有的标识符统一作为一类单词,给它分配一个种别码。为了区分不同类型的标识符,使用token的第2个分量-属性值,不同类型的标识符,属性值是不同的

3、常量,与标识符类似,也是开放的集合。但是不同类型的常量构成方式不同,因为为每一个类型分配一个种别码。所以是一型一码。同一种常量下的不同常量也是用token的第2个分量进行区分

4、运算符和界限符,也是可以提前确定的。所以会给每一个运算符和每一个界限符分配一个种别码,也就是一词一码

语法分析是编译的第2个阶段。

2.1、语法分析的任务

从词法分析器输出的token序列中识别出各类短语,并构造语法分析树(parse tree)

2.2、赋值语句分析树

自然语言处理 什么是token_属性值_02

第2行是词法分析后生成的token序列

下面是该语句的分析树

自然语言处理 什么是token_标识符_03

可以看到,一个表达式加上或者乘以另外一个表达式,就会变成另外一个更大的表达式。而一个标识符加上一个等号,加上一个表达式,最后跟上一个分号就会变成一个赋值语句

2.3、变量声明语句的分析树

自然语言处理 什么是token_属性值_04

表示的是一个类型T连上一个IDS,再连上一个分号可以构成一个声明语句。其中

D Declaration 声明

T Type 类型

IDS Identity Sequence 标识符序列

其中type只能是int | real | char | bool 中的一种

IDS 可以理解为一个标识符本身可以构成IDS,此外 一个标识符序列加上一个逗号,再加上一个标识符可以构成一个更大的标识符序列

看这个例子

int a , b , c ;

它的分析树如图

自然语言处理 什么是token_自然语言处理 什么是token_05

a本身是一个标识符,可以构成IDS,一个IDS加上一个逗号,再加上一个标识符b可以构成一个更大的标识符序列.int是一个类型,连上一个IDS和右边的分号最后构成声明语句D