词法分析(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),标识符往往会被附上数值等信息。
浙公网安备 33010602011771号