📄 simplec.g
字号:
grammar SimpleC;options { output=AST; language=ObjC;}tokens { VAR_DEF; ARG_DEF; FUNC_HDR; FUNC_DECL; FUNC_DEF; BLOCK;}program : declaration+ ;declaration : variable | functionHeader ';' -> ^(FUNC_DECL functionHeader) | functionHeader block -> ^(FUNC_DEF functionHeader block) ;variable : type declarator ';' -> ^(VAR_DEF type declarator) ;declarator : ID ;functionHeader : type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' -> ^(FUNC_HDR type ID formalParameter+) ;formalParameter : type declarator -> ^(ARG_DEF type declarator) ;type : 'int' | 'char' | 'void' | ID ;block : lc='{' variable* stat* '}' -> ^(BLOCK[$lc,"BLOCK"] variable* stat*) ;stat: forStat | expr ';'! | block | assignStat ';'! | ';'! ;forStat : 'for' '(' start=assignStat ';' expr ';' next=assignStat ')' block -> ^('for' $start expr $next block) ;assignStat : ID EQ expr -> ^(EQ ID expr) ;expr: condExpr ;condExpr : aexpr ( ('=='^ | '<'^) aexpr )? ;aexpr : atom ( '+'^ atom )* ;atom : ID | INT | '(' expr ')' -> expr ; FOR : 'for' ;INT_TYPE : 'int' ;CHAR: 'char';VOID: 'void';ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;INT : ('0'..'9')+ ;EQ : '=' ;EQEQ : '==' ;LT : '<' ;PLUS : '+' ;WS : ( ' ' | '\t' | '\r' | '\n' )+ { $channel=99; } ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -