词法单元、模式、词素
Last updated
Last updated
读入字符流,组成词素,输出词法单元序列
过滤空白、换行、制表符、注释等
将词素添加到符号表中
独立的词法分析器可以简化编译器的设计,词法分析器可以首先完成一些简单的处理工作。模块化设计,增强编译器的可移植性。
<词法单元名,属性值>
词法单元名是表示词法单位种类的抽象符号,语法分析器通过单元名即可确定词法单元序列的结构。属性值通常用于语义分析之后的阶段。
描述了一类词法单元的词素可能具有的形式
源程序中的字符序列,它和某个词法单元的模式匹配,被词法分析器识别为该词法单元的实例。
一个模式匹配多个词素时,必须通过属性来传递附加的信息,属性值将被用于语义分析、代码生成等阶段
不同的目的需要不同的属性,属性值通常是一个结构化数据(包含多种信息)
如词法单元id
的属性,包括{id内容、类型、第一次出现的位置、…}
(或存放于符号表中,属性为符号表条目链接)
没有其他组件的帮助,词法分析器很难发现源代码中的错误,比如fi(a==f(x))
,fi
是关键词if
的误写还是一个函数标识符?返回id
词法单元给语法分析器处理。
所有模式都无法和剩余输入的某个前缀匹配:
词法分析器不能继续处理输入
错误恢复策略:从剩余的输入中删除一个字符;向剩余的输入中插入一个遗漏的字符;用一个字符来替换另一个字符;交换两个相邻的字符