Skip to content

Neisseri/Compiler-Competition

Repository files navigation

环境配置

-1.update

我更新了一版cmake,希望能简化构建流程,现在基本上你只需要确保你安装了java就好了(见0.依赖环境准备)。

构建命令

在项目根目录

mkdir build && cd build
cmake ../
make

测试方法

在build目录中

./MyCompiler ../test/simple.c

你可以修改cmakelist更改可执行文件名,../test/simple.c可以更换为任意待测文件。

技术文档

frontend

ast

它现在还是个小废物,你可以在 src/frontend/astVisitor.hpp 中看到我实现了哪些访问器。

而且我还没有实现 src/frontend/ast.hpp 中的所有节点,所以你可以在 src/frontend/astVisitor.hpp 中看到我实现了哪些节点。

还有它非常易错,好像连加法都做不了,如果你测试的时候发现了问题,请提 issue。

后面typer访问的时候会用到它,所以我先实现了它。具体的实现可以看 src/frontend/ast.hpp

祝我们成功!

typer

第一部分:antlr本体的安装

0.依赖环境准备

ANTLR 工具需要 JVM 才能执行;另一方面,为了方便使用 grun,你需要一个能够编译 java 源文件的环境。因此,你需要一个完整的 Java Development Kit。

直接使用包管理器安装

apt install openjdk-19-jdk

1.获取antlr

你需要从 ANTLR Download 下载 antlr-4.13.1-complete.jar。我这里直接放在仓库里了

然后,你需要将该jar包的路径加入到环境变量 CLASSPATH 中,注意改下你的路径

export CLASSPATH=".:/path/to/your/antlr-4.13.1-complete.jar:$CLASSPATH"

最好将它加到.bashrc中(对于bash)

2.3. antlr4 和 grun 工具

可以定义别名 antlr4 表示 ANTLR 工具,即

alias antlr4='java org.antlr.v4.Tool'

这样,你可以直接使用 antlr4 your.g4 来为your.g4 生成解析器源码。

ANTLR 的运行时库中还提供了一个灵活的测试工具 TestRig,它可以显示解析器如何匹配输入的许多相关信息。TestRig使用Java的反射机制来调用编译过的解析器。为了方便用户使用,ANTLR 提供了一个 grun 工具来使用 TestRig

grun 本质上是一个别名,可以定义如下:

alias grun='java org.antlr.v4.runtime.misc.TestRig'

alias grun='java org.antlr.v4.gui.TestRig'

同样的,你可以将这些别名命令加入到.bashrc,以节省你配置和使用的时间。

第二部分:antlr runtime的编译链接

0.编写C.g4

这是c语言的词法和语法的定义,我已经放入了现有的实现C.g4

1.生成parser和lexer

antlr4 -Dlanguage=Cpp C.g4 -visitor

antlr4 默认生成listener,但我猜我们需要visitor,注意大小写敏感

2.编写入口main函数

这里标志着中端实际意义上的开始,尽管现在我们的中端唯一的任务是把树print出来

你可以看一下我的main.cpp代码

3.编译运行

但愿我已经编译好的antlr runtime (在local路径下)能在你机器上跑起来,用下面指令生成

g++ -o MyCompiler *.cpp -I ./local/include/antlr4-runtime -lantlr4-runtime
./MyCompiler <simple.c>

到这里就将simple.c的抽象语法树打印出来了 要有问题可能要重新编译?最后该写个cmake吧,我去吃饭了,:smile_cat:

About

编原大实验

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •