跳转至

实验概述

在本次实验中, 你将要完成 SDT 风格的语义分析与 IR 生成.

这两个过程作为观察者被注册到语法分析器中, 其特定方法在语法分析执行特定动作时被调用, 同时获得动作的相关信息. 在语义分析中, 你需要在遇到每次声明的时候, 于符号表中记录每个标识符的类型信息. 在 IR 生成中, 你需要在遇到不同语法产生式时执行不同动作, 产生 IR (中间表示) 指令列表.

中间表示的代码实现已为你写好.

输入/输出

本实验中的程序需要读入下面的文件:

tree data/in --sort=name
data/in
├── coding_map.csv      # 码点文件
├── grammar.txt         # 语法文件
├── input_code.txt      # 输入代码
└── LR1_table.csv       # (可选) 第三方工具生成的 IR 分析表

它将会生成下面的文件:

tree data/out --sort=name
data/out
├── intermediate_code.txt   # 中间表示
├── ir_emulate_result.txt   # 中间表示的模拟执行的结果
├── parser_list.txt         # 规约过程的产生式列表
├── new_symbol_table.txt    # 语义分析后的符号表
├── old_symbol_table.txt    # 语义分析前的符号表
└── token.txt               # 词法单元流

输出的文件内容具体是什么可以参考 data/std 目录下的同名文件.