词法单元、模式、词素
词法分析器的作用
读入字符流,组成词素,输出词法单元序列
过滤空白、换行、制表符、注释等
将词素添加到符号表中

独立的词法分析器可以简化编译器的设计,词法分析器可以首先完成一些简单的处理工作。模块化设计,增强编译器的可移植性。
词法单元(Token)
<词法单元名,属性值>
词法单元名是表示词法单位种类的抽象符号,语法分析器通过单元名即可确定词法单元序列的结构。属性值通常用于语义分析之后的阶段。
模式(pattern)
描述了一类词法单元的词素可能具有的形式
词素(lexeme)
源程序中的字符序列,它和某个词法单元的模式匹配,被词法分析器识别为该词法单元的实例。

词法单元的属性
一个模式匹配多个词素时,必须通过属性来传递附加的信息,属性值将被用于语义分析、代码生成等阶段
不同的目的需要不同的属性,属性值通常是一个结构化数据(包含多种信息)
如词法单元
id的属性,包括{id内容、类型、第一次出现的位置、…}(或存放于符号表中,属性为符号表条目链接)
词法错误
没有其他组件的帮助,词法分析器很难发现源代码中的错误,比如fi(a==f(x)) ,fi 是关键词if 的误写还是一个函数标识符?返回id 词法单元给语法分析器处理。
所有模式都无法和剩余输入的某个前缀匹配:
词法分析器不能继续处理输入
错误恢复策略:从剩余的输入中删除一个字符;向剩余的输入中插入一个遗漏的字符;用一个字符来替换另一个字符;交换两个相邻的字符
Last updated