summaryrefslogtreecommitdiff
path: root/chapter14
diff options
context:
space:
mode:
Diffstat (limited to 'chapter14')
-rw-r--r--chapter14/docs/14-grammar.md35
1 files changed, 29 insertions, 6 deletions
diff --git a/chapter14/docs/14-grammar.md b/chapter14/docs/14-grammar.md
index 65611618..4534684d 100644
--- a/chapter14/docs/14-grammar.md
+++ b/chapter14/docs/14-grammar.md
@@ -1,4 +1,4 @@
-# Grammar for Chapter 13
+# Grammar for Chapter 14
```antlrv4
grammar SimpleLanguage;
@@ -20,8 +20,23 @@ statement
| metaStatement
;
+type
+ : 'int'
+ | 'i8'
+ | 'i16'
+ | 'i32'
+ | 'i64'
+ | 'u8'
+ | 'u16'
+ | 'u32'
+ | 'flt'
+ | 'f32'
+ | 'f64'
+ | 'bool'
+ ;
+
field
- : 'int' IDENTIFIER ';'
+ : type IDENTIFIER ';'
;
fields
@@ -66,7 +81,7 @@ structName
;
declStatement
- : 'int' IDENTIFIER '=' expression ';'
+ : type IDENTIFIER '=' expression ';'
| structName IDENTIFIER ('?')? '=' expression ';'
;
@@ -75,19 +90,27 @@ returnStatement
;
expression
- : comparisonExpression
+ : bitWiseExpression
;
+bitWiseExpression
+ : comparisonExpression ( '&' | '|' | '^' ) comparisonExpression)*
+ ;
+
comparisonExpression
- : additiveExpression (('==' | '!='| '>'| '<'| '>='| '<=') additiveExpression)*
+ : shiftExpression (('==' | '!='| '>'| '<'| '>='| '<=') shiftExpression)*
;
+shiftExpression
+ : additiveExpression ( '<<' | '>>>' | '>>' ) additiveExpression)*
+ ;
+
additiveExpression
: multiplicativeExpression (('+' | '-') multiplicativeExpression)*
;
multiplicativeExpression
- : unaryExpression (('*' | '/') unaryExpression)*
+ : unaryExpression (('*' | '|') unaryExpression)*
;
unaryExpression