decaf-doc
  • Introduction
  • pa1a
    • 实验内容
    • lalr1使用指导
      • 编写lexer
      • impl块的可选属性
      • 产生式和语法动作
      • 解决冲突
      • 一个完整的例子
    • 抽象语法树
    • 框架中部分实现的解释
    • 文件结构
  • pa1b
    • 实验内容
    • lalr1使用指导
    • 错误恢复
    • 文件结构
  • pa2
    • 实验内容
    • 语义分析
    • 符号表
    • 语句的返回类型
    • visitor模式
    • 框架中部分实现的解释
  • pa3
    • 实验内容
    • 中间代码
    • 中间代码中的类型信息
    • 运行时存储布局
    • 面向对象机制
    • tacvm介绍
  • pa4
    • 实验内容
    • 基本块
    • 数据流分析概述
    • 数据流优化概述
    • 公共表达式提取
    • 复写传播
    • 常量传播
    • 死代码消除
  • pa5
    • 实验内容
    • 图着色基本原理
    • 改进干涉图节点
    • 着色算法
    • 预着色节点
    • 干涉图节点合并
    • 调用约定
Powered by GitBook
On this page

Was this helpful?

  1. pa1a

实验内容

Previouspa1aNextlalr1使用指导

Last updated 5 years ago

Was this helpful?

虽然我们在课堂上花了很多篇幅来讲解parser和lexer的手动构造,但实际上已经有大量成熟的parser generator存在,很多时候我们并不手动实践这些原理,只需要直接利用这些工具即可。

不同于大家可能已经听说过或者使用过的lex/flex/yacc/bison等工具,本阶段的实验基于一个我写的parser generator 来完成。这个工具可能还远没有到达成熟的地步,有可能其中还存在影响使用的bug,希望大家积极报告。

(为避免混淆,这里先声明,lalr1指的是parser generator的名字,lalr(1)指的是文法种类)

框架中已经实现了decaf语言规范中的所有基本语法,大家的任务是在此基础上实现我们要求的新语法,新语法具体细节可以参考专门的文档。如果有什么特别需要注意的地方,之后会在这里补充。

lalr1