aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChimrod <>2023-09-22 14:12:14 +0200
committerChimrod <>2023-09-22 14:12:14 +0200
commitbd9d82035b21c8b0695c18208827c184785398af (patch)
tree5c6b03d6a82155b867e5ec2ceecd260b8868579a /lib
first commit
Diffstat (limited to 'lib')
-rw-r--r--lib/analyzer.ml44
-rw-r--r--lib/dune30
-rwxr-xr-xlib/explain.sh5
-rw-r--r--lib/expression_parser.messages2040
-rwxr-xr-xlib/generate_errors.sh8
-rw-r--r--lib/interpreter.ml70
-rw-r--r--lib/lexer.mll361
-rw-r--r--lib/parser.mly91
-rw-r--r--lib/qsp_expression.mly88
-rw-r--r--lib/qsp_instruction.mly93
-rw-r--r--lib/tokens.mly70
11 files changed, 2900 insertions, 0 deletions
diff --git a/lib/analyzer.ml b/lib/analyzer.ml
new file mode 100644
index 0000000..1a9b17b
--- /dev/null
+++ b/lib/analyzer.ml
@@ -0,0 +1,44 @@
+type error = {
+ message : string;
+ start_pos : Lexing.position;
+ end_pos : Lexing.position;
+}
+(** Error reported when the syntax is invalid *)
+
+let format_error : Format.formatter -> error -> unit =
+ fun f e ->
+ let start_c = e.start_pos.Lexing.pos_cnum - e.start_pos.Lexing.pos_bol
+ and end_c = e.end_pos.Lexing.pos_cnum - e.end_pos.Lexing.pos_bol
+ and start_line = e.start_pos.Lexing.pos_lnum
+ and end_line = e.end_pos.Lexing.pos_lnum in
+
+ if start_line != end_line then
+ Format.fprintf f "Lines %d-%d %s" start_line end_line e.message
+ else Format.fprintf f "Line %d %d:%d %s" start_line start_c end_c e.message
+
+(**
+ Run the QSP parser and apply the analyzer over it.
+
+ See [syntax/S]
+ *)
+let parse :
+ (module Qsp_syntax.S.Analyzer with type Location.repr = 'a) ->
+ Lexing.lexbuf ->
+ ('a, error) Result.t =
+ fun (type a) (module S : Qsp_syntax.S.Analyzer with type Location.repr = a) ->
+ let module Parser = Parser.Make (Qsp_syntax.Tree) in
+ let module IncrementalParser =
+ Interpreter.Interpreter (Parser.MenhirInterpreter) in
+ fun lexbuf ->
+ IncrementalParser.of_lexbuf lexbuf Lexer.token Parser.Incremental.main
+ |> Result.map_error (fun e ->
+ let message =
+ match e.Interpreter.code with
+ | Interpreter.InvalidSyntax -> "Invalid Syntax"
+ | Interpreter.MenhirCode c ->
+ String.concat ""
+ [
+ "(Code "; string_of_int c; ")\n"; Parser_messages.message c;
+ ]
+ in
+ { message; start_pos = e.start_pos; end_pos = e.end_pos })
diff --git a/lib/dune b/lib/dune
new file mode 100644
index 0000000..284ab67
--- /dev/null
+++ b/lib/dune
@@ -0,0 +1,30 @@
+(library
+ (name qsp_parser)
+ (libraries
+ qsp_syntax
+ menhirLib)
+ (preprocess (pps
+ ppx_deriving.show
+ ppx_deriving.eq ))
+ )
+
+
+(rule
+ (targets parser_messages.ml)
+ (deps expression_parser.messages tokens.mly qsp_expression.mly qsp_instruction.mly parser.mly)
+ (action (with-stdout-to %{targets} (run menhir --base parser.mly --compile-errors %{deps}))))
+
+(menhir
+ (modules tokens)
+ (flags --only-tokens)
+)
+
+
+(menhir
+ (modules tokens parser qsp_instruction qsp_expression)
+ (flags --table --external-tokens Tokens)
+ (merge_into parser)
+)
+
+(ocamllex lexer)
+
diff --git a/lib/explain.sh b/lib/explain.sh
new file mode 100755
index 0000000..609d208
--- /dev/null
+++ b/lib/explain.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+menhir --explain tokens.mly qsp_expression.mly --base qsp_expression.mly
+menhir --explain tokens.mly qsp_expression.mly qsp_instruction.mly --base qsp_instruction.mly
+menhir --explain tokens.mly qsp_expression.mly qsp_instruction.mly parser.mly --base parser.mly
diff --git a/lib/expression_parser.messages b/lib/expression_parser.messages
new file mode 100644
index 0000000..174f037
--- /dev/null
+++ b/lib/expression_parser.messages
@@ -0,0 +1,2040 @@
+main: LOCATION_START EOL IDENT SET
+##
+## Ends in an error in state: 12.
+##
+## variable -> IDENT . option(delimited(L_BRACKET,option(expression),R_BRACKET)) [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT INCR GT EXCLAMATION EQUAL EOL ELSE DIV DECR COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## IDENT
+##
+
+Unexpected expression here.
+
+main: LOCATION_START EOL L_PAREN INTEGER SET
+##
+## Ends in an error in state: 70.
+##
+## expression -> L_PAREN expression . R_PAREN [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . STAR expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . DIV expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . MOD expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . GT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . LT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . AND expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . OR expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+##
+## The known suffix of the stack is as follows:
+## L_PAREN expression
+##
+
+Unexpected '('. Did you forgot a function before ?
+
+main: LOCATION_START EOL IF INTEGER SET
+##
+## Ends in an error in state: 87.
+##
+## expression -> expression . EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EXCLAMATION expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . PLUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . MINUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . STAR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . DIV expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . MOD expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . GT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EQUAL GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EQUAL LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . AND expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . OR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## line_statement -> IF expression . COLUMN nonempty_list(EOL) list(line_statement) elif_else_body END option(IF) nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> IF expression . COLUMN nonempty_list(EOL) list(line_statement) elif_else_body END option(IF) nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## onliner(IF) -> IF expression . COLUMN final_inline_instruction [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## IF expression
+##
+
+Invalid `IF` condition. You probably missed a ':'
+
+main: LOCATION_START EOL COLUMN STAR
+##
+## Ends in an error in state: 92.
+##
+## line_statement -> COLUMN . IDENT list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## COLUMN
+##
+
+A location is expected after ':' not an expression
+
+main: LOCATION_START EOL ACT INTEGER SET
+##
+## Ends in an error in state: 96.
+##
+## expression -> expression . EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EXCLAMATION expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . PLUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . MINUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . STAR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . DIV expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . MOD expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . GT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EQUAL GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EQUAL LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . AND expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . OR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## line_statement -> ACT expression . COLUMN nonempty_list(EOL) list(line_statement) empty_body END option(ACT) nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> ACT expression . COLUMN nonempty_list(EOL) list(line_statement) empty_body END option(ACT) nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## onliner(ACT) -> ACT expression . COLUMN final_inline_instruction [ EOL AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## ACT expression
+##
+
+Invalid `ACT` label. You probably missed a ':'
+
+main: LOCATION_START EOL ACT IDENT COLUMN EOL LOCATION_END
+##
+## Ends in an error in state: 98.
+##
+## line_statement -> ACT expression COLUMN nonempty_list(EOL) . list(line_statement) empty_body END option(ACT) nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> ACT expression COLUMN nonempty_list(EOL) . list(line_statement) empty_body END option(ACT) nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## ACT expression COLUMN nonempty_list(EOL)
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 6, spurious reduction of production nonempty_list(EOL) -> EOL
+##
+
+A block starting with `ACT` is not closed by `END`
+If there are nested blocks, the error will points the highest block.
+
+main: LOCATION_START EOL IF IDENT COLUMN ELSE R_PAREN
+##
+## Ends in an error in state: 104.
+##
+## option(preceded(ELSE,instruction)) -> ELSE . instruction [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## ELSE
+##
+
+Too manies instructions on a single line.
+
+main: LOCATION_START EOL IF IDENT COLUMN EOL IDENT AMPERSAND LOCATION_END
+##
+## Ends in an error in state: 152.
+##
+## line_statement -> IF expression COLUMN nonempty_list(EOL) list(line_statement) . elif_else_body END option(IF) nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> IF expression COLUMN nonempty_list(EOL) list(line_statement) . elif_else_body END option(IF) nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## IF expression COLUMN nonempty_list(EOL) list(line_statement)
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 123, spurious reduction of production nonempty_list(AMPERSAND) -> AMPERSAND
+## In state 132, spurious reduction of production list(EOL) ->
+## In state 133, spurious reduction of production line_statement -> instruction nonempty_list(AMPERSAND) list(EOL)
+## In state 128, spurious reduction of production list(line_statement) ->
+## In state 129, spurious reduction of production list(line_statement) -> line_statement list(line_statement)
+##
+
+Unclosed statement.
+(The error may be above in the code, for example a missing `END` after an `IF`)
+
+main: LOCATION_START EOL IF IDENT COLUMN EOL ELSE EOL LOCATION_END
+##
+## Ends in an error in state: 160.
+##
+## else_ -> ELSE nonempty_list(EOL) . list(line_statement) [ END ]
+##
+## The known suffix of the stack is as follows:
+## ELSE nonempty_list(EOL)
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 6, spurious reduction of production nonempty_list(EOL) -> EOL
+##
+
+A block starting with `IF` is not closed by `END`
+If there are nested blocks, the error will points the highest block.
+
+main: LOCATION_START EOL IDENT AMPERSAND END
+##
+## Ends in an error in state: 172.
+##
+## main -> list(EOL) LOCATION_START nonempty_list(EOL) list(line_statement) . LOCATION_END list(EOL) EOF [ # ]
+##
+## The known suffix of the stack is as follows:
+## list(EOL) LOCATION_START nonempty_list(EOL) list(line_statement)
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 123, spurious reduction of production nonempty_list(AMPERSAND) -> AMPERSAND
+## In state 132, spurious reduction of production list(EOL) ->
+## In state 133, spurious reduction of production line_statement -> instruction nonempty_list(AMPERSAND) list(EOL)
+## In state 128, spurious reduction of production list(line_statement) ->
+## In state 129, spurious reduction of production list(line_statement) -> line_statement list(line_statement)
+##
+
+Unexpected `END`.
+Maybe you added an `END` after an inline `ACT` or `IF` ?
+
+main: STAR
+##
+## Ends in an error in state: 0.
+##
+## main' -> . main [ # ]
+##
+## The known suffix of the stack is as follows:
+##
+##
+
+Missing location name
+
+main: LOCATION_START EOL R_PAREN
+##
+## Ends in an error in state: 6.
+##
+## nonempty_list(EOL) -> EOL . [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## nonempty_list(EOL) -> EOL . nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## EOL
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL STAR STAR
+##
+## Ends in an error in state: 9.
+##
+## keyword -> STAR . KEYWORD [ PLUS OBJ NO MINUS L_PAREN LOC LITERAL INTEGER IDENT FUNCTION EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## STAR
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL SET STAR
+##
+## Ends in an error in state: 11.
+##
+## let_assignation -> SET . variable assignation_operator expression [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## SET
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT L_BRACKET STAR
+##
+## Ends in an error in state: 13.
+##
+## option(delimited(L_BRACKET,option(expression),R_BRACKET)) -> L_BRACKET . option(expression) R_BRACKET [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT INCR GT EXCLAMATION EQUAL EOL ELSE DIV DECR COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## L_BRACKET
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL L_PAREN STAR
+##
+## Ends in an error in state: 18.
+##
+## expression -> L_PAREN . expression R_PAREN [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## L_PAREN
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL FUNCTION STAR
+##
+## Ends in an error in state: 22.
+##
+## expression -> FUNCTION . qsp_expression_argument(expression) [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## FUNCTION
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL FUNCTION L_PAREN STAR
+##
+## Ends in an error in state: 23.
+##
+## expression -> L_PAREN . expression R_PAREN [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## qsp_expression_argument(expression) -> L_PAREN . arguments(expression) R_PAREN [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## L_PAREN
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL LOC STAR
+##
+## Ends in an error in state: 25.
+##
+## expression -> unary_operator . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## unary_operator
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL LOC INTEGER SET
+##
+## Ends in an error in state: 26.
+##
+## expression -> unary_operator expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## unary_operator expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT STAR STAR
+##
+## Ends in an error in state: 27.
+##
+## expression -> expression STAR . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression STAR
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT STAR INTEGER SET
+##
+## Ends in an error in state: 28.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression STAR expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression STAR expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT PLUS STAR
+##
+## Ends in an error in state: 29.
+##
+## expression -> expression PLUS . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression PLUS
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT PLUS INTEGER SET
+##
+## Ends in an error in state: 30.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression PLUS expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression PLUS expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT MOD STAR
+##
+## Ends in an error in state: 31.
+##
+## expression -> expression MOD . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression MOD
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT MOD INTEGER SET
+##
+## Ends in an error in state: 32.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression MOD expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression MOD expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT MINUS STAR
+##
+## Ends in an error in state: 33.
+##
+## expression -> expression MINUS . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression MINUS
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT MINUS INTEGER SET
+##
+## Ends in an error in state: 34.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression MINUS expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression MINUS expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT LT STAR
+##
+## Ends in an error in state: 35.
+##
+## expression -> expression LT . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression LT . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression LT . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression LT
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT LT GT STAR
+##
+## Ends in an error in state: 36.
+##
+## expression -> expression LT GT . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression LT GT
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT LT GT INTEGER SET
+##
+## Ends in an error in state: 37.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression LT GT expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression LT GT expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT GT STAR
+##
+## Ends in an error in state: 38.
+##
+## expression -> expression GT . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression GT . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression GT
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT GT EQUAL STAR
+##
+## Ends in an error in state: 39.
+##
+## expression -> expression GT EQUAL . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression GT EQUAL
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT GT EQUAL INTEGER SET
+##
+## Ends in an error in state: 40.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression GT EQUAL expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression GT EQUAL expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL INTEGER EQUAL STAR
+##
+## Ends in an error in state: 41.
+##
+## expression -> expression EQUAL . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression EQUAL . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression EQUAL . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression EQUAL
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL INTEGER EQUAL LT STAR
+##
+## Ends in an error in state: 42.
+##
+## expression -> expression EQUAL LT . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression EQUAL LT
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL INTEGER EQUAL LT INTEGER SET
+##
+## Ends in an error in state: 43.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression EQUAL LT expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression EQUAL LT expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT DIV STAR
+##
+## Ends in an error in state: 44.
+##
+## expression -> expression DIV . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression DIV
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT DIV INTEGER SET
+##
+## Ends in an error in state: 45.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression DIV expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression DIV expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL INTEGER EQUAL GT STAR
+##
+## Ends in an error in state: 46.
+##
+## expression -> expression EQUAL GT . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression EQUAL GT
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL INTEGER EQUAL GT INTEGER SET
+##
+## Ends in an error in state: 47.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression EQUAL GT expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression EQUAL GT expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL INTEGER EQUAL INTEGER SET
+##
+## Ends in an error in state: 48.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression EQUAL expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression EQUAL expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT GT INTEGER SET
+##
+## Ends in an error in state: 49.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression GT expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression GT expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT LT EQUAL STAR
+##
+## Ends in an error in state: 50.
+##
+## expression -> expression LT EQUAL . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression LT EQUAL
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT LT EQUAL INTEGER SET
+##
+## Ends in an error in state: 51.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression LT EQUAL expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression LT EQUAL expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT LT INTEGER SET
+##
+## Ends in an error in state: 52.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression LT expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression LT expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT OR STAR
+##
+## Ends in an error in state: 53.
+##
+## expression -> expression OR . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression OR
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT OR INTEGER SET
+##
+## Ends in an error in state: 54.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression OR expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression OR expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT AND STAR
+##
+## Ends in an error in state: 55.
+##
+## expression -> expression AND . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression AND
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT AND INTEGER SET
+##
+## Ends in an error in state: 56.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression AND expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression AND expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL KEYWORD L_PAREN INTEGER SET
+##
+## Ends in an error in state: 57.
+##
+## arguments(expression) -> expression . COMA separated_nonempty_list(COMA,expression) [ R_PAREN ]
+## expression -> L_PAREN expression . R_PAREN [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . STAR expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . DIV expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . MOD expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . GT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . LT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . AND expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+## expression -> expression . OR expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COMA AND ]
+##
+## The known suffix of the stack is as follows:
+## L_PAREN expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT EXCLAMATION STAR
+##
+## Ends in an error in state: 59.
+##
+## expression -> expression EXCLAMATION . expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression EXCLAMATION
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT EXCLAMATION INTEGER SET
+##
+## Ends in an error in state: 60.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression EXCLAMATION expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression EXCLAMATION expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL KEYWORD IDENT COMA STAR
+##
+## Ends in an error in state: 61.
+##
+## arguments(expression) -> expression COMA . separated_nonempty_list(COMA,expression) [ R_PAREN EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression COMA
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL KEYWORD IDENT COMA INTEGER SET
+##
+## Ends in an error in state: 63.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## separated_nonempty_list(COMA,expression) -> expression . [ R_PAREN EOL ELSE AMPERSAND ]
+## separated_nonempty_list(COMA,expression) -> expression . COMA separated_nonempty_list(COMA,expression) [ R_PAREN EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL KEYWORD IDENT COMA IDENT COMA STAR
+##
+## Ends in an error in state: 64.
+##
+## separated_nonempty_list(COMA,expression) -> expression COMA . separated_nonempty_list(COMA,expression) [ R_PAREN EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression COMA
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL FUNCTION L_PAREN IDENT COMA IDENT EOL
+##
+## Ends in an error in state: 66.
+##
+## qsp_expression_argument(expression) -> L_PAREN arguments(expression) . R_PAREN [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## L_PAREN arguments(expression)
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 12, spurious reduction of production option(delimited(L_BRACKET,option(expression),R_BRACKET)) ->
+## In state 74, spurious reduction of production variable -> IDENT option(delimited(L_BRACKET,option(expression),R_BRACKET))
+## In state 24, spurious reduction of production expression -> variable
+## In state 63, spurious reduction of production separated_nonempty_list(COMA,expression) -> expression
+## In state 62, spurious reduction of production arguments(expression) -> expression COMA separated_nonempty_list(COMA,expression)
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL FUNCTION INTEGER SET
+##
+## Ends in an error in state: 69.
+##
+## expression -> expression . EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+## qsp_expression_argument(expression) -> expression . [ STAR R_PAREN R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA COLUMN AND AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT L_BRACKET INTEGER SET
+##
+## Ends in an error in state: 73.
+##
+## expression -> expression . EQUAL expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . LT GT expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . EXCLAMATION expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . PLUS expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . MINUS expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . STAR expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . DIV expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . MOD expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . GT expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . LT expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . GT EQUAL expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . LT EQUAL expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . EQUAL GT expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . EQUAL LT expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . AND expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## expression -> expression . OR expression [ STAR R_BRACKET PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV AND ]
+## option(expression) -> expression . [ R_BRACKET ]
+##
+## The known suffix of the stack is as follows:
+## expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL SET IDENT STAR
+##
+## Ends in an error in state: 75.
+##
+## let_assignation -> SET variable . assignation_operator expression [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## SET variable
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 12, spurious reduction of production option(delimited(L_BRACKET,option(expression),R_BRACKET)) ->
+## In state 74, spurious reduction of production variable -> IDENT option(delimited(L_BRACKET,option(expression),R_BRACKET))
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL SET IDENT DECR STAR
+##
+## Ends in an error in state: 79.
+##
+## let_assignation -> SET variable assignation_operator . expression [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## SET variable assignation_operator
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL SET IDENT DECR INTEGER SET
+##
+## Ends in an error in state: 80.
+##
+## expression -> expression . EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## let_assignation -> SET variable assignation_operator expression . [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## SET variable assignation_operator expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL LET STAR
+##
+## Ends in an error in state: 81.
+##
+## let_assignation -> LET . variable assignation_operator expression [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## LET
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL LET IDENT STAR
+##
+## Ends in an error in state: 82.
+##
+## let_assignation -> LET variable . assignation_operator expression [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## LET variable
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 12, spurious reduction of production option(delimited(L_BRACKET,option(expression),R_BRACKET)) ->
+## In state 74, spurious reduction of production variable -> IDENT option(delimited(L_BRACKET,option(expression),R_BRACKET))
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL LET IDENT DECR STAR
+##
+## Ends in an error in state: 83.
+##
+## let_assignation -> LET variable assignation_operator . expression [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## LET variable assignation_operator
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL LET IDENT DECR INTEGER SET
+##
+## Ends in an error in state: 84.
+##
+## expression -> expression . EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## let_assignation -> LET variable assignation_operator expression . [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## LET variable assignation_operator expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IF STAR
+##
+## Ends in an error in state: 86.
+##
+## line_statement -> IF . expression COLUMN nonempty_list(EOL) list(line_statement) elif_else_body END option(IF) nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> IF . expression COLUMN nonempty_list(EOL) list(line_statement) elif_else_body END option(IF) nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## onliner(IF) -> IF . expression COLUMN final_inline_instruction [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## IF
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IF IDENT COLUMN R_PAREN
+##
+## Ends in an error in state: 88.
+##
+## line_statement -> IF expression COLUMN . nonempty_list(EOL) list(line_statement) elif_else_body END option(IF) nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> IF expression COLUMN . nonempty_list(EOL) list(line_statement) elif_else_body END option(IF) nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## onliner(IF) -> IF expression COLUMN . final_inline_instruction [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## IF expression COLUMN
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IF IDENT COLUMN EOL LOCATION_END
+##
+## Ends in an error in state: 89.
+##
+## line_statement -> IF expression COLUMN nonempty_list(EOL) . list(line_statement) elif_else_body END option(IF) nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> IF expression COLUMN nonempty_list(EOL) . list(line_statement) elif_else_body END option(IF) nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## IF expression COLUMN nonempty_list(EOL)
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 6, spurious reduction of production nonempty_list(EOL) -> EOL
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL COMMENT STAR
+##
+## Ends in an error in state: 90.
+##
+## line_statement -> COMMENT . nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## COMMENT
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL COLUMN IDENT R_PAREN
+##
+## Ends in an error in state: 93.
+##
+## line_statement -> COLUMN IDENT . list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## COLUMN IDENT
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL ACT STAR
+##
+## Ends in an error in state: 95.
+##
+## line_statement -> ACT . expression COLUMN nonempty_list(EOL) list(line_statement) empty_body END option(ACT) nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> ACT . expression COLUMN nonempty_list(EOL) list(line_statement) empty_body END option(ACT) nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## onliner(ACT) -> ACT . expression COLUMN final_inline_instruction [ EOL AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## ACT
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL ACT IDENT COLUMN R_PAREN
+##
+## Ends in an error in state: 97.
+##
+## line_statement -> ACT expression COLUMN . nonempty_list(EOL) list(line_statement) empty_body END option(ACT) nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> ACT expression COLUMN . nonempty_list(EOL) list(line_statement) empty_body END option(ACT) nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## onliner(ACT) -> ACT expression COLUMN . final_inline_instruction [ EOL AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## ACT expression COLUMN
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT R_PAREN
+##
+## Ends in an error in state: 99.
+##
+## expression -> variable . [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## let_assignation -> variable . assignation_operator expression [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## variable
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 12, spurious reduction of production option(delimited(L_BRACKET,option(expression),R_BRACKET)) ->
+## In state 74, spurious reduction of production variable -> IDENT option(delimited(L_BRACKET,option(expression),R_BRACKET))
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT DECR STAR
+##
+## Ends in an error in state: 100.
+##
+## let_assignation -> variable assignation_operator . expression [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## variable assignation_operator
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT DECR INTEGER SET
+##
+## Ends in an error in state: 101.
+##
+## expression -> expression . EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## let_assignation -> variable assignation_operator expression . [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## variable assignation_operator expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IF IDENT COLUMN COMMENT STAR
+##
+## Ends in an error in state: 103.
+##
+## inline_action -> onliner(IF) . option(preceded(ELSE,instruction)) [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## onliner(IF)
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL KEYWORD STAR
+##
+## Ends in an error in state: 106.
+##
+## single_instruction -> keyword . qsp_instruction_argument(expression) [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## keyword
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL KEYWORD L_PAREN STAR
+##
+## Ends in an error in state: 107.
+##
+## expression -> L_PAREN . expression R_PAREN [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## optionnal_delimited(L_PAREN,arguments(expression),R_PAREN) -> L_PAREN . arguments(expression) R_PAREN [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## L_PAREN
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL KEYWORD L_PAREN IDENT COMA IDENT EOL
+##
+## Ends in an error in state: 108.
+##
+## optionnal_delimited(L_PAREN,arguments(expression),R_PAREN) -> L_PAREN arguments(expression) . R_PAREN [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## L_PAREN arguments(expression)
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 12, spurious reduction of production option(delimited(L_BRACKET,option(expression),R_BRACKET)) ->
+## In state 74, spurious reduction of production variable -> IDENT option(delimited(L_BRACKET,option(expression),R_BRACKET))
+## In state 24, spurious reduction of production expression -> variable
+## In state 63, spurious reduction of production separated_nonempty_list(COMA,expression) -> expression
+## In state 62, spurious reduction of production arguments(expression) -> expression COMA separated_nonempty_list(COMA,expression)
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL KEYWORD INTEGER SET
+##
+## Ends in an error in state: 112.
+##
+## arguments(expression) -> expression . COMA separated_nonempty_list(COMA,expression) [ EOL ELSE AMPERSAND ]
+## expression -> expression . EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV COMA AND AMPERSAND ]
+## qsp_instruction_argument(expression) -> expression . [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL INTEGER SET
+##
+## Ends in an error in state: 115.
+##
+## expression -> expression . EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . LT GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . EXCLAMATION expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . PLUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . MINUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . STAR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . DIV expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . MOD expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . GT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . LT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . EQUAL GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . EQUAL LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . AND expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## expression -> expression . OR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL EOL ELSE DIV AND AMPERSAND ]
+## single_instruction -> expression . [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## expression
+##
+
+Unexpected expression here.
+
+main: LOCATION_START EOL ACT IDENT COLUMN EOL IDENT AMPERSAND LOCATION_END
+##
+## Ends in an error in state: 119.
+##
+## line_statement -> ACT expression COLUMN nonempty_list(EOL) list(line_statement) empty_body . END option(ACT) nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> ACT expression COLUMN nonempty_list(EOL) list(line_statement) empty_body . END option(ACT) nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## ACT expression COLUMN nonempty_list(EOL) list(line_statement) empty_body
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 123, spurious reduction of production nonempty_list(AMPERSAND) -> AMPERSAND
+## In state 132, spurious reduction of production list(EOL) ->
+## In state 133, spurious reduction of production line_statement -> instruction nonempty_list(AMPERSAND) list(EOL)
+## In state 128, spurious reduction of production list(line_statement) ->
+## In state 129, spurious reduction of production list(line_statement) -> line_statement list(line_statement)
+## In state 118, spurious reduction of production empty_body ->
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL ACT IDENT COLUMN EOL END STAR
+##
+## Ends in an error in state: 120.
+##
+## line_statement -> ACT expression COLUMN nonempty_list(EOL) list(line_statement) empty_body END . option(ACT) nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> ACT expression COLUMN nonempty_list(EOL) list(line_statement) empty_body END . option(ACT) nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## ACT expression COLUMN nonempty_list(EOL) list(line_statement) empty_body END
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL ACT IDENT COLUMN EOL END ACT STAR
+##
+## Ends in an error in state: 122.
+##
+## line_statement -> ACT expression COLUMN nonempty_list(EOL) list(line_statement) empty_body END option(ACT) . nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> ACT expression COLUMN nonempty_list(EOL) list(line_statement) empty_body END option(ACT) . nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## ACT expression COLUMN nonempty_list(EOL) list(line_statement) empty_body END option(ACT)
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT AMPERSAND R_PAREN
+##
+## Ends in an error in state: 123.
+##
+## nonempty_list(AMPERSAND) -> AMPERSAND . [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION EOL END ELSE ELIF COMMENT COLUMN AMPERSAND ACT ]
+## nonempty_list(AMPERSAND) -> AMPERSAND . nonempty_list(AMPERSAND) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION EOL END ELSE ELIF COMMENT COLUMN AMPERSAND ACT ]
+##
+## The known suffix of the stack is as follows:
+## AMPERSAND
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT AMPERSAND EOL EOF
+##
+## Ends in an error in state: 128.
+##
+## list(line_statement) -> line_statement . list(line_statement) [ LOCATION_END END ELSE ELIF ]
+##
+## The known suffix of the stack is as follows:
+## line_statement
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 1, spurious reduction of production list(EOL) ->
+## In state 2, spurious reduction of production list(EOL) -> EOL list(EOL)
+## In state 133, spurious reduction of production line_statement -> instruction nonempty_list(AMPERSAND) list(EOL)
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IDENT ELSE
+##
+## Ends in an error in state: 130.
+##
+## line_statement -> instruction . nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> instruction . nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## instruction
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 12, spurious reduction of production option(delimited(L_BRACKET,option(expression),R_BRACKET)) ->
+## In state 74, spurious reduction of production variable -> IDENT option(delimited(L_BRACKET,option(expression),R_BRACKET))
+## In state 99, spurious reduction of production expression -> variable
+## In state 115, spurious reduction of production single_instruction -> expression
+## In state 102, spurious reduction of production instruction -> single_instruction
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL ACT IDENT COLUMN COMMENT STAR
+##
+## Ends in an error in state: 134.
+##
+## line_statement -> inline_action . nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> inline_action . nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## inline_action
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL ACT IDENT COLUMN IDENT AMPERSAND LOCATION_END
+##
+## Ends in an error in state: 138.
+##
+## final_inline_instruction -> inline_instruction . instruction [ EOL ELSE AMPERSAND ]
+## final_inline_instruction -> inline_instruction . inline_action [ EOL ELSE AMPERSAND ]
+## final_inline_instruction -> inline_instruction . COMMENT [ EOL ELSE AMPERSAND ]
+## final_inline_instruction -> inline_instruction . [ EOL ELSE AMPERSAND ]
+## inline_instruction -> inline_instruction . single_instruction nonempty_list(AMPERSAND) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION EOL ELSE COMMENT AMPERSAND ACT ]
+##
+## The known suffix of the stack is as follows:
+## inline_instruction
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 123, spurious reduction of production nonempty_list(AMPERSAND) -> AMPERSAND
+## In state 149, spurious reduction of production inline_instruction -> inline_instruction single_instruction nonempty_list(AMPERSAND)
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL ACT IDENT COLUMN IF STAR
+##
+## Ends in an error in state: 139.
+##
+## onliner(IF) -> IF . expression COLUMN final_inline_instruction [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## IF
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL ACT IDENT COLUMN IF INTEGER SET
+##
+## Ends in an error in state: 140.
+##
+## expression -> expression . EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EXCLAMATION expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . PLUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . MINUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . STAR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . DIV expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . MOD expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . GT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EQUAL GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EQUAL LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . AND expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . OR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## onliner(IF) -> IF expression . COLUMN final_inline_instruction [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## IF expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL ACT IDENT COLUMN ACT STAR
+##
+## Ends in an error in state: 144.
+##
+## onliner(ACT) -> ACT . expression COLUMN final_inline_instruction [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## ACT
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL ACT IDENT COLUMN ACT INTEGER SET
+##
+## Ends in an error in state: 145.
+##
+## expression -> expression . EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EXCLAMATION expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . PLUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . MINUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . STAR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . DIV expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . MOD expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . GT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EQUAL GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EQUAL LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . AND expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . OR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## onliner(ACT) -> ACT expression . COLUMN final_inline_instruction [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## ACT expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL ACT IDENT COLUMN KEYWORD L_PAREN R_PAREN STAR
+##
+## Ends in an error in state: 148.
+##
+## inline_instruction -> inline_instruction single_instruction . nonempty_list(AMPERSAND) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION EOL ELSE COMMENT AMPERSAND ACT ]
+## instruction -> single_instruction . [ EOL ELSE AMPERSAND ]
+##
+## The known suffix of the stack is as follows:
+## inline_instruction single_instruction
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IF IDENT COLUMN EOL ELIF STAR
+##
+## Ends in an error in state: 153.
+##
+## elif -> ELIF . expression COLUMN nonempty_list(EOL) list(line_statement) [ END ELSE ELIF ]
+##
+## The known suffix of the stack is as follows:
+## ELIF
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IF IDENT COLUMN EOL ELIF INTEGER SET
+##
+## Ends in an error in state: 154.
+##
+## elif -> ELIF expression . COLUMN nonempty_list(EOL) list(line_statement) [ END ELSE ELIF ]
+## expression -> expression . EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EXCLAMATION expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . PLUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . MINUS expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . STAR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . DIV expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . MOD expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . GT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . LT EQUAL expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EQUAL GT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . EQUAL LT expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . AND expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+## expression -> expression . OR expression [ STAR PLUS OR MOD MINUS LT GT EXCLAMATION EQUAL DIV COLUMN AND ]
+##
+## The known suffix of the stack is as follows:
+## ELIF expression
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IF IDENT COLUMN EOL ELIF IDENT COLUMN STAR
+##
+## Ends in an error in state: 155.
+##
+## elif -> ELIF expression COLUMN . nonempty_list(EOL) list(line_statement) [ END ELSE ELIF ]
+##
+## The known suffix of the stack is as follows:
+## ELIF expression COLUMN
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IF IDENT COLUMN EOL ELIF IDENT COLUMN EOL LOCATION_END
+##
+## Ends in an error in state: 156.
+##
+## elif -> ELIF expression COLUMN nonempty_list(EOL) . list(line_statement) [ END ELSE ELIF ]
+##
+## The known suffix of the stack is as follows:
+## ELIF expression COLUMN nonempty_list(EOL)
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 6, spurious reduction of production nonempty_list(EOL) -> EOL
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IF IDENT COLUMN EOL ELSE STAR
+##
+## Ends in an error in state: 159.
+##
+## else_ -> ELSE . nonempty_list(EOL) list(line_statement) [ END ]
+##
+## The known suffix of the stack is as follows:
+## ELSE
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IF IDENT COLUMN EOL ELSE EOL IDENT AMPERSAND LOCATION_END
+##
+## Ends in an error in state: 163.
+##
+## line_statement -> IF expression COLUMN nonempty_list(EOL) list(line_statement) elif_else_body . END option(IF) nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> IF expression COLUMN nonempty_list(EOL) list(line_statement) elif_else_body . END option(IF) nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## IF expression COLUMN nonempty_list(EOL) list(line_statement) elif_else_body
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 123, spurious reduction of production nonempty_list(AMPERSAND) -> AMPERSAND
+## In state 132, spurious reduction of production list(EOL) ->
+## In state 133, spurious reduction of production line_statement -> instruction nonempty_list(AMPERSAND) list(EOL)
+## In state 128, spurious reduction of production list(line_statement) ->
+## In state 129, spurious reduction of production list(line_statement) -> line_statement list(line_statement)
+## In state 161, spurious reduction of production else_ -> ELSE nonempty_list(EOL) list(line_statement)
+## In state 162, spurious reduction of production elif_else_body -> list(elif) else_
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IF IDENT COLUMN EOL END STAR
+##
+## Ends in an error in state: 164.
+##
+## line_statement -> IF expression COLUMN nonempty_list(EOL) list(line_statement) elif_else_body END . option(IF) nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> IF expression COLUMN nonempty_list(EOL) list(line_statement) elif_else_body END . option(IF) nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## IF expression COLUMN nonempty_list(EOL) list(line_statement) elif_else_body END
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IF IDENT COLUMN EOL END IF STAR
+##
+## Ends in an error in state: 166.
+##
+## line_statement -> IF expression COLUMN nonempty_list(EOL) list(line_statement) elif_else_body END option(IF) . nonempty_list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+## line_statement -> IF expression COLUMN nonempty_list(EOL) list(line_statement) elif_else_body END option(IF) . nonempty_list(AMPERSAND) list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## IF expression COLUMN nonempty_list(EOL) list(line_statement) elif_else_body END option(IF)
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL IF IDENT COLUMN EOL ELIF IDENT COLUMN EOL IDENT AMPERSAND LOCATION_END
+##
+## Ends in an error in state: 170.
+##
+## list(elif) -> elif . list(elif) [ END ELSE ]
+##
+## The known suffix of the stack is as follows:
+## elif
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 123, spurious reduction of production nonempty_list(AMPERSAND) -> AMPERSAND
+## In state 132, spurious reduction of production list(EOL) ->
+## In state 133, spurious reduction of production line_statement -> instruction nonempty_list(AMPERSAND) list(EOL)
+## In state 128, spurious reduction of production list(line_statement) ->
+## In state 129, spurious reduction of production list(line_statement) -> line_statement list(line_statement)
+## In state 157, spurious reduction of production elif -> ELIF expression COLUMN nonempty_list(EOL) list(line_statement)
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL LOCATION_END STAR
+##
+## Ends in an error in state: 173.
+##
+## main -> list(EOL) LOCATION_START nonempty_list(EOL) list(line_statement) LOCATION_END . list(EOL) EOF [ # ]
+##
+## The known suffix of the stack is as follows:
+## list(EOL) LOCATION_START nonempty_list(EOL) list(line_statement) LOCATION_END
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL LOCATION_END EOL STAR
+##
+## Ends in an error in state: 174.
+##
+## main -> list(EOL) LOCATION_START nonempty_list(EOL) list(line_statement) LOCATION_END list(EOL) . EOF [ # ]
+##
+## The known suffix of the stack is as follows:
+## list(EOL) LOCATION_START nonempty_list(EOL) list(line_statement) LOCATION_END list(EOL)
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 1, spurious reduction of production list(EOL) ->
+## In state 2, spurious reduction of production list(EOL) -> EOL list(EOL)
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: EOL R_PAREN
+##
+## Ends in an error in state: 1.
+##
+## list(EOL) -> EOL . list(EOL) [ STAR SET PLUS OBJ NO MINUS L_PAREN LOCATION_START LOCATION_END LOC LITERAL LET KEYWORD INTEGER IF IDENT FUNCTION EOF END ELSE ELIF COMMENT COLUMN ACT ]
+##
+## The known suffix of the stack is as follows:
+## EOL
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: EOL STAR
+##
+## Ends in an error in state: 4.
+##
+## main -> list(EOL) . LOCATION_START nonempty_list(EOL) list(line_statement) LOCATION_END list(EOL) EOF [ # ]
+##
+## The known suffix of the stack is as follows:
+## list(EOL)
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 1, spurious reduction of production list(EOL) ->
+## In state 2, spurious reduction of production list(EOL) -> EOL list(EOL)
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START STAR
+##
+## Ends in an error in state: 5.
+##
+## main -> list(EOL) LOCATION_START . nonempty_list(EOL) list(line_statement) LOCATION_END list(EOL) EOF [ # ]
+##
+## The known suffix of the stack is as follows:
+## list(EOL) LOCATION_START
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
+
+main: LOCATION_START EOL END
+##
+## Ends in an error in state: 8.
+##
+## main -> list(EOL) LOCATION_START nonempty_list(EOL) . list(line_statement) LOCATION_END list(EOL) EOF [ # ]
+##
+## The known suffix of the stack is as follows:
+## list(EOL) LOCATION_START nonempty_list(EOL)
+##
+## WARNING: This example involves spurious reductions.
+## This implies that, although the LR(1) items shown above provide an
+## accurate view of the past (what has been recognized so far), they
+## may provide an INCOMPLETE view of the future (what was expected next).
+## In state 6, spurious reduction of production nonempty_list(EOL) -> EOL
+##
+
+<YOUR SYNTAX ERROR MESSAGE HERE>
diff --git a/lib/generate_errors.sh b/lib/generate_errors.sh
new file mode 100755
index 0000000..3cff769
--- /dev/null
+++ b/lib/generate_errors.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# Generate the error file with the helper messages. This script is required
+# when the syntax is modified because menhir will change the state number and
+# we need to make it match with the comment in the messages.
+
+menhir --list-errors *.mly --base parser.mly > all_errors
+menhir --merge-errors expression_parser.messages --merge-errors all_errors *.mly --base parser.mly > expression_parser.messages_new
diff --git a/lib/interpreter.ml b/lib/interpreter.ml
new file mode 100644
index 0000000..b41d74e
--- /dev/null
+++ b/lib/interpreter.ml
@@ -0,0 +1,70 @@
+(**
+ This module provide a way to build the syntax parser with the menhir
+ incremental engine. This feature allow to see the state of the parser, and
+ get detailed error message but is not intended to be used directly.
+
+ Refer to the menhir manual in order to see the values.
+
+ The interresting function here is [of_lexer] which return the error code in
+ case of invalid syntax.
+ *)
+
+type error_code = InvalidSyntax | MenhirCode of int
+
+type error = {
+ code : error_code;
+ start_pos : Lexing.position;
+ end_pos : Lexing.position;
+}
+
+module Interpreter (MI : MenhirLib.IncrementalEngine.INCREMENTAL_ENGINE) =
+struct
+ module E = MenhirLib.ErrorReports
+ module L = MenhirLib.LexerUtil
+
+ let range_message start_pos end_pos code = { code; start_pos; end_pos }
+
+ let get_parse_error default_position env : error =
+ match MI.stack env with
+ | (lazy Nil) ->
+ range_message default_position.Lexing.lex_start_p
+ default_position.Lexing.lex_curr_p InvalidSyntax
+ | (lazy (Cons (MI.Element (state, _, start_pos, end_pos), _))) ->
+ range_message start_pos end_pos (MenhirCode (MI.number state))
+
+ let rec _parse :
+ (Lexing.lexbuf -> MI.token) ->
+ Lexing.lexbuf ->
+ 'a MI.checkpoint ->
+ ('a, error) Result.t =
+ fun get_token (lexbuf : Lexing.lexbuf) (checkpoint : 'a MI.checkpoint) ->
+ match checkpoint with
+ | MI.InputNeeded _env ->
+ let token = get_token lexbuf in
+ let startp = lexbuf.Lexing.lex_start_p and endp = lexbuf.lex_curr_p in
+ let checkpoint = MI.offer checkpoint (token, startp, endp) in
+ _parse get_token lexbuf checkpoint
+ | MI.Shifting _ | MI.AboutToReduce _ ->
+ let checkpoint = MI.resume checkpoint in
+ _parse get_token lexbuf checkpoint
+ | MI.HandlingError _env ->
+ let err = get_parse_error lexbuf _env in
+ Error err
+ | MI.Accepted v -> Ok v
+ | MI.Rejected ->
+ let err =
+ range_message lexbuf.lex_start_p lexbuf.lex_curr_p InvalidSyntax
+ in
+ Error err
+
+ type 'a builder = Lexing.position -> 'a MI.checkpoint
+
+ let of_lexbuf :
+ Lexing.lexbuf ->
+ (Lexing.lexbuf -> MI.token) ->
+ 'a builder ->
+ ('a, error) result =
+ fun lexbuf lexer f ->
+ let init = f lexbuf.lex_curr_p in
+ _parse lexer lexbuf init
+end
diff --git a/lib/lexer.mll b/lib/lexer.mll
new file mode 100644
index 0000000..4796e62
--- /dev/null
+++ b/lib/lexer.mll
@@ -0,0 +1,361 @@
+{
+ open Tokens
+ module T = Qsp_syntax.T
+
+ exception UnclosedQuote of { content: string ; line : int}
+
+ (* The comment system is terrible. The same symbol can be used for :
+ - starting a comment
+ - inequality operation
+ In order to manage this, I try to identify the context in a very basic way,
+ using a flag True False for determining the token to send.
+ *)
+ module Bucket = Ephemeron.K1.Bucket
+ type bucket = (Lexing.lexbuf, int) Bucket.t
+ let is_expression : bucket = Bucket.make ()
+
+ let incr_level lexbuf =
+ match Bucket.find is_expression lexbuf with
+ | None -> Bucket.add is_expression lexbuf 1
+ | Some v -> Bucket.add is_expression lexbuf (v+1)
+
+ let decr_level lexbuf =
+ match Bucket.find is_expression lexbuf with
+ | None -> ()
+ | Some v ->
+ if v > 1 then
+ Bucket.add is_expression lexbuf (v-1)
+ else
+ Bucket.remove is_expression lexbuf
+
+ let keyword_table = Hashtbl.create 53
+ let _ =
+ List.iter (fun (kwd, tok) -> Hashtbl.add keyword_table kwd tok)
+ [ "ACT", ACT
+ ; "ADDLIB", KEYWORD "INCLIB"
+ ; "ADDOBJ", KEYWORD "ADDOBJ"
+ ; "ADD OBJ", KEYWORD "ADDOBJ"
+ ; "ADDQST", KEYWORD "INCLIB"
+ ; "AND", AND
+ ; "ARRCOMP", FUNCTION T.Arrcomp
+ ; "ARRPOS", FUNCTION T.Arrpos
+ ; "ARRSIZE", FUNCTION T.Arrsize
+(*
+ ; "BACKIMAGE", KEYWORD "BACKIMAGE"
+ ; "$BACKIMAGE", KEYWORD "BACKIMAGE"
+ ; "BCOLOR", KEYWORD "BCOLOR"
+*)
+ ; "CLA", KEYWORD "CLA"
+ ; "CLEAR", KEYWORD "CLEAR"
+ ; "*CLEAR", KEYWORD "*CLEAR"
+ ; "CLOSE", KEYWORD "CLOSE"
+ ; "CLOSE ALL", KEYWORD "CLOSEALL"
+ ; "CLR", KEYWORD "CLEAR"
+ ; "*CLR", KEYWORD "*CLEAR"
+ ; "CLS", KEYWORD "CLS"
+ ; "CMDCLEAR", KEYWORD "CMDCLEAR"
+ ; "CMDCLR", KEYWORD "CMDCLEAR"
+ ; "COPYARR", KEYWORD "COPYARR"
+ ; "COUNTOBJ", FUNCTION T.Countobj
+ ; "CURACTS", IDENT "CURACTS"
+ ; "$CURACTS", IDENT "CURACTS"
+ ; "CURLOC", IDENT "CURLOC"
+ ; "$CURLOC", IDENT "CURLOC"
+(*
+ ; "DEBUG", KEYWORD "DEBUG"
+*)
+ ; "DELACT", KEYWORD "DELACT"
+ ; "DEL ACT", KEYWORD "DELACT"
+ ; "DELLIB", KEYWORD "FREELIB"
+ ; "DELOBJ", KEYWORD "DELOBJ"
+ ; "DEL OBJ", KEYWORD "DELOBJ"
+ ; "DESC", FUNCTION T.Desc
+ ; "$DESC", FUNCTION T.Desc'
+(*
+ ; "DISABLESCROLL", KEYWORD "DISABLESCROLL"
+ ; "DISABLESUBEX", KEYWORD "DISABLESUBEX"
+*)
+ ; "DYNAMIC", KEYWORD "DYNAMIC"
+ ; "DYNEVAL", FUNCTION T.Dyneval
+ ; "$DYNEVAL", FUNCTION T.Dyneval'
+ ; "ELSE", ELSE
+ ; "ELSEIF", ELIF
+ ; "END", END
+ ; "EXEC", KEYWORD "EXEC"
+ ; "EXIT", KEYWORD "EXIT"
+(*
+ ; "FCOLOR", KEYWORD "FCOLOR"
+ ; "$FNAME", KEYWORD "$FNAME"
+*)
+ ; "FREELIB", KEYWORD "FREELIB"
+(*
+ ; "FSIZE", KEYWORD "FSIZE"
+*)
+ ; "FUNC", FUNCTION T.Func
+ ; "$FUNC", FUNCTION T.Func'
+ ; "GETOBJ", FUNCTION T.Getobj
+ ; "$GETOBJ", FUNCTION T.Getobj'
+ ; "GOSUB", KEYWORD "GOSUB"
+ ; "GOTO", KEYWORD "GOTO"
+(*
+ ; "GC", KEYWORD "GC"
+*)
+ ; "GS", KEYWORD "GOSUB"
+ ; "GT", KEYWORD "GOTO"
+ ; "IF", IF
+ ; "IIF", FUNCTION T.Iif
+ ; "$IIF", FUNCTION T.Iif'
+ ; "INCLIB", KEYWORD "INCLIB"
+ ; "INPUT", FUNCTION T.Input
+ ; "$INPUT", FUNCTION T.Input'
+ ; "INSTR", FUNCTION T.Instr
+ ; "ISNUM", FUNCTION T.Isnum
+ ; "ISPLAY", FUNCTION T.Isplay
+ ; "JUMP", KEYWORD "JUMP"
+ ; "KILLALL", KEYWORD "KILLALL"
+ ; "KILLOBJ", KEYWORD "KILLOBJ"
+ ; "KILLQST", KEYWORD "FREELIB"
+ ; "KILLVAR", KEYWORD "KILLVAR"
+ ; "LCASE", FUNCTION T.Lcase
+ ; "$LCASE", FUNCTION T.Lcase'
+(*
+ ; "LCOLOR", KEYWORD "LCOLOR"
+*)
+ ; "LEN", FUNCTION T.Len
+ ; "LET", LET
+ ; "LOC", LOC
+ ; "MAINTXT", IDENT "MAINTXT"
+ ; "$MAINTXT", IDENT "MAINTXT"
+ ; "MAX", FUNCTION T.Max
+ ; "$MAX", FUNCTION T.Max'
+ ; "MENU", KEYWORD "MENU"
+ ; "MID", FUNCTION T.Mid
+ ; "$MID", FUNCTION T.Mid'
+ ; "MIN", FUNCTION T.Min
+ ; "$MIN", FUNCTION T.Min'
+ ; "MOD", MOD
+ ; "MSECSCOUNT", FUNCTION T.Msecscount
+ ; "MSG", KEYWORD "MSG"
+ ; "NL", KEYWORD "NL"
+ ; "*NL", KEYWORD "*NL"
+ ; "NO", NO
+(*
+ ; "NOSAVE", KEYWORD "NOSAVE"
+*)
+ ; "OBJ", OBJ
+ ; "$ONACTSEL", IDENT "$ONACTSEL"
+ ; "$ONGLOAD", IDENT "$ONGLOAD"
+ ; "$ONGSAVE", IDENT "$ONGSAVE"
+ ; "$ONNEWLOC", IDENT "$ONNEWLOC"
+ ; "$ONOBJADD", IDENT "$ONOBJADD"
+ ; "$ONOBJDEL", IDENT "$ONOBJDEL"
+ ; "$ONOBJSEL", IDENT "$ONOBJSEL"
+ ; "OPENGAME", KEYWORD "OPENGAME"
+ ; "OPENQST", KEYWORD "OPENQST"
+ ; "OR", OR
+ ; "P", KEYWORD "P"
+ ; "*P", KEYWORD "*P"
+ ; "PL", KEYWORD "PL"
+ ; "*PL", KEYWORD "*PL"
+ ; "PLAY", KEYWORD "PLAY"
+ ; "QSPVER", FUNCTION T.Qspver
+ ; "$QSPVER", FUNCTION T.Qspver'
+ ; "RAND", FUNCTION T.Rand
+ ; "REFINT", KEYWORD "REFINT"
+ ; "REPLACE", FUNCTION T.Replace
+ ; "$REPLACE", FUNCTION T.Replace'
+ ; "RGB", FUNCTION T.Rgb
+ ; "RND", FUNCTION T.Rnd
+ ; "SAVEGAME", KEYWORD "SAVEGAME"
+ ; "SELACT", FUNCTION T.Selact
+ ; "$SELACT", IDENT "SELACT"
+ ; "SELOBJ", IDENT "SELOBJ"
+ ; "$SELOBJ", IDENT "SELOBJ"
+ ; "SET", SET
+ ; "SETTIMER", KEYWORD "SETTIMER"
+ ; "SHOWACTS", KEYWORD "SHOWACTS"
+ ; "SHOWINPUT", KEYWORD "SHOWINPUT"
+ ; "SHOWOBJS", KEYWORD "SHOWOBJS"
+ ; "SHOWSTAT", KEYWORD "SHOWSTAT"
+ ; "STATTXT", FUNCTION T.Stattxt
+ ; "$STATTXT", FUNCTION T.Stattxt'
+ ; "STR", FUNCTION T.Str
+ ; "$STR", FUNCTION T.Str'
+ ; "STRCOMP", FUNCTION T.Strcomp
+ ; "STRFIND", FUNCTION T.Strfind
+ ; "$STRFIND", FUNCTION T.Strfind'
+ ; "STRPOS", FUNCTION T.Strpos
+ ; "TRIM", FUNCTION T.Trim
+ ; "$TRIM", FUNCTION T.Trim'
+ ; "UCASE", FUNCTION T.Ucase
+ ; "$UCASE", FUNCTION T.Ucase'
+ ; "UNSEL", KEYWORD "UNSELECT"
+ ; "UNSELECT", KEYWORD "UNSELECT"
+ ; "USEHTML", IDENT "USEHTML"
+ ; "USERCOM", IDENT "USERCOM"
+ ; "$USERCOM", IDENT "USERCOM"
+ ; "USER_TEXT", IDENT "USER_TEXT"
+ ; "$USER_TEXT", IDENT "USER_TEXT"
+ ; "USRTXT", IDENT "USER_TEXT"
+ ; "$USRTXT", IDENT "USER_TEXT"
+ ; "VAL", FUNCTION T.Val
+ ; "VIEW", KEYWORD "VIEW"
+ ; "WAIT", KEYWORD "WAIT"
+ ; "XGOTO", KEYWORD "XGOTO"
+ ; "XGT", KEYWORD "XGOTO"
+ ]
+
+ let ident lexbuf id =
+ let id = String.uppercase_ascii id in
+ try
+ let value = Hashtbl.find keyword_table id in
+ let _ = match value with
+ | IF | ELIF -> incr_level lexbuf
+ | _ -> () in
+ value
+
+ with Not_found -> IDENT id
+
+ let wait_balance rule lexbuf =
+ try[@warning "-52"]
+ rule (Buffer.create 17) lexbuf
+ with
+ Failure "lexing: empty token" ->
+ let line = lexbuf.Lexing.lex_curr_p.pos_lnum
+ and content = Bytes.to_string lexbuf.Lexing.lex_buffer in
+ raise (UnclosedQuote {line; content})
+ [@warning "+52"]
+}
+
+let space = [ ' ' '\t' ]
+let coma = ','
+let letters = [^ '!' ':' '&' '=' '<' '>' '+' '-' '*' '/' ',' '"' '\'' '(' ')' '[' ']' ' ' '\t' '\n' '\r' '{' '}']
+let digit = [ '0'-'9' ]
+let eol = [ '\r' '\n' ]
+let spaces = space+
+let ident = (letters # digit) letters*
+
+rule token = parse
+
+| '#' spaces* (('!' | '$' | '#' | '^')+)? (ident as loc) {
+ Lexing.set_filename lexbuf loc;
+ LOCATION_START loc}
+| (digit+) as l { INTEGER l}
+| '+' { PLUS }
+| '-' { MINUS }
+| "+=" { INCR }
+| "-=" { DECR }
+| '/' { DIV }
+| '*' { STAR }
+| ':' {
+ (* We are leaving the block, the comment will be handled again *)
+ decr_level lexbuf;
+ COLUMN }
+| '-' '-'+ [ ^ '\r' '\n']* { LOCATION_END }
+| '[' { L_BRACKET }
+| ']' { R_BRACKET }
+| '(' {
+ incr_level lexbuf;
+ L_PAREN }
+| ')' {
+ decr_level lexbuf;
+ R_PAREN }
+| '<' { LT }
+| '>' { GT }
+| coma { COMA }
+| eof {
+ Bucket.remove is_expression lexbuf;
+ EOF }
+| '=' {
+ incr_level lexbuf;
+ EQUAL }
+| ident as l { ident lexbuf l}
+| eol {
+ Bucket.add is_expression lexbuf 0;
+ Lexing.new_line lexbuf; EOL }
+| '&' {
+ Bucket.add is_expression lexbuf 0;
+ AMPERSAND }
+| '!' {
+ match Bucket.find is_expression lexbuf with
+ | Some i when i <> 0 -> EXCLAMATION
+ | _ -> skip_comment lexbuf
+}
+| spaces { token lexbuf }
+| '\'' { LITERAL (wait_balance read_quoted_string lexbuf) }
+| '"' { LITERAL (wait_balance read_dquoted_string lexbuf) }
+| '{' { LITERAL (wait_balance (read_long_string 0) lexbuf) }
+
+and skip_comment = parse
+| [^ '\'' '"' '{' '\r' '\n' ] { skip_comment lexbuf }
+| '{' {
+ let _ = wait_balance (read_long_string 0) lexbuf in
+ skip_comment lexbuf }
+| '\'' {
+ let _ = wait_balance read_quoted_string lexbuf in
+ skip_comment lexbuf
+}
+| '"' {
+ let _ = wait_balance read_dquoted_string lexbuf in
+ skip_comment lexbuf
+}
+| eol {
+ (* Ugly hack used in order to put the eol in the front of the next
+ parsing. *)
+ lexbuf.lex_curr_pos <- lexbuf.lex_curr_pos - 1;
+ (*Lexing.new_line lexbuf;*)
+ COMMENT
+}
+
+(* Read the content until we got another one quote *)
+and read_quoted_string buf = parse
+ | "''"
+ { Buffer.add_char buf '\'';
+ read_quoted_string buf lexbuf
+ }
+ | [^ '\'' '\n' '\r']+
+ { Buffer.add_string buf (Lexing.lexeme lexbuf);
+ read_quoted_string buf lexbuf
+ }
+ | '\''
+ { (Buffer.contents buf)
+ }
+ | ['\n' '\r']
+ { Buffer.add_string buf (Lexing.lexeme lexbuf);
+ Lexing.new_line lexbuf ;
+ read_quoted_string buf lexbuf
+ }
+
+and read_dquoted_string buf = parse
+ | [^ '"' ]+
+ { Buffer.add_string buf (Lexing.lexeme lexbuf);
+ read_dquoted_string buf lexbuf
+ }
+ | "\"\""
+ { Buffer.add_char buf '"';
+ read_dquoted_string buf lexbuf
+ }
+ | '"'
+ { (Buffer.contents buf)
+ }
+
+and read_long_string level buf = parse
+ | [^ '{' '}' '\r' '\n' ]+
+ { Buffer.add_string buf (Lexing.lexeme lexbuf);
+ read_long_string level buf lexbuf
+ }
+ | '{'
+ { Buffer.add_string buf (Lexing.lexeme lexbuf);
+ read_long_string (level + 1) buf lexbuf }
+ | '}'
+ { match level with
+ | 0 -> (Buffer.contents buf)
+ | _ -> Buffer.add_string buf (Lexing.lexeme lexbuf);
+ read_long_string (level - 1) buf lexbuf
+ }
+| eol
+{
+ Lexing.new_line lexbuf;
+ Buffer.add_string buf (Lexing.lexeme lexbuf);
+ read_long_string level buf lexbuf
+}
diff --git a/lib/parser.mly b/lib/parser.mly
new file mode 100644
index 0000000..c506e9c
--- /dev/null
+++ b/lib/parser.mly
@@ -0,0 +1,91 @@
+
+%{
+
+
+ module T = Qsp_syntax.T
+
+ let dummy_pos = (Lexing.dummy_pos, Lexing.dummy_pos)
+
+%}
+
+%parameter<Analyzer: Qsp_syntax.S.Analyzer>
+%start <Analyzer.Location.repr>main
+
+%%
+
+main:
+ | EOL*
+ LOCATION_START
+ EOL+
+ expressions = line_statement*
+ LOCATION_END
+ EOL*
+ EOF
+ {
+ Analyzer.Location.location $loc expressions
+ }
+
+(* All these statement should terminate with EOL *)
+line_statement:
+ | COMMENT EOL+ { Analyzer.Instruction.comment $loc }
+ | COLUMN i=IDENT EOL* { Analyzer.Instruction.location $loc i }
+ | s = terminated(instruction, line_sep)
+ | s = terminated(inline_action, line_sep)
+ { s }
+ | a = action_bloc(IF, elif_else_body)
+ { let loc, expression, statements, loc_s, body = a in
+ let elifs, else_ = match body with
+ | None -> [], []
+ | Some (elifs, else_) -> (elifs, else_)
+ in
+ Analyzer.Instruction.if_
+ loc
+ (loc_s, expression, statements)
+ ~elifs
+ ~else_
+ }
+ | a = action_bloc(ACT, empty_body)
+ { let loc, label, statements, _, _ = a in
+ Analyzer.Instruction.act loc ~label statements
+ }
+
+(** Represent an instruction which can either be on a single line,
+ or created in a block until an END
+ *)
+%inline action_bloc(TOKEN, BODY):
+ | TOKEN
+ e = expression
+ COLUMN EOL+
+ s = line_statement*
+ b = BODY
+ END TOKEN?
+ line_sep
+ { $loc, e, s, $loc(s), b }
+
+empty_body:
+ | { None }
+
+elif:
+ | ELIF
+ e = expression
+ COLUMN EOL+
+ s = line_statement*
+ { $loc, e, s }
+
+else_:
+ | ELSE EOL+
+ expressions = line_statement*
+ { expressions }
+ | { [] }
+
+
+elif_else_body:
+ | elifs = elif*
+ else_ = else_
+ { Some (elifs, else_) }
+
+
+%inline line_sep:
+ | EOL+
+ | AMPERSAND+ EOL*
+ {}
diff --git a/lib/qsp_expression.mly b/lib/qsp_expression.mly
new file mode 100644
index 0000000..07da032
--- /dev/null
+++ b/lib/qsp_expression.mly
@@ -0,0 +1,88 @@
+(* %start <(Elements.pos) Elements.exppression>expression *)
+
+%%
+
+%public arguments(X):
+ (** This rule allow the difference between elements with a single argument
+ (when the separator is required) which allow to write a spectif case when
+ we only have one element.
+ *)
+ | hd = X
+ COMA
+ tl = separated_nonempty_list(COMA, X)
+ { hd :: tl }
+ (** The case where we have nothing is easy to manage here *)
+ |
+ { [] }
+ (** The remaining case (only one argument) is handled outside of this
+ block: if we have a single argument we don’t have to bother with the
+ paren, they belongs to the expression.
+ *)
+
+argument(X):
+ | a = delimited(L_PAREN, arguments(X), R_PAREN) { a }
+ | a = X { [ a ] }
+
+(** Declare an expression *)
+%public expression:
+ | ex = delimited(L_PAREN, expression, R_PAREN)
+ { ex }
+ | op = unary_operator
+ expr = expression
+ { Analyzer.Expression.uoperator $loc op expr }
+ %prec NO
+ |
+ expr1 = expression
+ op = binary_operator
+ expr2 = expression
+ { Analyzer.Expression.boperator $loc op expr1 expr2 }
+ %prec EQUAL
+ | v = LITERAL { Analyzer.Expression.literal $loc v }
+ | i = INTEGER { Analyzer.Expression.integer $loc i }
+ | v = variable { Analyzer.Expression.ident v }
+ %prec p_variable
+ | k = FUNCTION
+ arg = argument(expression)
+ {
+ (Analyzer.Expression.function_ $loc k arg)
+ }
+
+unary_operator:
+ | OBJ
+ | LOC
+ | NO { T.No }
+ | MINUS { T.Neg }
+ | PLUS { T.Add }
+
+%inline binary_operator:
+ | EQUAL { T.Eq }
+ | LT GT { T.Neq }
+ | EXCLAMATION { T.Neq }
+ | PLUS { T.Plus }
+ | MINUS { T.Minus }
+ | STAR { T.Product }
+ | DIV { T.Div }
+ | MOD { T.Mod }
+ | GT { T.Gt }
+ | LT { T.Lt }
+ | GT EQUAL { T.Gte }
+ | LT EQUAL { T.Lte }
+ | EQUAL GT { T.Gte }
+ | EQUAL LT { T.Lte }
+ | AND { T.And }
+ | OR { T.Or }
+
+(** Declare a variable, either in the assignation (let var = …) or as a
+ reference is an expression
+ *)
+%public variable:
+ | name = IDENT
+ brackets = delimited(L_BRACKET, expression?, R_BRACKET)?
+ {
+ let index = match brackets with
+ | None ->
+ (* No declaration, consider index at 0 *)
+ Some (Analyzer.Expression.integer dummy_pos "0")
+ | Some other -> other in
+ Analyzer.Expression.{ pos = $loc ; name ; index }
+ }
diff --git a/lib/qsp_instruction.mly b/lib/qsp_instruction.mly
new file mode 100644
index 0000000..cfc6124
--- /dev/null
+++ b/lib/qsp_instruction.mly
@@ -0,0 +1,93 @@
+%%
+
+optionnal_delimited(opening, X, closing):
+ | v = delimited(opening, X, closing) { v }
+ | v = X { v }
+
+argument(X):
+ | a = optionnal_delimited(L_PAREN, arguments(X), R_PAREN) { a }
+ | a = X { [ a ] }
+
+(** At the opposite of an expression, an instruction does not return anything. *)
+%public instruction:
+ | s = single_instruction { s }
+
+(** Action like act or if in a single line *)
+%public inline_action:
+ | a = onliner(ACT)
+ { let loc, label, statements, _, _ = a in
+ Analyzer.Instruction.act loc ~label statements
+ }
+ | a = onliner(IF)
+ else_opt = preceded(ELSE, instruction)?
+ { let loc, expression, statements, loc_s, _body = a in
+ let elifs = []
+ and else_ = Option.to_list else_opt in
+ Analyzer.Instruction.if_
+ loc
+ (loc_s, expression, statements)
+ ~elifs
+ ~else_
+ }
+
+single_instruction:
+ | expr = expression
+ {
+ Analyzer.Instruction.expression expr
+ }
+ | e = let_assignation { e }
+ | k = keyword
+ arg = argument(expression)
+ {
+ Analyzer.Instruction.call $loc k arg
+ }
+
+keyword:
+ | STAR k = KEYWORD { "*" ^ k }
+ | k = KEYWORD { k }
+
+let_assignation:
+ | assignation
+ variable = variable
+ op = assignation_operator
+ value = expression
+ {
+ Analyzer.Instruction.assign $loc variable op value
+ }
+
+%inline assignation:
+ |
+ | LET
+ | SET {}
+
+assignation_operator:
+ | EQUAL { T.Eq' }
+ | INCR { T.Inc }
+ | DECR { T.Decr }
+
+inline_instruction:
+ | hd = inline_instruction
+ tl = single_instruction
+ AMPERSAND+
+ { tl :: hd }
+ |
+ { [] }
+
+final_inline_instruction:
+ | hd = inline_instruction
+ tl = instruction
+ | hd = inline_instruction
+ tl = inline_action
+ { tl :: hd }
+ | hd = inline_instruction
+ COMMENT
+ { (Analyzer.Instruction.comment $loc) :: hd }
+ | hd = inline_instruction
+ { hd }
+
+onliner(TOKEN):
+ | TOKEN
+ e = expression
+ COLUMN
+ s = rev (final_inline_instruction)
+ { $loc, e, s, $loc(s), None }
diff --git a/lib/tokens.mly b/lib/tokens.mly
new file mode 100644
index 0000000..7f907a3
--- /dev/null
+++ b/lib/tokens.mly
@@ -0,0 +1,70 @@
+%token <string>LOCATION_START
+%token LOCATION_END
+
+%token PLUS
+%token MINUS
+%token INCR DECR
+%token STAR
+%token DIV
+%token MOD
+
+%token AMPERSAND
+%token COMA
+%token EQUAL
+%token COLUMN
+%token L_BRACKET R_BRACKET
+%token L_PAREN R_PAREN
+%token LT GT
+%token EXCLAMATION
+%token AND OR
+
+%token EOF
+%token EOL
+
+%token <string>IDENT
+%token <string>LITERAL
+%token <string>INTEGER
+
+%token COMMENT
+
+%token ACT
+%token IF
+%token ELSE
+%token ELIF
+%token END
+%token LET
+%token SET
+%token OBJ
+%token LOC
+%token NO
+%token <string>KEYWORD
+%token <Qsp_syntax.T.function_>FUNCTION
+
+(*
+(b) if the token was declared left-associative, then the conflict is resolved
+in favor of reduction;
+
+(c) if the token was declared right-associative, then the conflict is resolved
+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
+%left PLUS MINUS
+%left STAR DIV
+%left MOD
+%left FUNCTION
+%left L_PAREN
+%right R_PAREN
+%left COMA
+%left KEYWORD
+
+%%