词法分析的任务:
首先,从阶段上来看,编译器可分为若干个中间阶段:
典型的,可以包含为一个前端,一个后端。前端接收源程序产生一个中间表示,后端接收表示继续生成一个目标程序。所以,前端处理的是跟源语言有关的属性,后端处理跟目标机器有关的属性。
更细节的,前端可以划分为若干个阶段:
下面我们看看词法分析器的任务:
词法分析器读入程序员写的程序,然后对字符流做切分成记号流。举个例子:
这是一个程序员看到的字符流
词法分析器将字符流读入,根据关键字、标识符、标点、字符串、整形数等进行划分,形成记号流(单词):
那么就会有两个问题:1.记号的数据结构如何定义? 2.如何实现从字符流到记号流转换的算法?
首先看如何定义记号的数据结构,假如用C语言实现数据结构的定义,可以这样实现:
举个例子:假如源语句if(x>5),则词法分析器返回token{k=IF,lexeme=0};token{k=IPAREN,lexeme=0};token{k=ID,lexeme="X"};……
【小结】:词法分析器的任务:字符流到记号流。
字符流:和被编译语言密切相关(ASCII,Unicode,or……)
记号流:编译器内部定义的数据结构,编码所识别出的词法单元
时间: 2024-10-13 23:42:39