实验一:实验一:词法分析器编制实验一教学重点与实现的关键技术11词法分析概述人们理解一篇文章或解析一个程序起码是在单词级别上来思考的。同样,编译程序也是在单词的级别上来分析和翻译源程序的。词法分析的任务是:从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号(toke
),把作为字符串的源程序改造成单词符号串的中间程序。因此,词法分析是编译的基础。执行词法分析的程序称为词法分析器。构造词法分析器的方法分为手工编制和自动生成(如用著名的词法分析器的自动生成工具Lex自动为某种语言的编译构造词法分析器)两种,本实验要求学生利用所学习掌握的知识手工编制一个小型的词法分析器。手工编制一个小型的词法分析器。手工编制一个小型的词法分析器12词法分析器的设计要求121词法分析器的功能和输出形式词法分析器的功能是输入源程序,输出单词符号。单词符号是一个程序语言的基本语法符号。程序语言的单词符号一般可分为下列五种。(1)关键字是由程序语言定义的具有固定意义的标志符。有时称这些标志符为保留字或基本字。例如,Pascal中的begi
,e
d,if,while都是保留字。这些字通常不用作一般标志符。(2)标识符用来表示各种名字,如变量名、数组名、过程名等等。(3)常数常数的类型一般有整型、实型、布尔型、文字型等等。例如,100,314159,TRUE,‘Sample’。(4)运算符如、、、等等(5)界符如逗号、分号、括号、,等等。一个程序语言的关键字、运算符和界符都是确定的,一般只有几十个或上百个。而对于标识符或常数的使用通常都不加什么限制。词法分析器所输出的单词符号常常表示成如下的二元式:(单词种别,单词符号的属性值)单词种别通常用整数编码。一个语言的单词符号如何分种,分成几种,怎么编码,是一个技术性的问题。它主要取决于处理上的方便。标识符一般统归为一种。常数则宜按类型(整、实、布尔等)分种。关键字可将其全体视为一种,也可以一字一种。采用一字一种的分法实际处理起来较为方便。运算符可采用一符一种的分法,但也可以把具有一定共性的运算符视为一种。至于界符一般用一符一种的分法。如果一个种别只含一个单词符号,那么,对于这个单词符号,种别编码就完全代表它自身了。若一个种别含有多个单词符号,那么,对于它的每个单词符号,除了给出种别编码之外,还应给出有关单词符号的属性信息。单词符号的属性是指单词符号的特性或特征。属性值则是反r