aboutsummaryrefslogtreecommitdiff
path: root/lib/grammar.txt
diff options
context:
space:
mode:
Diffstat (limited to 'lib/grammar.txt')
-rw-r--r--lib/grammar.txt100
1 files changed, 100 insertions, 0 deletions
diff --git a/lib/grammar.txt b/lib/grammar.txt
new file mode 100644
index 0000000..d7208ef
--- /dev/null
+++ b/lib/grammar.txt
@@ -0,0 +1,100 @@
+location:
+ | LOCATION_START EOL*
+ line_statement*
+ LOCATION_END EOL*
+ EOF
+
+line_statement:
+ | COMMENT EOL+ // A comment
+ | COLUMN IDENT EOL* // A location
+ | instruction, line_sep
+ | inline_action line_sep
+ | ACT expression COLUMN EOL+ // ACT … END ACT
+ line_statement*
+ END ACT? // Yes you can have END or END ACT
+ line_sep
+ | IF expression COLUMN EOL+ // IF … END IF
+ line_statement*
+ elif*
+ else
+ END IF? // Yes you can have END or END IF
+ line_sep
+
+elif:
+ | ELIF
+ expression COLUMN EOL+
+ line_statement*
+
+else:
+ | ELSE EOL+
+ line_statement*
+ |
+
+line_sep:
+ | EOL+
+ | AMPERSAND+ EOL*
+
+
+instruction:
+ | expression
+ | let_assignation
+ | keyword argument(expression)
+
+keyword:
+ | STAR KEYWORD // A keyword starting with *
+ | KEYWORD
+
+let_assignation:
+ | assignation
+ variable
+ assignation_operator
+ expression
+
+assignation:
+ |
+ | LET
+ | SET
+
+assignation_operator:
+ | EQUAL
+ | INCR // +=
+ | DECR // -=
+
+inline_action:
+ | ACT expression COLUMN // There is a recursive code here
+ | IF expression COLUMN // Because ACT: can contains an IF: etc
+ (ELSE, instruction)? // complicated to flatten here.
+
+expression:
+ | delimited(l_paren, expression, r_paren)
+ | unary_operator expression
+ | expression binary_operator expression
+ | literal
+ | integer
+ | variable
+ | function argument(expression)
+
+unary_operator:
+ | OBJ
+ | LOC
+ | NO
+ | MINUS
+ | PLUS
+
+binary_operator:
+ | EQUAL
+ | LT GT // Different
+ | EXCLAMATION // Neg, not a comment here
+ | PLUS
+ | MINUS
+ | STAR // Not the first char of keyword here
+ | DIV
+ | MOD
+ | GT
+ | LT
+ | GT EQUAL
+ | LT EQUAL
+ | EQUAL GT // Alternative syntax
+ | EQUAL LT // Alternative syntax
+ | AND
+ | OR