程序语言的单词(2) 单词 词文 模式 MUL 运算符GT 界符 helo°双(单)引号中间的字符 串常量 STRINGthere串(不包括引号本身)
6 程序语言的单词(2) 单词 词文 模式 运算符 MUL * * GT > > 界符 , , , 串常量 STRING “hello” ‘there’ 双(单)引号中间的字符 串(不包括引号本身)
3.1设计扫描景时应考虑的问题 3.1.1词法分析的两种处理方式 ■将词法分析纳入到语法分析中进行 ■词法分析与语法分析分开来进行 描述单词结构比描述语法结构简单,仅用3型文法就够了 将单词识别从语法分析中分离出来,可采用更有效的工 具(状态转移图、有限自动机等)实现; 有些语言(如 FORTRAN)的单词识别与前后文相关,将词 法分析独立出来,有利于实现统一的语法分析; 使编译程序各部分独立出来,有利于设计、调试和维护 逻辑上的划分,不是指编译程序的执行流程
7 3.1 设计扫描器时应考虑的问题 3.1.1 词法分析的两种处理方式 ◼ 将词法分析纳入到语法分析中进行 ◼ 词法分析与语法分析分开来进行 –描述单词结构比描述语法结构简单,仅用3型文法就够了; –将单词识别从语法分析中分离出来,可采用更有效的工 具(状态转移图、有限自动机等)实现; –有些语言(如FORTRAN)的单词识别与前后文相关,将词 法分析独立出来,有利于实现统一的语法分析; –使编译程序各部分独立出来,有利于设计、调试和维护 ◼ 逻辑上的划分,不是指编译程序的执行流程
两种具体的实现方式 ■词法分析作为单独的一遍(多遍扫描) ①大部分编译时间花在扫描字符上,独立出来便于集中 处理 ②单词的词法规则简单,可建立特别适用于这种文法的 有效技术,实现词法分析的自动生成 ③整个编译程序结构简单,清晰,产生中间文件,占内 存 词法分析作为一个独立的子程序,供语法分析程序调 用(单遍扫描) ①语法分析调用时,返回一个单词符号 ②无中间文件,省内存,编译效率高
8 ◼ 词法分析作为单独的一遍(多遍扫描) ①大部分编译时间花在扫描字符上,独立出来便于集中 处理. ②单词的词法规则简单,可建立特别适用于这种文法的 有效技术,实现词法分析的自动生成. ③整个编译程序结构简单,清晰,产生中间文件,占内 存. ◼ 词法分析作为一个独立的子程序,供语法分析程序调 用 (单遍扫描) ①语法分析调用时,返回一个单词符号. ②无中间文件,省内存,编译效率高. 两种具体的实现方式
3.12单词符号的内部表示 词法分析器的输出形式 (1)单词符号的种类 ①保留字:如 begin,end,do等用户不能使 用 ②标识符:由用户定义 ③无符号整数:如124 ④单字符分界符:+ ⑤双字符分界符:∥/,/,*,=等
9 3.1.2 单词符号的内部表示 —词法分析器的输出形式 (1) 单词符号的种类 ①保留字:如begin,end,do等用户不能使 用 ②标识符:由用户定义 ③无符号整数:如124 ④单字符分界符:+,-, * ,/ ,;,,, ( ,),: ⑤双字符分界符://,/*, */,:=等
(2)单词符号的表示形式二元组 二元组:(单词类别,单词自身值) ①单词类别:说明单词属于哪一类,常用助记符或 整数编码表示 例:标识符用4表示 +‘用8表示 *用10表示 ②单词自身值 种类只有一个单词,不必给出单词自身值因为 根据类别编码能完全确定 种类含有多个单词,必须给出单词自身值予以 区别。 10
10 (2)单词符号的表示形式——二元组 二元组:(单词类别,单词自身值) ①单词类别:说明单词属于哪一类,常用助记符或 整数编码表示. 例:标识符用4 表示 ′+ ′用8表示 ′* ′用10表示 ②单词自身值 一种类只有一个单词,不必给出单词自身值.因为 根据类别编码能完全确定. 一种类含有多个单词,必须给出单词自身值予以 区别