全球旧事资料 分类
开篇
编译,简单的说,就是把源程序转换为可执行程序。从helloworld说程序运行机制里面简单的说明了程序运行的过程,以及一个程序是如何一步步变成可执行文件的。在这个过程中,编译器做了很多重要的工作。对底层该兴趣的我,自然的,也就迫切想搞清楚编译的内部实现,也就是编译的原理。这篇文章主要说的是编译器前端,词法分析器的原理,最后会给出一个词法分析器的简单实现。
介绍
编译简单的说,就是把源程序转化为另一种形式的程序而其中关键的部分就是理解源程序所要表达的意思,才能转化为另一种源程序。可以用一个比喻来说明问题:人A和人B想要交谈,但是他们都不知道彼此的语言,这就需要一个翻译C,同时懂得A和B的语言。有了C做中间层,A和B才能正常交流。C的作用就有点像编译器,它必须能理解源程序所要表达的意思,才能把信息传递给另一个。编译器也一样,它的输入是语言的源文件(一般可以是文本文件)对于输入的文件,首先要分离出这个输入文件的每个元素(关键字、变量、符号、、)然后根据语言的文法,分析这些元素的组合是否合法,以及这些组合所表达的意思。程序设计语言和自然语言不一样,都是用符号来描述,每个特定的符号表示特定的意思,而且程序设计语言是上下文无关的。上下文无关就是某一个特定语句所要表达的意思和它所处的上下文没有关系,只有它自身决定。这篇博文主要说的就是词法分析,也就是把输入的符号串整理成特定的词素。
词法分析
定义:词法分析器的功能输入源程序,按照构词规则分解成一系列单词符号。单词是语言中具有独立意义的最小单位,包括关键字、标识符、运算符、界符和常量等1关键字是由程序语言定义的具有固定意义的标识符。例如,Pascal中的begi
,e
d,if,while都是保留字。这些字通常不用作一般标识符。2标识符用来表示各种名字,如变量名,数组名,过程名等等。3常数常数的类型一般有整型、实型、布尔型、文字型等。4运算符如、、、等等。5界符如逗号、分号、括号、等等。输出:词法分析器所输出单词符号常常表示成如下的二元式:单词种别,单词符号的属性值单词种别通常用整数编码。标识符一般统归为一种。常数则宜按类型(整、实、布尔等)分种。关键字可将其全体视为一种。运算符可采用一符一种的方法。界符一般用一符一种的方
f法。对于每个单词符号,除了给出了种别编码之外,还应给出有关单词符号的属性信息。单词符号的属性是指单词符号的特性r
好听全球资料 返回顶部