Skip to content

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

71 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C-- Compiler

基于 Flex、Bison 和 C 实现的 C-- 编译器课程项目。

当前能力

Stage 02:已完成类型系统、符号表和错误类型 1--17 的语义检查,并已接入解析器;符号表还支持选做 2.2 的嵌套作用域。

默认调用 parser 执行实验二语义检查:正确程序不输出,错误程序只输出对应的 Error type 信息。传入 --tree 时保留实验一行为,按先序遍历打印语法树。

当前实现覆盖基础文法,并实现八/十六进制整数、指数形式浮点数及 //、/* ... */ 注释支持。

依赖

  • C 编译器:gcc
  • 词法分析器生成器:flex
  • 语法分析器生成器:bison
  • 构建工具:make

快速开始

构建

make

该命令生成 build/parser,并在项目根目录创建 ./parser 入口。

运行

./parser path/to/source.cmm
./parser --tree path/to/source.cmm

默认模式执行语义分析;--tree 模式按先序遍历输出实验一语法树。

测试

make test-01  # 实验一:词法、语法与语法树测试
make test-02  # 实验二:类型、符号表与语义检查测试
make test     # 运行全部阶段测试

各目标的职责如下:

命令 测试范围 说明
make test-01 Stage 01 样例 词法、语法与语法树输出
make test-02 Stage 02 单元测试与样例 类型、符号表与语义检查
make test 全部测试 依次运行两个阶段

样例路径与判定规则见实验一测试说明和实验二测试说明。

模块说明

模块 主要职责 说明文档
src/frontend/lexer.l 将字符流转换为 token,处理数值、注释与词法错误 词法分析器
src/frontend/syntax.y 按文法归约、处理优先级和语法错误恢复 语法分析器
src/frontend/tree.c、tree.h 创建、连接、打印和释放语法树 语法树
src/driver/main.c 打开输入文件、驱动解析并决定输出与退出码 语法分析器中的流程说明
src/semantic/type.c、type.h 表示基础类型、数组、结构体和函数类型,并判断类型等价 类型系统
src/semantic/symbol.c、symbol.h 维护变量、函数和结构体符号,支持嵌套作用域 符号表
src/semantic/semantic.c、semantic.h 遍历 AST、进行类型检查并输出错误类型 1--17 语义分析
tests/run_tests.sh 执行清单中的端到端样例,并校验退出码与输出 测试说明
tests/stage-01/ 保存实验一样例、清单与说明 实验一测试
tests/stage-02/ 运行类型、符号表和端到端语义回归测试 实验二测试

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages