summaryrefslogtreecommitdiff
path: root/Compiler/CGrammar.g4
diff options
context:
space:
mode:
authorMelodi <62381002+Melodi17@users.noreply.github.com>2025-08-06 22:36:34 +1000
committerMelodi <62381002+Melodi17@users.noreply.github.com>2025-08-06 22:36:34 +1000
commit7a8d2bcd75d88a5429937bf551878c55e1dcf0fd (patch)
tree81bc1f259fb8678513aa8b214df4ef72720bb585 /Compiler/CGrammar.g4
parent16f3cb74564cf7c19da6e13666c98aca36094716 (diff)
moved everything to seperate projects, and started compiler work + push and pop instructions added
Diffstat (limited to 'Compiler/CGrammar.g4')
-rw-r--r--Compiler/CGrammar.g450
1 files changed, 50 insertions, 0 deletions
diff --git a/Compiler/CGrammar.g4 b/Compiler/CGrammar.g4
new file mode 100644
index 0000000..69b2c0a
--- /dev/null
+++ b/Compiler/CGrammar.g4
@@ -0,0 +1,50 @@
+grammar CGrammar;
+
+ID: [a-zA-Z_][a-zA-Z0-9_]*;
+INT: [0-9]+;
+
+program
+ : function EOF
+ ;
+
+function
+ : 'int' ID '(' ')' '{' statement* '}'
+ ;
+
+statement
+ : 'return' expression ';' #returnStatement
+ ;
+
+expression
+ : '(' expression ')' #parenthesizedExpression
+
+ | '!' expression #notExpression
+ | '~' expression #invertExpression
+
+ | 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 #logicalAndExpression
+ | left=expression '||' right=expression #logicalOrExpression
+
+ | constant #constantExpression
+ ;
+
+constant
+ : INT # intConstant
+ ; \ No newline at end of file