第三章 词法分析及词法分析程序
第三章 词法分析及词法分析程序
3.1设计扫描器时应考虑的问题 ·词法分析程序亦称为扫描器 ·扫描器的任务是识别基本的语法单位一单词 ·3.1.1词法分析的必要性 ·描述单祠的结构比其它语法结构简单,仅用3型文法就够了: ·将单祠积别从语法分析积别分离出来,可采用更有数的工具实现: ·有些语言的单祠识别与前后文相关,不宜将其与语法分析合并 使编译程序各部分独立出来,有利于设计、调试和雅护 。 扫描器的输出是语法分析程序的输入
3.1 设计扫描器时应考虑的问题 • 词法分析程序亦称为扫描器 • 扫描器的任务是识别基本的语法单位——单词 • 3.1.1 词法分析的必要性 • 描述单词的结构比其它语法结构简单,仅用3型文法就够了; • 将单词识别从语法分析识别分离出来,可采用更有效的工具实现; • 有些语言的单词识别与前后文相关,不宜将其与语法分析合并; • 使编译程序各部分独立出来,有利于设计、调试和维护 • 扫描器的输出是语法分析程序的输入
3.1.2单词符号的内部表示 ·常用的内部表示方法:(class,value) ·Class:int指示单词的类别; ·Value:string(or:struct,union,.)用于表示单词的值; ·为便于阅读,常用助记符(或常量标识符、宏定义等)表 示class。 ● 单词的分类方法:可一词一类(+、-、begin、end等)或 多祠一美(如关键字类、操作符类、分隔符类、变量名类、 常数类等)。 ·在识别出变量名、函数(过程)名时,还应进行查填符号 表的工作
3.1.2 单词符号的内部表示 • 常用的内部表示方法: (class,value) • Class: int 指示单词的类别; • Value: string(or: struct,union,…)用于表示单词的值; • 为便于阅读,常用助记符(或常量标识符、宏定义等)表 示class。 • 单词的分类方法:可一词一类(+、-、begin、end等)或 多词一类(如关键字类、操作符类、分隔符类、变量名类、 常数类等)。 • 在识别出变量名、函数(过程)名时,还应进行查填符号 表的工作
3.1.3识别标识符的若干约定和策略 ·一般来说,单词的长度是有限制的 。 在允许长度下,应按最长匹配原则进行识别 ·有时需要超前扫描来进行单词识别。例如,FORTRAN语言 中的算术条件句)=L1,L2,L3和语句函数定义句)=1) 中的亚的识别;以及等。 ·在进行超前扫描时,还应注意“回退”字符,即将多吃掉 的字符退还回输入缓冲区。 书中P46程序31给出了使用堆栈实现多字符回退的算法。 算法介绍从略
3.1.3 识别标识符的若干约定和策略 • 一般来说,单词的长度是有限制的 • 在允许长度下,应按最长匹配原则进行识别 • 有时需要超前扫描来进行单词识别。例如,FORTRAN语言 中的算术条件句 IF(e)=L1,L2,L3和语句函数定义句 IF(x)=f(x) 中的IF的识别;以及等。 • 在进行超前扫描时,还应注意“回退”字符,即将多吃掉 的字符退还回输入缓冲区。 • 书中 P46程序3-1给出了使用堆栈实现多字符回退的算法。 算法介绍从略
3.1.4源程序的输入及预处理 ·本节略
3.1.4 源程序的输入及预处理 • 本节略