By
TheDcoder
Hello, many of you already know I'm working on a new programming language and I need some help to figure out an issue in the parser. I'm posting it here with the hope that someone knowledgeable enough can point out the solution and to also document this issue as I may forget the details if I don't make progress and set it aside.
Here's the parser:
/*
* This file is part of EasyCodeIt.
*
* Copyright (C) 2021 TheDcoder <TheDcoder@protonmail.com>
*
* EasyCodeIt is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
%define parse.trace
%code requires {
#define _GNU_SOURCE /* Required to enable (v)asprintf */
#include <stdbool.h>
#include "parser/tree.h"
#include "parser/parser_internal.h"
}
%union {
double num;
struct {
char *str;
size_t len;
} str;
bool boolean;
struct Expression expr;
struct ExpressionList expr_list;
}
%token UNKNOWN
%token WS
%token NL '\n'
%token COMMENT
%token DIRECTIVE
%token <num> NUMBER
%token <str> STRING
%token <boolean> BOOL
%token <str> WORD
%token <str> MACRO
%token <str> VARIABLE
%token OPERATOR
%token BRACKET
%token DOT
%token COMMA
/* Keywords */
%token K_DIM "Dim"
%token K_LOCAL "Local"
%token K_GLOBAL "Global"
%token K_ENUM "Enum"
%token K_CONST "Const"
%token K_STATIC "Static"
%token K_CONTINUE_CASE "ContinueCase"
%token K_CONTINUE_LOOP "ContinueLoop"
%token K_DEFAULT "Default"
%token K_NULL "Null"
%token K_DO "Do"
%token K_UNTIL "Until"
%token K_WHILE "While"
%token K_END_WHILE "WEnd"
%token K_FOR "For"
%token K_IN "In"
%token K_TO "To"
%token K_STEP "Step"
%token K_NEXT "Next"
%token K_EXIT "Exit"
%token K_EXITLOOP "ExitLoop"
%token K_FUNC "Func"
%token K_RETURN "Return"
%token K_END_FUNC "EndFunc"
%token K_IF "If"
%token K_ELSE "Else"
%token K_ELSE_IF "ElseIf"
%token K_END_IF "EndIf"
%token K_REDIM "ReDim"
%token K_SELECT "Select"
%token K_SWITCH "Switch"
%token K_CASE "Case"
%token K_END_SELECT "EndSelect"
%token K_END_SWITCH "EndSwitch"
/* Operators */
%precedence '?'
%precedence ':'
%left AND "And" OR "Or"
%left LT '<' GT '>' LTE "<=" GTE ">=" EQU '=' NEQ "<>" SEQU "=="
%left '&'
%left '+' '-'
%left '*' '/'
%left '^'
%left NOT "Not"
%precedence INVERSION
%precedence '.'
/* WORKAROUND: Bison can't handle "sandwich" operators which surround the 2nd part of a binary expression */
%precedence '['
%precedence '('
%precedence GROUPING
%type <expr> expression
%type <expr_list> expression_list
%{
int yylex();
void yyerror(const char *s);
%}
%%
top: /* nothing */
| expression_list {print_expr($1.expression);}
expression:
BOOL {$$ = expr_from_prim(&(struct Primitive){.type = PRI_BOOLEAN, .boolean = $1});}
| NUMBER {$$ = expr_from_prim(&(struct Primitive){.type = PRI_NUMBER, .number = $1});}
| STRING {$$ = expr_from_str($1.str, $1.len);}
| WORD {$$ = expr_from_ident($1.str, $1.len);}
| MACRO {$$ = expr_from_ident($1.str, $1.len);}
| VARIABLE {$$ = expr_from_ident($1.str, $1.len);}
| expression '?' expression ':' expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3, &$5}, 3, OP_CON);}
| expression "And" expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_AND);}
| expression "Or" expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_OR);}
| expression '<' expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_LT);}
| expression '>' expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_GT);}
| expression '=' expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_EQU);}
| expression "<=" expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_LTE);}
| expression ">=" expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_GTE);}
| expression "<>" expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_NEQ);}
| expression "==" expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_SEQU);}
| expression '&' expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_CAT);}
| expression '+' expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_ADD);}
| expression '-' expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_SUB);}
| expression '*' expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_MUL);}
| expression '/' expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_DIV);}
| expression '^' expression {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_EXP);}
| "Not" expression {$$ = expr_from_expr((struct Expression *[]){&$2}, 1, OP_NOT);}
| '-' expression %prec INVERSION {$$ = expr_from_expr((struct Expression *[]){&$2}, 1, OP_INV);}
/*| expression '.' WORD {$$ = expr_from_expr((struct Expression *[]){&$1, &(struct Expression){expr_from_ident($3.str, $3.len)}}, 2, OP_ACC);}*/
| expression '.' WORD {
struct Expression ident_expr = expr_from_ident($3.str, $3.len);
$$ = expr_from_expr((struct Expression *[]){&$1, &ident_expr}, 2, OP_ACC);
}
| expression '[' expression ']' {$$ = expr_from_expr((struct Expression *[]){&$1, &$3}, 2, OP_ACC);}
| expression '(' expression_list ')' {$$ = expr_from_call(&$1, &$3);}
| expression '(' ')' {$$ = expr_from_call(&$1, NULL);}
/* | expression '(' expression_list ')' %prec CALL {$$ = expr_from_call(&$1, &$3);}
| expression '(' ')' %prec CALL {$$ = expr_from_call(&$1, NULL);} */
| '(' expression ')' %prec GROUPING {$$ = $2;}
expression_list:
/* expression {$$ = (struct ExpressionList){.expression = , .list = NULL};}
| expression ',' expression_list {$$ = (struct ExpressionList){.expression = &$1, .list = &$3};} */
expression {$$ = exprlist_from_expr(&$1, NULL);}
/* | expression ',' expression_list {$$ = exprlist_from_expr(&$1, &$3);}
| expression '\n' expression_list {$$ = exprlist_from_expr(&$1, &$3);} */
| expression_list ',' expression {$$ = exprlist_from_expr(&$3, &$1);}
| expression_list '\n' expression {$$ = exprlist_from_expr(&$3, &$1);}
%%
#include "parser/parser.c"
And the "parser output" by Bison:
Terminals unused in grammar
UNKNOWN
WS
NL
COMMENT
DIRECTIVE
OPERATOR
BRACKET
DOT
COMMA
"Dim"
"Local"
"Global"
"Enum"
"Const"
"Static"
"ContinueCase"
"ContinueLoop"
"Default"
"Null"
"Do"
"Until"
"While"
"WEnd"
"For"
"In"
"To"
"Step"
"Next"
"Exit"
"ExitLoop"
"Func"
"Return"
"EndFunc"
"If"
"Else"
"ElseIf"
"EndIf"
"ReDim"
"Select"
"Switch"
"Case"
"EndSelect"
"EndSwitch"
AND
OR
LT
GT
LTE
GTE
EQU
NEQ
SEQU
NOT
Grammar
0 $accept: top $end
1 top: ε
2 | expression_list
3 expression: BOOL
4 | NUMBER
5 | STRING
6 | WORD
7 | MACRO
8 | VARIABLE
9 | expression '?' expression ':' expression
10 | expression "And" expression
11 | expression "Or" expression
12 | expression '<' expression
13 | expression '>' expression
14 | expression '=' expression
15 | expression "<=" expression
16 | expression ">=" expression
17 | expression "<>" expression
18 | expression "==" expression
19 | expression '&' expression
20 | expression '+' expression
21 | expression '-' expression
22 | expression '*' expression
23 | expression '/' expression
24 | expression '^' expression
25 | "Not" expression
26 | '-' expression
27 | expression '.' WORD
28 | expression '[' expression ']'
29 | expression '(' expression_list ')'
30 | expression '(' ')'
31 | '(' expression ')'
32 expression_list: expression
33 | expression_list ',' expression
34 | expression_list '\n' expression
Terminals, with rules where they appear
$end (0) 0
'\n' (10) 34
'&' (38) 19
'(' (40) 29 30 31
')' (41) 29 30 31
'*' (42) 22
'+' (43) 20
',' (44) 33
'-' (45) 21 26
'.' (46) 27
'/' (47) 23
':' (58) 9
'<' (60) 12
'=' (61) 14
'>' (62) 13
'?' (63) 9
'[' (91) 28
']' (93) 28
'^' (94) 24
error (256)
UNKNOWN (258)
WS (259)
NL (260)
COMMENT (261)
DIRECTIVE (262)
NUMBER <num> (263) 4
STRING <str> (264) 5
BOOL <boolean> (265) 3
WORD <str> (266) 6 27
MACRO <str> (267) 7
VARIABLE <str> (268) 8
OPERATOR (269)
BRACKET (270)
DOT (271)
COMMA (272)
"Dim" (273)
"Local" (274)
"Global" (275)
"Enum" (276)
"Const" (277)
"Static" (278)
"ContinueCase" (279)
"ContinueLoop" (280)
"Default" (281)
"Null" (282)
"Do" (283)
"Until" (284)
"While" (285)
"WEnd" (286)
"For" (287)
"In" (288)
"To" (289)
"Step" (290)
"Next" (291)
"Exit" (292)
"ExitLoop" (293)
"Func" (294)
"Return" (295)
"EndFunc" (296)
"If" (297)
"Else" (298)
"ElseIf" (299)
"EndIf" (300)
"ReDim" (301)
"Select" (302)
"Switch" (303)
"Case" (304)
"EndSelect" (305)
"EndSwitch" (306)
AND (307)
"And" (308) 10
OR (309)
"Or" (310) 11
LT (311)
GT (312)
LTE (313)
"<=" (314) 15
GTE (315)
">=" (316) 16
EQU (317)
NEQ (318)
"<>" (319) 17
SEQU (320)
"==" (321) 18
NOT (322)
"Not" (323) 25
INVERSION (324)
GROUPING (325)
Nonterminals, with rules where they appear
$accept (89)
on left: 0
top (90)
on left: 1 2
on right: 0
expression <expr> (91)
on left: 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
on right: 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
expression_list <expr_list> (92)
on left: 32 33 34
on right: 2 29 33 34
State 0
0 $accept: • top $end
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
$default reduce using rule 1 (top)
top go to state 10
expression go to state 11
expression_list go to state 12
State 1
4 expression: NUMBER •
$default reduce using rule 4 (expression)
State 2
5 expression: STRING •
$default reduce using rule 5 (expression)
State 3
3 expression: BOOL •
$default reduce using rule 3 (expression)
State 4
6 expression: WORD •
$default reduce using rule 6 (expression)
State 5
7 expression: MACRO •
$default reduce using rule 7 (expression)
State 6
8 expression: VARIABLE •
$default reduce using rule 8 (expression)
State 7
26 expression: '-' • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 13
State 8
25 expression: "Not" • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 14
State 9
31 expression: '(' • expression ')'
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 15
State 10
0 $accept: top • $end
$end shift, and go to state 16
State 11
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
32 expression_list: expression •
'?' shift, and go to state 17
"And" shift, and go to state 18
"Or" shift, and go to state 19
'<' shift, and go to state 20
'>' shift, and go to state 21
"<=" shift, and go to state 22
">=" shift, and go to state 23
'=' shift, and go to state 24
"<>" shift, and go to state 25
"==" shift, and go to state 26
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 32 (expression_list)
State 12
2 top: expression_list •
33 expression_list: expression_list • ',' expression
34 | expression_list • '\n' expression
'\n' shift, and go to state 36
',' shift, and go to state 37
$default reduce using rule 2 (top)
State 13
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
26 | '-' expression •
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 26 (expression)
State 14
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
25 | "Not" expression •
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 25 (expression)
State 15
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
31 | '(' expression • ')'
'?' shift, and go to state 17
"And" shift, and go to state 18
"Or" shift, and go to state 19
'<' shift, and go to state 20
'>' shift, and go to state 21
"<=" shift, and go to state 22
">=" shift, and go to state 23
'=' shift, and go to state 24
"<>" shift, and go to state 25
"==" shift, and go to state 26
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
')' shift, and go to state 38
State 16
0 $accept: top $end •
$default accept
State 17
9 expression: expression '?' • expression ':' expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 39
State 18
10 expression: expression "And" • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 40
State 19
11 expression: expression "Or" • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 41
State 20
12 expression: expression '<' • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 42
State 21
13 expression: expression '>' • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 43
State 22
15 expression: expression "<=" • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 44
State 23
16 expression: expression ">=" • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 45
State 24
14 expression: expression '=' • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 46
State 25
17 expression: expression "<>" • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 47
State 26
18 expression: expression "==" • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 48
State 27
19 expression: expression '&' • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 49
State 28
20 expression: expression '+' • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 50
State 29
21 expression: expression '-' • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 51
State 30
22 expression: expression '*' • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 52
State 31
23 expression: expression '/' • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 53
State 32
24 expression: expression '^' • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 54
State 33
27 expression: expression '.' • WORD
WORD shift, and go to state 55
State 34
28 expression: expression '[' • expression ']'
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 56
State 35
29 expression: expression '(' • expression_list ')'
30 | expression '(' • ')'
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
')' shift, and go to state 57
expression go to state 11
expression_list go to state 58
State 36
34 expression_list: expression_list '\n' • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 59
State 37
33 expression_list: expression_list ',' • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 60
State 38
31 expression: '(' expression ')' •
$default reduce using rule 31 (expression)
State 39
9 expression: expression • '?' expression ':' expression
9 | expression '?' expression • ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'?' shift, and go to state 17
':' shift, and go to state 61
"And" shift, and go to state 18
"Or" shift, and go to state 19
'<' shift, and go to state 20
'>' shift, and go to state 21
"<=" shift, and go to state 22
">=" shift, and go to state 23
'=' shift, and go to state 24
"<>" shift, and go to state 25
"==" shift, and go to state 26
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
State 40
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
10 | expression "And" expression •
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'<' shift, and go to state 20
'>' shift, and go to state 21
"<=" shift, and go to state 22
">=" shift, and go to state 23
'=' shift, and go to state 24
"<>" shift, and go to state 25
"==" shift, and go to state 26
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 10 (expression)
State 41
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
11 | expression "Or" expression •
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'<' shift, and go to state 20
'>' shift, and go to state 21
"<=" shift, and go to state 22
">=" shift, and go to state 23
'=' shift, and go to state 24
"<>" shift, and go to state 25
"==" shift, and go to state 26
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 11 (expression)
State 42
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
12 | expression '<' expression •
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 12 (expression)
State 43
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
13 | expression '>' expression •
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 13 (expression)
State 44
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
15 | expression "<=" expression •
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 15 (expression)
State 45
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
16 | expression ">=" expression •
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 16 (expression)
State 46
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
14 | expression '=' expression •
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 14 (expression)
State 47
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
17 | expression "<>" expression •
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 17 (expression)
State 48
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
18 | expression "==" expression •
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 18 (expression)
State 49
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
19 | expression '&' expression •
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 19 (expression)
State 50
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
20 | expression '+' expression •
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 20 (expression)
State 51
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
21 | expression '-' expression •
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 21 (expression)
State 52
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
22 | expression '*' expression •
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 22 (expression)
State 53
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
23 | expression '/' expression •
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 23 (expression)
State 54
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
24 | expression '^' expression •
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 24 (expression)
State 55
27 expression: expression '.' WORD •
$default reduce using rule 27 (expression)
State 56
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
28 | expression '[' expression • ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
'?' shift, and go to state 17
"And" shift, and go to state 18
"Or" shift, and go to state 19
'<' shift, and go to state 20
'>' shift, and go to state 21
"<=" shift, and go to state 22
">=" shift, and go to state 23
'=' shift, and go to state 24
"<>" shift, and go to state 25
"==" shift, and go to state 26
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
']' shift, and go to state 62
State 57
30 expression: expression '(' ')' •
$default reduce using rule 30 (expression)
State 58
29 expression: expression '(' expression_list • ')'
33 expression_list: expression_list • ',' expression
34 | expression_list • '\n' expression
'\n' shift, and go to state 36
')' shift, and go to state 63
',' shift, and go to state 37
State 59
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
34 expression_list: expression_list '\n' expression •
'?' shift, and go to state 17
"And" shift, and go to state 18
"Or" shift, and go to state 19
'<' shift, and go to state 20
'>' shift, and go to state 21
"<=" shift, and go to state 22
">=" shift, and go to state 23
'=' shift, and go to state 24
"<>" shift, and go to state 25
"==" shift, and go to state 26
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 34 (expression_list)
State 60
9 expression: expression • '?' expression ':' expression
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
33 expression_list: expression_list ',' expression •
'?' shift, and go to state 17
"And" shift, and go to state 18
"Or" shift, and go to state 19
'<' shift, and go to state 20
'>' shift, and go to state 21
"<=" shift, and go to state 22
">=" shift, and go to state 23
'=' shift, and go to state 24
"<>" shift, and go to state 25
"==" shift, and go to state 26
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 33 (expression_list)
State 61
9 expression: expression '?' expression ':' • expression
NUMBER shift, and go to state 1
STRING shift, and go to state 2
BOOL shift, and go to state 3
WORD shift, and go to state 4
MACRO shift, and go to state 5
VARIABLE shift, and go to state 6
'-' shift, and go to state 7
"Not" shift, and go to state 8
'(' shift, and go to state 9
expression go to state 64
State 62
28 expression: expression '[' expression ']' •
$default reduce using rule 28 (expression)
State 63
29 expression: expression '(' expression_list ')' •
$default reduce using rule 29 (expression)
State 64
9 expression: expression • '?' expression ':' expression
9 | expression '?' expression ':' expression •
10 | expression • "And" expression
11 | expression • "Or" expression
12 | expression • '<' expression
13 | expression • '>' expression
14 | expression • '=' expression
15 | expression • "<=" expression
16 | expression • ">=" expression
17 | expression • "<>" expression
18 | expression • "==" expression
19 | expression • '&' expression
20 | expression • '+' expression
21 | expression • '-' expression
22 | expression • '*' expression
23 | expression • '/' expression
24 | expression • '^' expression
27 | expression • '.' WORD
28 | expression • '[' expression ']'
29 | expression • '(' expression_list ')'
30 | expression • '(' ')'
"And" shift, and go to state 18
"Or" shift, and go to state 19
'<' shift, and go to state 20
'>' shift, and go to state 21
"<=" shift, and go to state 22
">=" shift, and go to state 23
'=' shift, and go to state 24
"<>" shift, and go to state 25
"==" shift, and go to state 26
'&' shift, and go to state 27
'+' shift, and go to state 28
'-' shift, and go to state 29
'*' shift, and go to state 30
'/' shift, and go to state 31
'^' shift, and go to state 32
'.' shift, and go to state 33
'[' shift, and go to state 34
'(' shift, and go to state 35
$default reduce using rule 9 (expression)
And finally a minimal reproduction of the issue I'm facing:
TheDcoder@arch /m/d/P/C/E/build (master)> eci 1\n2
Starting parse
Entering state 0
Stack now 0
Reading a token
Next token is token NUMBER ()
Shifting token NUMBER ()
Entering state 1
Stack now 0 1
Reducing stack by rule 4 (line 130):
$1 = token NUMBER ()
-> $$ = nterm expression ()
Entering state 11
Stack now 0 11
Reading a token
Next token is token NL ()
Reducing stack by rule 32 (line 168):
$1 = nterm expression ()
-> $$ = nterm expression_list ()
Entering state 12
Stack now 0 12
Next token is token NL ()
Reducing stack by rule 2 (line 126):
$1 = nterm expression_list ()
{
"op": "No Operation",
"args": [
1.0
]
}
-> $$ = nterm top ()
Entering state 10
Stack now 0 10
Next token is token NL ()
2: syntax error at
Error: popping nterm top ()
Stack now 0
Cleanup: discarding lookahead token NL ()
Stack now 0
Now I will explain the issue:
I am trying to parse several different expressions and construct an "expression list" from them, however my parser immediately reduces the first expression to the "top" rule, but what I want is for it to make an "expression_list" which combines the following expression which is separated by a NL.
This fact can be observed in the debug output from the reproduction script parse attempt, after the parser enters state 12 it immediately uses rule 2 to reduce to "top", but what we want is for it to use rule 34 and reduce to another "expression_list".
The reason why I think this happens is because the reduction to top simply consumes less tokens and satisfies the parser, and as far as I can tell there is no way to force Bison to be "greedy" when reducing an "expression_list".
So I'm unsure how to proceed further, I think we have to change the parser but I do not know how. I tried some silly things (like making another "super_top" non-terminal etc.) but those don't compile and produce a ton of conflicts 😕