什么是词法分析?
词法分析是编译原理中一个重要的部分,也叫做 字面翻译(Literal Translation),用于把源程序中的单词转换成 形式化语言(formal languages) 中的有效单词。词法分析的目的是把输入的字符流分割成有意义的词素(Token),构成一个 词法单元(Lexical Unit),这个分析过程称为词法分析。
词法分析是编译器的一个重要过程,它的输入是一个符号流(以字符的形式),输出是拆分成有意义的词素,可以对符号流施加上语义上的约束,可以有效的检测出程序中出现的语法错误等。
词法分析的基本概念
词法分析的基本概念是由标记,记号,字符和词素组成的。
•标记(tag) 是识别一类特殊标记的函数,如一个空格,一个分号,等等。•记号(symbol) 指一系列字符的集合,比如一个字母,一个关键字,一个标识符等。•字符(character) 指原始的符号,比如英文字母abc、数字123等等。•词素(Token) 是源程序中的一个有意义的词,比如变量名、关键字等等。词法分析器就是把源程序中每一个字符重新组合成有意义的词素。
例子
下面这段源程序代码:
//计算2+2的和
int main() {
int result=2+2;
printf(“2+2=%dn”,result);
return 0;
}
它的词法分析结果如下:
Token | 含义 |
#include | 关键字 |
<stdio.h> | 标识符 |
int | 关键字 |
main | 标识符 |
( ) | 操作符 |
{ } | 操作符 |
int | 关键字 |
result | 标识符 |
= | 操作符 |
2 | 数字常量 |
+ | 操作符 |
2 | 数字常量 |
; | 操作符 |
printf | 标识符 |
( ) | 运算符 |
“,result” | 字符串常量 |
; | 操作符 |
return | 关键字 |
0 | 数字常量 |
; | 操作符 |
} | 操作符 |
我们再看一段示例代码。
//A sample C program
int main(void) {
printf("Hello world!n");
return 0;
}
它的分析过程如下:
1.首先使用注释忽略第一行;2.第二行的include是一个关键字,表明要引入外部代码;3.第三行的int是一个关键字,表示main函数的返回类型;4."main"是一个标识符,表示函数的名称;5."("和")"分别是一个界定符,标识main函数的开始和结束;6."printf"是一个标识符,表示调用函数;7."("和")"分别是一个界定符,标识调用函数的开始和结束;8."'Hello world!n'"是一个字符串,表示要输出的内容;9."return 0"是一个关键字,表示函数的返回值。
由此可见,词法分析就是把有意义的单词进行分离,从而将源代码中的抽象概念抽象成具体的有意义的单词,使得编译器可以处理和理解它们,并为程序准备好解释和执行步骤。
本文由 AI 生成。
发表评论