diff options
| author | Melodi <62381002+Melodi17@users.noreply.github.com> | 2026-03-17 20:49:22 +1000 |
|---|---|---|
| committer | Melodi <62381002+Melodi17@users.noreply.github.com> | 2026-03-17 20:49:22 +1000 |
| commit | 18868128e18d38b706e7df14e8e683e1a9739c17 (patch) | |
| tree | 6f0e0e5eee646f10cbad9c0c89c24d330bc58cc6 /Compiler/CGrammar.g4 | |
| parent | d87ab8af4c86a3fc6ee237444e372d87e536e3ef (diff) | |
chore: Initial commit
Diffstat (limited to 'Compiler/CGrammar.g4')
| -rw-r--r-- | Compiler/CGrammar.g4 | 133 |
1 files changed, 0 insertions, 133 deletions
diff --git a/Compiler/CGrammar.g4 b/Compiler/CGrammar.g4 deleted file mode 100644 index 4bb1342..0000000 --- a/Compiler/CGrammar.g4 +++ /dev/null @@ -1,133 +0,0 @@ -grammar CGrammar; - -options { - contextSuperClass = Q1.Compiler.Context; -} - -HEX: '0x' [0-9a-fA-F]+; - -ID: [a-zA-Z_][a-zA-Z0-9_]*; -INT: [0-9]+; -WS: [ \t\r\n]+ -> skip; -COMMENT: '//' .*? ([\n] | EOF) -> channel(HIDDEN); -DIRECTIVE: '#' .*? ([\n] | EOF) -> channel(HIDDEN); - -LETTER: '\'' . '\''; -STRING: '"' .*? '"'; - -program - : function+ EOF - ; - -function - : rtype=type name=ID '(' ( types+=type params+=ID (',' types+=type params+=ID )* )? ')' ';' #functionPrototype - | rtype=type name=ID '(' ( types+=type params+=ID (',' types+=type params+=ID )* )? ')' block #functionDefinition - ; - -block - : '{' block_item* '}' - ; - -block_item - : statement - | declaration - ; - -statement - : 'return' expression ';' #returnStatement - | 'if' '(' expression ')' then=statement ('else' else=statement)? #ifStatement - | 'for' '(' (initializer=expression)? ';' cond=expression? ';' post=expression? ')' body=statement #forExprStatement - | 'for' '(' initializer=declaration cond=expression? ';' post=expression? ')' body=statement #forDeclStatement - | 'while' '(' cond=expression ')' body=statement #whileStatement - | 'do' body=statement 'while' '(' cond=expression ')' ';' #doWhileStatement - | 'break' ';' #breakStatement - | 'continue' ';' #continueStatement - | expression ';' #expressionStatement - | block #blockStatement - | ';' #nullStatement - ; - - -declaration - : type name=ID ('=' value=expression)? ';' #variableDeclaration - ; - -expression - : '(' expression ')' #parenthesizedExpression -// | left=expression ',' right=expression #commaExpression - | 'new' type '[' INT? ']' ('{' ( params+=expression (',' params+=expression )* )? '}')? #arrayExpression - | constant #constantExpression - | target '=' expression #assignmentExpression - | '*' expression #dereferenceExpression - | '&' target #addressOfExpression - | ID #variableExpression - - | ID '(' ( params+=expression (',' params+=expression )* )? ')' #callExpression - | obj=target '[' indexer=expression ']' #indexExpression - - | '!' expression #notExpression - | '~' expression #invertExpression - - | '++' target #incrementPrefixExpression - | '--' target #decrementPrefixExpression - | target '++' #incrementPostfixExpression - | target '--' #decrementPostfixExpression - - | left=expression '*' right=expression #multiplyExpression - | left=expression '/' right=expression #divideExpression - | left=expression '%' right=expression #modulusExpression - - | left=expression '+' right=expression #addExpression - | left=expression '-' right=expression #subtractExpression - - | left=expression '<' right=expression #lessThanExpression - | left=expression '>' right=expression #greaterThanExpression - | left=expression '<=' right=expression #lessThanOrEqualExpression - | left=expression '>=' right=expression #greaterThanOrEqualExpression - | left=expression '==' right=expression #equalExpression - | left=expression '!=' right=expression #notEqualExpression - - | left=expression '&' right=expression #bitwiseAndExpression - | left=expression '|' right=expression #bitwiseOrExpression - | left=expression '^' right=expression #bitwiseXorExpression - - | left=expression '<<' right=expression #bitwiseLeftShiftExpression - | left=expression '>>' right=expression #bitwiseRightShiftExpression - - | left=expression '&&' right=expression #logicalAndExpression - | left=expression '||' right=expression #logicalOrExpression - - | target '*=' expression #compoundMultiplyExpression - | target '/=' expression #compoundDivideExpression - | target '%=' expression #compoundModulusExpression - - | target '+=' expression #compoundAddExpression - | target '-=' expression #compoundSubtractExpression - - | target '&=' expression #compoundBitwiseAndExpression - | target '|=' expression #compoundBitwiseOrExpression - | target '^=' expression #compoundBitwiseXorExpression - - | target '<<=' expression #compoundBitwiseLeftShiftExpression - | target '>>=' expression #compoundBitwiseRightShiftExpression - - | cond=expression '?' then=expression ':' else=expression #ternaryExpression - ; - -constant - : INT # intConstant - | HEX # hexConstant - | LETTER # charConstant - | STRING # stringConstant - ; - -type - : 'int' - | 'char' - | type '*' - ; - -target - : ID # variableTarget - | obj=target '[' indexer=expression ']' #indexerTarget - ;
\ No newline at end of file |
