aboutsummaryrefslogtreecommitdiff
path: root/GRAMMAR.txt
diff options
context:
space:
mode:
Diffstat (limited to 'GRAMMAR.txt')
-rw-r--r--GRAMMAR.txt23
1 files changed, 23 insertions, 0 deletions
diff --git a/GRAMMAR.txt b/GRAMMAR.txt
new file mode 100644
index 0000000..a44e086
--- /dev/null
+++ b/GRAMMAR.txt
@@ -0,0 +1,23 @@
+root -> toplevel*
+toplevel -> function
+
+function -> "func" IDENTIFIER "(" param? ")" IDENTIFIER block
+param -> IDENTIFIER IDENTIFIER ( "," param )?
+
+block -> "{" ( statement )* "}"
+
+statement -> ( return ) ";"
+return -> "return" expression
+
+expression -> equality
+equality -> comparison ( ( "==" | "!=" ) comparison )*
+comparison -> term ( ( "<" | "<=" | ">" | ">=" ) term )?
+term -> numeral ( ( "<<" | ">>" ) numeral )*
+numeral -> factor ( ( "+" | "-" ) factor )*
+factor -> unary ( ( "*" | "/" ) unary )*
+unary -> ( "-" | "!" | "~" )? primary
+primary -> grouping | literal
+grouping -> "(" expression ")"
+literal -> string | number
+string -> STRING*
+number -> IDENTIFIER "(" NUMBER ")"