词法单元、模式、词素

词法分析器的作用

  • 读入字符流组成词素输出词法单元序列

  • 过滤空白、换行、制表符、注释等

  • 将词素添加到符号表中

独立的词法分析器可以简化编译器的设计,词法分析器可以首先完成一些简单的处理工作。模块化设计,增强编译器的可移植性。

词法单元(Token)

<词法单元名,属性值>

词法单元名是表示词法单位种类的抽象符号,语法分析器通过单元名即可确定词法单元序列的结构。属性值通常用于语义分析之后的阶段。

模式(pattern)

描述了一类词法单元的词素可能具有的形式

词素(lexeme)

源程序中的字符序列,它和某个词法单元的模式匹配,被词法分析器识别为该词法单元的实例

词法单元的属性

  • 一个模式匹配多个词素时,必须通过属性来传递附加的信息,属性值将被用于语义分析、代码生成等阶段

  • 不同的目的需要不同的属性,属性值通常是一个结构化数据(包含多种信息)

  • 如词法单元id 的属性,包括{id内容、类型、第一次出现的位置、…}(或存放于符号表中,属性为符号表条目链接

词法错误

没有其他组件的帮助,词法分析器很难发现源代码中的错误,比如fi(a==f(x))fi 是关键词if 的误写还是一个函数标识符?返回id 词法单元给语法分析器处理

所有模式都无法和剩余输入的某个前缀匹配:

  • 词法分析器不能继续处理输入

  • 错误恢复策略:从剩余的输入中删除一个字符;向剩余的输入中插入一个遗漏的字符;用一个字符来替换另一个字符;交换两个相邻的字符

Last updated