可以处理生成加法的IR

This commit is contained in:
jing
2025-12-28 18:44:48 +08:00
parent 77bee889d7
commit e941cced9b
42 changed files with 919 additions and 158 deletions

View File

@@ -1,35 +1,73 @@
// SysY 子集语法:支持形如
// int main() { int a = 1; int b = 2; return a + b; }
// 的最小返回表达式编译。
// 后续需要自行添加
grammar SysY;
// 说明:
// - 这是一个“最小可用”的 SysY.g4用于避免空文件导致的 ANTLR 解析报错。
// - 后续请按 SysY 语言规范逐步补全 lexer/parser 规则。
// - 本工程约定ANTLR 生成的 C++ 源码/头文件不进入仓库,统一生成到构建目录(例如 build/generated/antlr4/)。
compUnit
: funcDef EOF
;
compilationUnit
: (statement)* EOF
;
funcDef
: Int Main L_PAREN R_PAREN block
;
statement
: 'return' expression? ';'
| ';'
;
block
: L_BRACE stmt* R_BRACE
;
expression
: IntegerLiteral
| Identifier
;
stmt
: varDecl
| returnStmt
;
// -------- lexer --------
varDecl
: Int Ident (Assign exp)? Semi
;
IntegerLiteral
: [0-9]+
;
returnStmt
: Return exp Semi
;
Identifier
: [a-zA-Z_] [a-zA-Z0-9_]*
;
exp
: addExp
;
Whitespace
: [ \t\r\n]+ -> skip
;
addExp
: primary (AddOp primary)*
;
primary
: Number
| Ident
| L_PAREN exp R_PAREN
;
Int : 'int';
Return : 'return';
Main : 'main';
AddOp : '+';
Assign : '=';
Semi : ';';
L_PAREN : '(';
R_PAREN : ')';
L_BRACE : '{';
R_BRACE : '}';
Ident
: [a-zA-Z_][a-zA-Z_0-9]*
;
Number
: [0-9]+
;
WS
: [ \t\r\n]+ -> skip
;
COMMENT
: '//' ~[\r\n]* -> skip
;