RaidenE1 / SysY-Compiler

Code for Compiling Theroms in 2021fall, College of Software, BUAA

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SysY-Compiler

北京航空航天大学软件学院1921级编译原理课程实验

简介

本项目采用python语言编写,使用PLY进行词法分析和语法分析,构建的一种类C语言的编译器。只处理前端代码到LLVM IR的部分,目的是生成可以正确解释的LLVM IR文件。

实验要求参见此处

评测机地址戳戳

说明

  • src 目录下是整个编译器完整的代码
  • libsysy 目录下是SysY语言需要链接的库
  • 具体测试,包括Dockerfilejudge.toml的编写要求可以参照 test 目录下的说明
  • 其中Labs目录下是每一次实验的代码,经过多次重构和迭代,功能可能有所重复,但可以对照实验需求观察迭代的过程。

代码结构:

├── src
   ├── main.py // 函数的入口以及主体部分,包括读取文件、处理代码、生成IR文件和输出
   ├── parser_modules.py // yacc的构建和语法规则
   ├── tokrules.py // 关于lexer识别token的正则表达式以及错误处理
   ├── ast_modules.py // 语法树的节点类
   ├── Dockerfile // 评测时构建镜像的依赖,参考 /test/ 下的说明
   ├── judge.toml // 测评的依据,参考 /test/ 下的说明
├── libsysy // 库函数
   ├── libsysy.c
   ├── libsysy.h

运行项目

环境配置

要运行本项目,首先要有 Python 环境,并安装 Ply 库:

pip install ply

推荐在 Ubuntu/MacOS 环境上执行,并安装 llvm 工具链。Ubuntu 20.04 的安装命令如下:

$ sudo apt-get install llvm
$ sudo apt-get install clang

安装完成后可以通过以下命令进行测试:

$ clang -v # 查看版本,若出现版本信息则说明安装成功 $ lli --version # 查看版本,若出现版本信息则说明安装成功

其他

课程大作业里面的Bug可能很多,代码写的也很乱,功能方面也不是十分完善,但之后不打算进行任何维护。

归档

参考文档

PLY的说明文档参见此处

LLVM IR 参考:LLVM Lang Ref & LLVM Programmer Manual

About

Code for Compiling Theroms in 2021fall, College of Software, BUAA


Languages

Language:Python 99.5%Language:Dockerfile 0.4%Language:C 0.2%