aboutsummaryrefslogtreecommitdiff
path: root/res
diff options
context:
space:
mode:
authorFlavian Kaufmann <flavian@flaviankaufmann.ch>2025-05-21 07:45:30 +0200
committerFlavian Kaufmann <flavian@flaviankaufmann.ch>2025-05-21 07:45:30 +0200
commit5a90102b20d18966b69496d85361d14c085479db (patch)
treec44f7c89f84841131f248fbaf2f85bca13517c2f /res
parent40cccdb7cc472ee6300c25e1774a8489e9107f6a (diff)
downloadimp-5a90102b20d18966b69496d85361d14c085479db.tar.gz
imp-5a90102b20d18966b69496d85361d14c085479db.zip
syntax doc
Diffstat (limited to 'res')
-rw-r--r--res/syntax.ebnf47
1 files changed, 47 insertions, 0 deletions
diff --git a/res/syntax.ebnf b/res/syntax.ebnf
new file mode 100644
index 0000000..85990c5
--- /dev/null
+++ b/res/syntax.ebnf
@@ -0,0 +1,47 @@
+letter_uppercase = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M"
+ | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"
+ ;
+
+letter_lowercase = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m"
+ | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"
+ ;
+
+letter = letter_uppercase | letter_lowercase
+ ;
+
+digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
+ ;
+
+identifier = letter , { letter | digit }
+ ;
+
+numeral = digit | ( numeral , digit )
+ ;
+
+variable = identifier
+ ;
+
+arithmetic_operation = "+" | "-" | "*"
+ ;
+
+arithmetic_expression = ( "(" , arithmetic_expression , arithmetic_operation , arithmetic_expression , ")" )
+ | variable | numeral ;
+
+boolean_operation = "or" | "not"
+ ;
+
+relational_operation = "=" | "#" | "<" | "<=" | ">" | ">="
+ ;
+
+boolean_expression = ( "(" , boolean_expression , boolean_operation , boolean_expression , ")" )
+ | ( "not" , boolean_expression )
+ | ( arithmetic_expression , relational_operation , arithmetic_expression )
+ ;
+
+statement = "skip"
+ | ( variable , ":=" , arithmetic_expression )
+ | ( "(" , statement , ";" , "statement" , ")" )
+ | ( "if" , boolean_expression , "then" , statement , "else" , statement , "end" )
+ | ( "while" , boolean_expression , "do" , statement , "end" )
+ | ( "var" , variable , ":=", arithmetic_expression , "in" , statement , "end" )
+ ; \ No newline at end of file