From 557d60d5df5258a29ce964fac1f5ffdc625dcb2a Mon Sep 17 00:00:00 2001 From: Chimrod <> Date: Fri, 22 Sep 2023 18:51:45 +0200 Subject: Correction in precedence order --- lib/grammar.txt | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/tokens.mly | 2 +- 2 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 lib/grammar.txt (limited to 'lib') 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 diff --git a/lib/tokens.mly b/lib/tokens.mly index 7f907a3..7720440 100644 --- a/lib/tokens.mly +++ b/lib/tokens.mly @@ -51,13 +51,13 @@ in favor of shifting. (* Exclamation should have the lower priority because the comments shall never take place of the statements *) -%right EXCLAMATION %right NO (* The priority for the variable should be lower than the equality priority if I want to allow declare new variables *) %nonassoc p_variable %left AND OR %right EQUAL GT LT GTE LTE +%right EXCLAMATION %left PLUS MINUS %left STAR DIV %left MOD -- cgit v1.2.3