Project 1¶
Start up¶
参照 Project Zero,学习如何使用 git。
初始代码位于 https://github.com/sqlab-sustech/CS323-Compilers-2025F-Projects,git clone 后,切换到 project1-base 分支,然后创建属于你自己的分支,随后切换到你自己的分支下。
$ git clone https://github.com/sqlab-sustech/CS323-Compilers-2025F-Projects
$ cd CS323-Compilers-2025F-Projects
$ git checkout project1-base
$ git branch -C my-compiler
$ git checkout my-compiler
将该文件夹在 IDEA 中打开,目录结构应如下所示:

注意: 我们移除了 pom.xml,并且不再使用 Maven 进行依赖配置。
在最左上角的 "CS323-Compilers-2025F-Projects" 处右键,点击 "Open Module Settings" 打开 Project Structure 设置,切换到 Modules -> Dependencies,确认依赖列表中存在 "antlr-4.13.2-complete.jar" 文件。
如果没有,则点击加号添加 JAR libs/antlr-4.13.2-complete.jar。

随后,在 Splc.g4 中加入一条 Lexer Rule:
右键 Splc.g4,打开 "Configure ANTLR":
- Output Directory:
src/main/java - Package for the generated code:
generated.Splc
设置完成后,在右键菜单中执行 "Generate ANTLR Recognizer",在 src/main/java/generated/Splc 下应该会多出一个 Splc 类。
这时,运行 Main 类,你应该不会遇到 Java 的编译和运行时错误。(ANTLR 会报错,如果你的 Lexer Rules 还不完整)
Splc.g4¶
在 Project1 中,Splc.g4 的开头第一行是 lexer grammar Splc;,你可能会疑惑为什么这与课上其他例子(如 grammar Calc1;)不符。
这是因为在 Project1 中我们还没有接触到 Parser Rules ,这一行声明表示该文件仅包含 Lexer Rules,ANTLR 也只会生成一个 Lexer 类,并且它直接叫 Splc 而不是 SplcLexer:
ANTLR JAR & Source Code ZIP¶
我们在 Project 初始代码中提供了两个文件:libs/antlr-4.13.2-complete.jar 和 libs/antlr4-4.13.2.zip。
前者是 Java 运行时所需的 JAR 包,而后者是 ANTLR 的源代码。
同学们可能会有查看 ANTLR Runtime 里面具体代码的需求;若不携带源代码,IDEA 会调用反编译器对 JAR 包进行反编译;而直接提供源代码 zip 包可以让 IDEA 直接显示源代码,其中携带了更加完整的注释等信息。
方便复制¶
INT : 关键字 : int
CHAR : 关键字 : char
STRUCT : 关键字 : struct
RETURN : 关键字 : return
IF : 关键字 : if
ELSE : 关键字 : else
WHILE : 关键字 : while
ASSIGN: 赋值运算符 =
PLUS : 加号 +
MINUS : 减号 -
STAR : 乘号 *
DIV : 除号 /
MOD : 取模符号 %
LT : 小于号 <
LE : 小于等于号 <=
GT : 大于号 >
GE : 大于等于号 >=
EQ : 等于号 ==
NEQ : 不等号 !=
AND : 逻辑与 &&
OR : 逻辑或 ||
NOT : 逻辑非 !
INC : 自增符号 ++
DEC : 自减符号 --
DOT : 成员访问符 .
ARROW : 指针访问符 ->
AMP : 取地址符 &
SEMI : 分号 ;
COMMA : 逗号 ,
LPAREN: 左括号 (
RPAREN: 右括号 )
LBRACE: 左花括号 {
RBRACE: 右花括号 }
LBRACK: 左方括号 [
RBRACK: 右方括号 ]