summaryrefslogtreecommitdiff
path: root/Compiler/CGrammar.g4
diff options
context:
space:
mode:
authorMelodi <62381002+Melodi17@users.noreply.github.com>2026-03-17 20:49:22 +1000
committerMelodi <62381002+Melodi17@users.noreply.github.com>2026-03-17 20:49:22 +1000
commit18868128e18d38b706e7df14e8e683e1a9739c17 (patch)
tree6f0e0e5eee646f10cbad9c0c89c24d330bc58cc6 /Compiler/CGrammar.g4
parentd87ab8af4c86a3fc6ee237444e372d87e536e3ef (diff)
chore: Initial commit
Diffstat (limited to 'Compiler/CGrammar.g4')
-rw-r--r--Compiler/CGrammar.g4133
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