我更新了一版cmake,希望能简化构建流程,现在基本上你只需要确保你安装了java就好了(见0.依赖环境准备)。
在项目根目录
mkdir build && cd build
cmake ../
make
在build目录中
./MyCompiler ../test/simple.c
你可以修改cmakelist更改可执行文件名,../test/simple.c可以更换为任意待测文件。
它现在还是个小废物,你可以在 src/frontend/astVisitor.hpp
中看到我实现了哪些访问器。
而且我还没有实现 src/frontend/ast.hpp
中的所有节点,所以你可以在 src/frontend/astVisitor.hpp
中看到我实现了哪些节点。
还有它非常易错,好像连加法都做不了,如果你测试的时候发现了问题,请提 issue。
后面typer访问的时候会用到它,所以我先实现了它。具体的实现可以看 src/frontend/ast.hpp
。
祝我们成功!
ANTLR 工具需要 JVM 才能执行;另一方面,为了方便使用 grun,你需要一个能够编译 java 源文件的环境。因此,你需要一个完整的 Java Development Kit。
直接使用包管理器安装
apt install openjdk-19-jdk
你需要从 ANTLR Download 下载 antlr-4.13.1-complete.jar
。我这里直接放在仓库里了
然后,你需要将该jar包的路径加入到环境变量 CLASSPATH
中,注意改下你的路径
export CLASSPATH=".:/path/to/your/antlr-4.13.1-complete.jar:$CLASSPATH"
最好将它加到.bashrc中(对于bash)
可以定义别名 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
,以节省你配置和使用的时间。
这是c语言的词法和语法的定义,我已经放入了现有的实现C.g4
antlr4 -Dlanguage=Cpp C.g4 -visitor
antlr4 默认生成listener,但我猜我们需要visitor,注意大小写敏感
这里标志着中端实际意义上的开始,尽管现在我们的中端唯一的任务是把树print出来
你可以看一下我的main.cpp代码
但愿我已经编译好的antlr runtime (在local路径下)能在你机器上跑起来,用下面指令生成
g++ -o MyCompiler *.cpp -I ./local/include/antlr4-runtime -lantlr4-runtime
./MyCompiler <simple.c>
到这里就将simple.c的抽象语法树打印出来了 要有问题可能要重新编译?最后该写个cmake吧,我去吃饭了,:smile_cat: