From 8ba262fea608ca9fdeb51fd409f157e89dd9d292 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E5=8A=9B=E5=98=89?= <929772356@qq.com> Date: Mon, 23 Mar 2026 18:58:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=A9=E5=B1=95=E6=B5=AE=E7=82=B9?= =?UTF-8?q?=E6=95=B0=E3=80=81=E6=95=B0=E7=BB=84=E8=AF=AD=E6=B3=95=E5=92=8C?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E5=8F=82=E6=95=B0=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/antlr4/SysY.g4 | 48 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/antlr4/SysY.g4 b/src/antlr4/SysY.g4 index 89ec4e4..5115f15 100644 --- a/src/antlr4/SysY.g4 +++ b/src/antlr4/SysY.g4 @@ -69,6 +69,35 @@ fragment HEX_LITERAL : '0' ('x' | 'X') [0-9a-fA-F]+ ; +// 浮点字面量 +FLITERAL + : (DECIMAL_FLOAT | HEX_FLOAT) + ; + +fragment DECIMAL_FLOAT + : (('+' | '-')? (DIGIT+ '.' DIGIT* | '.' DIGIT+ | DIGIT+) + (('E' | 'e') ('+' | '-')? DIGIT+)?) + | (('+' | '-')? '0' [0-7]+ '.' [0-7]* + (('E' | 'e') ('+' | '-')? DIGIT+)?) + ; + +fragment HEX_FLOAT + : ('+' | '-')? '0' ('x' | 'X') + (HEXDIGIT* '.' HEXDIGIT+ | HEXDIGIT+ '.') + (('P' | 'p') ('+' | '-')? DIGIT+) + | ('+' | '-')? '0' ('x' | 'X') + HEXDIGIT+ + (('P' | 'p') ('+' | '-')? DIGIT+) + ; + +fragment DIGIT + : [0-9] + ; + +fragment HEXDIGIT + : [0-9a-fA-F] + ; + // 空白和注释 WS: [ \t\r\n] -> skip; LINECOMMENT: '//' ~[\r\n]* -> skip; @@ -102,19 +131,20 @@ btype ; constDef - : ID ASSIGN initValue + : ID (LBRACK exp RBRACK)* ASSIGN initValue ; varDef - : ID (ASSIGN initValue)? + : ID (LBRACK exp RBRACK)* (ASSIGN initValue)? ; initValue : exp + | LBRACE (initValue (COMMA initValue)*)? RBRACE ; funcDef - : funcType ID LPAREN RPAREN blockStmt + : funcType ID LPAREN (funcFParams)? RPAREN blockStmt ; funcType @@ -123,6 +153,14 @@ funcType | VOID ; +funcFParams + : funcFParam (COMMA funcFParam)* + ; + +funcFParam + : btype ID (LBRACK (exp)? RBRACK)* + ; + blockStmt : LBRACE blockItem* RBRACE ; @@ -147,9 +185,11 @@ exp ; lValue - : ID + : ID (LBRACK exp RBRACK)* ; number : ILITERAL + | FLITERAL ; +