编译原理
  • 编译原理
  • 一些简答题
  • 绪论
    • 编译器简介
    • 程序设计语言
    • 静态与动态
    • 参数传递机制
  • 词法分析
    • 词法单元、模式、词素
    • 串和语言
    • 正则表达式
    • 状态转换图
    • 不确定有穷自动机NFA
    • 确定有穷自动机DFA
    • 算法:正则表达式转NFA
    • 自动机到词法分析器
  • 语法分析
    • 语法分析器
    • 上下文无关文法
    • 二义性和左递归
    • 递归下降语法分析
    • 算法:求解FIRST集和FOLLOW集
    • 算法:LL(1)
    • 自底向上语法分析
    • 移入-归约语法分析
    • 算法:LR(0)
    • 算法:SLR(1)
    • 算法:LR(1)
    • 算法:LALR
    • LR分析器和LALR分析器
  • 语法制导
    • 语法制导定义(SDD)
    • 综合属性和继承属性
    • 语法树上的SDD求值
    • 依赖图
    • L属性的SDD
    • 类型
    • SDD的应用
  • 中间代码生成
    • 三地址代码
    • SSA(静态单赋值)
    • 类型和声明
    • 表达式的翻译
    • 类型检查
    • 控制流
    • 回填
  • 运行时刻环境
    • 存储组织
    • 栈式分配
    • 栈中非局部数据的访问
    • 堆管理
    • 垃圾回收
  • 代码生成
    • 代码生成器的设计
    • 目标语言
    • 目标代码中的地址
    • 基本块和流图
    • 基本块的优化
Powered by GitBook
On this page
  • 词法分析器的作用
  • 词法单元(Token)
  • 模式(pattern)
  • 词素(lexeme)
  • 词法单元的属性
  • 词法错误
  1. 词法分析

词法单元、模式、词素

Previous参数传递机制Next串和语言

Last updated 4 months ago

词法分析器的作用

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

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

  • 将词素添加到符号表中

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

词法单元(Token)

<词法单元名,属性值>

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

模式(pattern)

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

词素(lexeme)

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

词法单元的属性

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

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

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

词法错误

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

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

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

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