第三章词法分析 词法分析是编译的第一个阶段,它的主要任务是从左至 有逐个字符地对源程序进行扫描,产生一个个单词序列,用 以语法分析。执行词法分析的程序称为词法分析程序或扫描 程序。y 3.1词法分析的基本概念 31.1词法分析的意义 词法分析程序完成的是编译第一阶段的王作。词法分析 工作可以是独立的一遍,把字符流的源程序变为单同序列, 输出在一个中间文件上,这个文件做为语法分析程序的输入 而继续编译过程、为减少与外存储器交换数据,将词法分析 程序设计成一个子程序,每当语法分析程序需要一个单词时 则调用该子程序。词法分析程序每得到一次调用,便从
第三章 词法分析 词法分析是编译的第一个阶段,它的主要任务是从左至 右逐个字符地对源程序进行扫描,产生一个个单词序列,用 以语法分析。执行词法分析的程序称为词法分析程序或扫描 程序。 3.1 词法分析的基本概念 3.1.1 词法分析的意义 词法分析程序完成的是编译第一阶段的工作。词法分析 工作可以是独立的一遍,把字符流的源程序变为单同序列, 输出在一个中间文件上,这个文件做为语法分析程序的输入 而继续编译过程、为减少与外存储器交换数据,将词法分析 程序设计成一个子程序,每当语法分析程序需要一个单词时, 则调用该子程序。词法分析程序每得到一次调用,便从
源程序文件中读入一些字符,直到识别出一个单词。停留在空 格、回车、制表符或下一单词的第一个字符为止。这样把词法 分析程序和语法分析程序是放在同一遍里,而省掉了中间文件 节省了运行时间。 正如前面所说,正则文法是上下文无关文法的特例,也就 是说,词法分析可以看作语法分析的的一部分,词法描述完全 可以归并到语法描述中去,。那么为什么将词法分析做为 独立的阶段?为什么把编译过程的分析上作划分成词法分析和 语法分析两个阶段?主要的考虑因素为 1.使整个编译程序的结构更简洁、清晰和条理化。词法分析 比语法分析简单的多,由于源程序结构上的一些细节,常使得 识别单词的工作交给语法分析处理比较曲折和费时。例如,空 白和注释的处理;早期的 FORTRAN受书写格式限制,需在 别单词时进行特殊处理等等。如果这些工作都在语法分析时 并考虑,显然会使得分析程序的结构变得十分复杂
源程序文件中读入一些字符,直到识别出一个单词。停留在空 格、回车、制表符或下一单词的第一个字符为止。这样把词法 分析程序和语法分析程序是放在同一遍里,而省掉了中间文件, 节省了运行时间。 正如前面所说,正则文法是上下文无关文法的特例,也就 是说,词法分析可以看作语法分析的的一部分,词法描述完全 可以归并到语法描述中去,。那么为什么将词法分析做为一个 独立的阶段?为什么把编译过程的分析上作划分成词法分析和 语法分析两个阶段?主要的考虑因素为: 1.使整个编译程序的结构更简洁、清晰和条理化。词法分析 比语法分析简单的多,由于源程序结构上的一些细节,常使得 识别单词的工作交给语法分析处理比较曲折和费时。例如,空 白和注释的处理;早期的FORTRAN受书写格式限制,需在识 别单词时进行特殊处理等等。如果这些工作都在语法分析时一 并考虑,显然会使得分析程序的结构变得十分复杂
2.编译程序的工作效率也是要考虑的。正则文法和上下文 无关文法采用的识别器是不同的,把词法分析从语法分析独立 出来,采用专门的读字符和分离单词的技术可大大加快编译速 度。由于单词的结构可采用与正则文法对应的有限自动机进行 识别,进而可建立词法分析程序的自动构造工具。 3.可增强编译程序的可移植性。在同一个语言的不同实现 中,或多或少地会涉及到与设备有关的特征,比如采用ASC 还是 EBCDIC字符编码。另外语言的字符集的特殊性的处理, 些专用符号,如 PASCAL中的“↑”的表示等等,都可置于 词法分析程序中解决而不影响编译程序其它成分的设计
2.编译程序的工作效率也是要考虑的。正则文法和上下文 无关文法采用的识别器是不同的,把词法分析从语法分析独立 出来,采用专门的读字符和分离单词的技术可大大加快编译速 度。由于单词的结构可采用与正则文法对应的有限自动机进行 识别,进而可建立词法分析程序的自动构造工具。 3.可增强编译程序的可移植性。在同一个语言的不同实现 中,或多或少地会涉及到与设备有关的特征,比如采用 ASCII 还是 EBCDIC字符编码。另外语言的字符集的特殊性的处理, 一些专用符号,如 PASCAL中的“↑”的表示等等,都可置于 词法分析程序中解决而不影响编译程序其它成分的设计
同法分析程序的主要功能是从字符流的源程序中识别单词, 它要从左至右逐个字符地扫描源程序,有时还可完成其它一些 任务。如:,滤掉源程序中的注释和空自(由空格,制表或回车 换行字符引起的空白)、为了使编译程序能将发现的错误信息 与源程序的出错位置联系起来,同法分析程序负责记录新读入 的字符行的行号,以便行号与出错信息相联:在支持宏处理功 能的源请自中,可以词法分析程席完成基预处理等等。也可
词法分析程序的主要功能是从字符流的源程序中识别单词, 它要从左至右逐个字符地扫描源程序,有时还可完成其它一些 任务。如:滤掉源程序中的注释和空白(由空格,制表或回车 换行字符引起的空白)、为了使编译程序能将发现的错误信息 与源程序的出错位置联系起来,同法分析程序负责记录新读入 的字符行的行号,以便行号与出错信息相联;在支持宏处理功 能的源语自中,可以由词法分析程序完成其预处理等等。也可 完成一些语法分析的工作,如:说明部分的处理
3.1.2词法分析的输入输出 词法分析程序的功能是读入源程序,输出单词符号。词法 分析是读入文本文件的源程序,读入文本文件可采用从文件中逐 个读入符号,或者建立一个缓冲区,先将字符读入缓冲区,然后从 缓冲区中读入字符,使用缓冲区也可以采用双区域方式,即将 缓冲区分成二部分一部分在分析时,更换另一部数据,从而提 词法分析的效率。 单词符号是一个程序设计语言的基本语法符号。程序设计 语言的单同符号大致可分成5种: 1基本字,也称关键字,如 PASCAL语言中的 begin,end, if; while和var等。 2标识符,用来表示各种名字,如常量名、变量名、类型名、 函数名和过程名等。 3.常数,各种类型的常数,如25,3.1415,TRUE和“ABC” 等
3.1.2词法分析的输入输出 词法分析程序的功能是读入源程序,输出单词符号。词法 分析是读入文本文件的源程序,读入文本文件可采用从文件中逐 个读入符号,或者建立一个缓冲区,先将字符读入缓冲区,然后从 缓冲区中读入字符,使用缓冲区也可以采用双区域方式,即将 缓冲区分成二部分一部分在分析时,更换另一部数据,从而提 高词法分析的效率。 单词符号是一个程序设计语言的基本语法符号。程序设计 语言的单同符号大致可分成5种: 1.基本字,也称关键字,如 PASCAL语言中的 begin,end, if;while和 var等。 2.标识符,用来表示各种名字,如常量名、变量名、类型名、 函数名和过程名等。 3.常数,各种类型的常数,如 25,3.1415,TRUE和“ABC” 等