剧终

我与传说有个约会

导航

词法分析(LEX)

为什么要进行词法分析?

在进行语法 语义分析前,首先需要把代码中多余的字符去掉,比如空格、注释之类的,因为这些字符(串)非常影响效率,这就是进行词法分析的主要目的。

 

词法符号

词法符号是代码中可以被当作有效单元的部分。代码正是由一系列这样的符号组成的,比如:

类型          举例

ID           Foo  N14  last

Num                                        1    0   000    55

IF                                             if

NotEqual                                 !=

像if, !=这样的符号被称为保留字,这样的保留字是不能被用作标识符(比如变量)的。

 

下面这些不属于词法符号:

1. 注释  如:/* 这是一行注释  */

2. 预定义指令 如:#include   #if

3. 宏

4. 特殊字符  如:空格 换行符  TAB键等

 

为什么预定义指令和宏不能算作词法符号?

因为在进行词法分析前,这些符号就会被进行预处理,比如#include<head.h>,预处理器读取到这行代码时,会将head.h中的内容添加到当前代码文件中, 因此在进行词法分析时,这句代码并不存在。

 

比如有这么一段代码:

float match0(char *s)   /* this is a comment line */

{

if(!strncmp(s,”0.0”,3))

{

        return 0.;
}

}

这段代码会被词法解释器分析成:

float   ID(match0)    (     char    *     ID(s)      )       等等。。

 

需要注意的是, 有些符号是带有附加信息的,比如标识符(ID),标识符往往会被附上数值等信息。

posted on 2010-08-20 22:06  剧终  阅读(798)  评论(0)    收藏  举报