diff --git a/Objects/private/compiler/expression.cpp b/Objects/private/compiler/expression.cpp index 2701a5b..2f52faa 100644 --- a/Objects/private/compiler/expression.cpp +++ b/Objects/private/compiler/expression.cpp @@ -9,7 +9,7 @@ Expression::Expression(Type type) : ExpressionChild* Expression::ExprChild(tp::String id) { return new ExpressionChild(this, id); } -ExpressionCall* Expression::ExprCall(tp::InitialierList args) { return new ExpressionCall(this, args); } +ExpressionCall* Expression::ExprCall(ExpressionList* args) { return new ExpressionCall(this, args); } ExpressionLocal* obj::BCgen::ExprLocal(tp::String id) { return new ExpressionLocal(id); } @@ -17,11 +17,15 @@ ExpressionSelf* obj::BCgen::ExprSelf() { return new ExpressionSelf(); } ExpressionNew* obj::BCgen::ExprNew(tp::String type) { return new ExpressionNew(type); } -ExpressionAriphm* obj::BCgen::ExprAriphm(Expression* left, Expression* right, OpCode type) { return new ExpressionAriphm(left, right, type); } +ExpressionAriphm* obj::BCgen::ExprAriphm(Expression* left, Expression* right, OpCode type) { + return new ExpressionAriphm(left, right, type); +} ExpressionFunc* obj::BCgen::ExprFunc(tp::String id) { return new ExpressionFunc(id); } -ExpressionBoolean* obj::BCgen::ExprBool(Expression* left, Expression* right, obj::OpCode type) { return new ExpressionBoolean(left, right, ExpressionBoolean::BoolType(type)); } +ExpressionBoolean* obj::BCgen::ExprBool(Expression* left, Expression* right, obj::OpCode type) { + return new ExpressionBoolean(left, right, ExpressionBoolean::BoolType(type)); +} ExpressionBoolean* obj::BCgen::ExprBoolNot(Expression* invert) { return new ExpressionBoolean(invert); } @@ -36,12 +40,15 @@ ExpressionBoolean::ExpressionBoolean(Expression* invert) : mLeft(invert), mBoolType(BoolType::NOT) {} -ExpressionCall::ExpressionCall(Expression* mParent, tp::InitialierList args) : +ExpressionCall::ExpressionCall(Expression* mParent, ExpressionList* args) : Expression(Type::CALL), mParent(mParent) { mArgs = args; } +ExpressionList::ExpressionList() : + Expression(Type::LIST) {} + ExpressionNew::ExpressionNew(tp::String type) : Expression(Type::NEW), mNewType(type) {} diff --git a/Objects/private/compiler/function.cpp b/Objects/private/compiler/function.cpp index 037345a..4a74b87 100644 --- a/Objects/private/compiler/function.cpp +++ b/Objects/private/compiler/function.cpp @@ -348,8 +348,8 @@ void FunctionDefinition::EvalExpr(Expression* expr) { case Expression::Type::CALL: { auto call = (ExpressionCall*) expr; - inst(Instruction(OpCode::PUSH_ARGS, call->mArgs.size(), 1)); - for (auto arg : call->mArgs) { + inst(Instruction(OpCode::PUSH_ARGS, call->mArgs->mItems.size(), 1)); + for (auto arg : call->mArgs->mItems) { EvalExpr(arg.data()); } EvalExpr(call->mParent); diff --git a/Objects/private/parser/Bindings.cpp b/Objects/private/parser/Bindings.cpp new file mode 100644 index 0000000..1f1ff64 --- /dev/null +++ b/Objects/private/parser/Bindings.cpp @@ -0,0 +1,186 @@ + +#include "Private.hpp" + +#include + +using namespace obj::BCgen; + +typedef lalr::ParserNode Node; + +static UserData scope(const UserData* start, const Node* nodes, size_t length) { return start[1]; } + +static UserData stm_list_append(const UserData* start, const Node* nodes, size_t length) { + auto scope = (StatementScope*) start[0]; + auto stm = (Statement*) start[2]; + scope->mStatements.append(stm); + return scope; +} + +static UserData stm_list_create(const UserData* start, const Node* nodes, size_t length) { + return new StatementScope({ (Statement*) start[0] }, true); +} + +static UserData stm_log(const UserData* start, const Node* nodes, size_t length) { + auto expr = (Expression*) (start[1]); + return new StatementPrint(expr); +} + +static UserData stm_assign(const UserData* start, const Node* nodes, size_t length) { + return new StatementCopy((Expression*) start[0], (Expression*) start[2]); +} + +static UserData stm_var_def_new_type(const UserData* start, const Node* nodes, size_t length) { + return new StatementLocalDef((char*) nodes[1].lexeme().c_str(), new ExpressionNew((char*) nodes[3].lexeme().c_str())); +} + +static UserData stm_var_def_assign(const UserData* start, const Node* nodes, size_t length) { + return new StatementLocalDef((char*) nodes[1].lexeme().c_str(), (Expression*) start[3]); +} + +static UserData expr_function(const UserData* start, const Node* nodes, size_t length) { + auto expr = (Expression*) (start[0]); + auto args = (ExpressionList*) (start[2]); + return expr->ExprCall(args); +} + +static UserData expr_method(const UserData* start, const Node* nodes, size_t length) { + auto expr = (Expression*) (start[0]); + auto args = (ExpressionList*) (start[4]); + auto childId = nodes[1].lexeme(); + auto method = new ExpressionChild(expr, (char*) childId.c_str()); + return method->ExprCall(args); +} + +static UserData expr_list_append(const UserData* start, const Node* nodes, size_t length) { + auto list = (ExpressionList*) start[0]; + auto expr = (Expression*) start[2]; + list->mItems.append(expr); + return list; +} + +static UserData expr_list_create(const UserData* start, const Node* nodes, size_t length) { + auto exprList = new ExpressionList(); + exprList->mItems.append((Expression*) start[0]); + return exprList; +} + +static UserData expr_child(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionChild((Expression*) start[0], (char*) nodes[2].lexeme().c_str()); +} + +static UserData expr_bool_eq(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionBoolean((Expression*) start[0], (Expression*) start[2], ExpressionBoolean::BoolType::EQUAL); +} + +static UserData expr_bool_negate(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionBoolean((Expression*) start[1]); +} + +static UserData expr_bool_neq(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionBoolean((Expression*) start[0], (Expression*) start[2], ExpressionBoolean::BoolType::NOT_EQUAL); +} + +static UserData expr_bool_grater(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionBoolean((Expression*) start[0], (Expression*) start[2], ExpressionBoolean::BoolType::MORE); +} + +static UserData expr_bool_lesser(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionBoolean((Expression*) start[0], (Expression*) start[2], ExpressionBoolean::BoolType::LESS); +} + +static UserData expr_bool_grater_eq(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionBoolean( + (Expression*) start[0], (Expression*) start[2], ExpressionBoolean::BoolType::EQUAL_OR_MORE + ); +} + +static UserData expr_bool_lesser_eq(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionBoolean( + (Expression*) start[0], (Expression*) start[2], ExpressionBoolean::BoolType::EQUAL_OR_LESS + ); +} + +static UserData expr_add(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionAriphm((Expression*) start[0], (Expression*) start[2], obj::OpCode::OBJ_ADD); +} + +static UserData expr_subtract(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionAriphm((Expression*) start[0], (Expression*) start[2], obj::OpCode::OBJ_SUB); +} + +static UserData expr_multiply(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionAriphm((Expression*) start[0], (Expression*) start[2], obj::OpCode::OBJ_MUL); +} + +static UserData expr_divide(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionAriphm((Expression*) start[0], (Expression*) start[2], obj::OpCode::OBJ_DIV); +} + +static UserData expr_compound(const UserData* start, const Node* nodes, size_t length) { return start[1]; } + +static UserData expr_bool(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionConst(nodes[0].lexeme() == "true"); +} + +static UserData expr_int(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionConst(stoi(nodes[0].lexeme())); +} + +static UserData expr_float(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionConst(stof(nodes[0].lexeme())); +} + +static UserData expr_string(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionConst((char*) nodes[0].lexeme().c_str()); +} + +static UserData expr_id(const UserData* start, const Node* nodes, size_t length) { + return new ExpressionLocal((char*) nodes[0].lexeme().c_str()); +} + +static UserData tmp(const UserData* start, const Node* nodes, size_t length) { + // a + return *start; +} + +#define BIND(name) parser.set_action_handler(#name, &(name)); + +void bind(LalrParser& parser) { + BIND(scope); + + BIND(stm_list_append); + BIND(stm_list_create); + + BIND(expr_list_append); + BIND(expr_list_create); + + BIND(stm_var_def_new_type); + BIND(stm_var_def_assign); + BIND(stm_log); + BIND(stm_assign); + + BIND(expr_function) + BIND(expr_method) + BIND(expr_child) + BIND(expr_bool_eq) + BIND(expr_bool_negate) + BIND(expr_bool_neq) + BIND(expr_bool_grater) + BIND(expr_bool_lesser) + BIND(expr_bool_grater_eq) + BIND(expr_bool_lesser_eq) + BIND(expr_add) + BIND(expr_subtract) + BIND(expr_multiply) + BIND(expr_divide) + BIND(expr_compound) + BIND(expr_bool) + BIND(expr_int) + BIND(expr_float) + BIND(expr_string) + BIND(expr_id) + + BIND(tmp) + + parser.set_lexer_action_handler("string", &lalr::string_literal); +} \ No newline at end of file diff --git a/Objects/private/parser/Private.hpp b/Objects/private/parser/Private.hpp new file mode 100644 index 0000000..90a7e7e --- /dev/null +++ b/Objects/private/parser/Private.hpp @@ -0,0 +1,16 @@ + +#pragma once + +#include +#include + +typedef void* UserData; +typedef char SymbolType; + +typedef std::basic_string::iterator IteratorType; + +extern const lalr::ParserStateMachine* oscript_parser_state_machine; + +typedef lalr::Parser LalrParser; + +void bind(LalrParser& parser); \ No newline at end of file diff --git a/Objects/private/parser/oscript.cpp b/Objects/private/parser/oscript.cpp index 47d5af7..03ec7cc 100644 --- a/Objects/private/parser/oscript.cpp +++ b/Objects/private/parser/oscript.cpp @@ -28,15 +28,35 @@ extern const ParserState states []; const ParserAction actions [] = { {0, "scope"}, - {1, "stm_scope_append"}, - {2, "stm_scope_create"}, + {1, "stm_list_append"}, + {2, "stm_list_create"}, {3, "tmp"}, - {4, "stm_defVar"}, - {5, "stm_log"}, - {6, "expr_bool"}, - {7, "expr_int"}, - {8, "expr_float"}, - {9, "expr_string"}, + {4, "stm_var_def_new_type"}, + {5, "stm_var_def_assign"}, + {6, "stm_log"}, + {7, "stm_assign"}, + {8, "expr_list_append"}, + {9, "expr_list_create"}, + {10, "expr_function"}, + {11, "expr_method"}, + {12, "expr_child"}, + {13, "expr_bool_eq"}, + {14, "expr_bool_negate"}, + {15, "expr_bool_neq"}, + {16, "expr_bool_grater"}, + {17, "expr_bool_lesser"}, + {18, "expr_bool_grater_eq"}, + {19, "expr_bool_lesser_eq"}, + {20, "expr_add"}, + {21, "expr_subtract"}, + {22, "expr_multiply"}, + {23, "expr_divide"}, + {24, "expr_compound"}, + {25, "expr_bool"}, + {26, "expr_int"}, + {27, "expr_float"}, + {28, "expr_string"}, + {29, "expr_id"}, {-1, nullptr} }; @@ -46,76 +66,673 @@ const ParserSymbol symbols [] = {1, (SymbolType) 3, "dot_end", ".end", "dot_end"}, {2, (SymbolType) 1, "error", "error", "error"}, {3, (SymbolType) 1, "dot_whitespace", ".whitespace", "dot_whitespace"}, - {4, (SymbolType) 2, "scope", "scope", "scope"}, - {5, (SymbolType) 1, "left_curly_brace_terminal", "{", "{"}, - {6, (SymbolType) 2, "statements", "statements", "statements"}, - {7, (SymbolType) 1, "right_curly_brace_terminal", "}", "}"}, - {8, (SymbolType) 1, "semi_colon_terminal", ";", ";"}, - {9, (SymbolType) 2, "statement", "statement", "statement"}, - {10, (SymbolType) 2, "statementVar", "statementVar", "statementVar"}, - {11, (SymbolType) 2, "statementLog", "statementLog", "statementLog"}, - {12, (SymbolType) 1, "var_terminal", "var", "var"}, - {13, (SymbolType) 1, "print_terminal", "print", "print"}, - {14, (SymbolType) 2, "value", "value", "value"}, - {15, (SymbolType) 1, "id", "[a-z]", "id"}, - {16, (SymbolType) 1, "boolean", "true|false", "boolean"}, - {17, (SymbolType) 1, "integer", "(\\+|\\-)?[0-9]+", "integer"}, - {18, (SymbolType) 1, "real", "(\\+|\\-)?[0-9]+(\\.[0-9]+)?((e|E)(\\+|\\-)?[0-9]+)?", "real"}, - {19, (SymbolType) 1, "string", "[\\\"']:string:", "string"}, + {4, (SymbolType) 1, "left_paren_terminal", "(", "("}, + {5, (SymbolType) 1, "right_paren_terminal", ")", ")"}, + {6, (SymbolType) 1, "plus_terminal", "+", "+"}, + {7, (SymbolType) 1, "minus_terminal", "-", "-"}, + {8, (SymbolType) 1, "star_terminal", "*", "*"}, + {9, (SymbolType) 1, "slash_terminal", "/", "/"}, + {10, (SymbolType) 1, "dot_terminal", ".", "."}, + {11, (SymbolType) 1, "eq_terminal", "=", "="}, + {12, (SymbolType) 1, "eq__eq_terminal", "==", "=="}, + {13, (SymbolType) 1, "gt_terminal", ">", ">"}, + {14, (SymbolType) 1, "lt_terminal", "<", "<"}, + {15, (SymbolType) 1, "gt__eq_terminal", ">=", ">="}, + {16, (SymbolType) 1, "lt__eq_terminal", "<=", "<="}, + {17, (SymbolType) 1, "bang__eq_terminal", "!=", "!="}, + {18, (SymbolType) 1, "bang_terminal", "!", "!"}, + {19, (SymbolType) 2, "scope", "scope", "scope"}, + {20, (SymbolType) 1, "left_curly_brace_terminal", "{", "{"}, + {21, (SymbolType) 2, "stmts", "stmts", "stmts"}, + {22, (SymbolType) 1, "right_curly_brace_terminal", "}", "}"}, + {23, (SymbolType) 1, "semi_colon_terminal", ";", ";"}, + {24, (SymbolType) 2, "stmt", "stmt", "stmt"}, + {25, (SymbolType) 2, "stm_var_def_new_type", "stm_var_def_new_type", "stm_var_def_new_type"}, + {26, (SymbolType) 2, "stm_var_def_assign", "stm_var_def_assign", "stm_var_def_assign"}, + {27, (SymbolType) 2, "stm_log", "stm_log", "stm_log"}, + {28, (SymbolType) 2, "stm_assign", "stm_assign", "stm_assign"}, + {29, (SymbolType) 1, "var_terminal", "var", "var"}, + {30, (SymbolType) 1, "colon_terminal", ":", ":"}, + {31, (SymbolType) 2, "expr", "expr", "expr"}, + {32, (SymbolType) 1, "print_terminal", "print", "print"}, + {33, (SymbolType) 2, "expr_list", "expr_list", "expr_list"}, + {34, (SymbolType) 1, "comma_terminal", ",", ","}, + {35, (SymbolType) 1, "id", "[a-z]", "id"}, + {36, (SymbolType) 1, "boolean", "true|false", "boolean"}, + {37, (SymbolType) 1, "integer", "(\\+|\\-)?[0-9]+", "integer"}, + {38, (SymbolType) 1, "real", "(\\+|\\-)?[0-9]+(\\.[0-9]+)?((e|E)(\\+|\\-)?[0-9]+)?", "real"}, + {39, (SymbolType) 1, "string", "[\\\"']:string:", "string"}, {-1, (SymbolType) 0, nullptr, nullptr, nullptr} }; const ParserTransition transitions [] = { - {&symbols[4], &states[1], nullptr, 0, 0, 0, 0}, - {&symbols[5], &states[2], nullptr, 0, 0, 0, 1}, - {&symbols[1], nullptr, &symbols[4], 0, 0, -1, 2}, + {&symbols[19], &states[1], nullptr, 0, 0, 0, 0}, + {&symbols[20], &states[2], nullptr, 0, 0, 0, 1}, + {&symbols[1], nullptr, &symbols[19], 0, 0, -1, 2}, {&symbols[1], nullptr, &symbols[0], 1, 0, -1, 3}, - {&symbols[6], &states[3], nullptr, 0, 0, 0, 4}, - {&symbols[9], &states[8], nullptr, 0, 0, 0, 5}, - {&symbols[10], &states[9], nullptr, 0, 0, 0, 6}, - {&symbols[11], &states[10], nullptr, 0, 0, 0, 7}, - {&symbols[12], &states[11], nullptr, 0, 0, 0, 8}, - {&symbols[13], &states[13], nullptr, 0, 0, 0, 9}, - {&symbols[7], nullptr, &symbols[6], 0, 0, -1, 10}, - {&symbols[8], nullptr, &symbols[6], 0, 0, -1, 11}, - {&symbols[7], &states[4], nullptr, 0, 0, 0, 12}, - {&symbols[8], &states[5], nullptr, 0, 0, 0, 13}, - {&symbols[1], nullptr, &symbols[4], 3, 0, 0, 14}, - {&symbols[9], &states[6], nullptr, 0, 0, 0, 15}, - {&symbols[10], &states[9], nullptr, 0, 0, 0, 16}, - {&symbols[11], &states[10], nullptr, 0, 0, 0, 17}, - {&symbols[12], &states[11], nullptr, 0, 0, 0, 18}, - {&symbols[13], &states[13], nullptr, 0, 0, 0, 19}, - {&symbols[8], &states[7], nullptr, 0, 0, 0, 20}, - {&symbols[7], nullptr, &symbols[6], 4, 0, 1, 21}, - {&symbols[8], nullptr, &symbols[6], 4, 0, 1, 22}, - {&symbols[7], nullptr, &symbols[6], 1, 0, 2, 23}, - {&symbols[8], nullptr, &symbols[6], 1, 0, 2, 24}, - {&symbols[7], nullptr, &symbols[9], 1, 0, 3, 25}, - {&symbols[8], nullptr, &symbols[9], 1, 0, 3, 26}, - {&symbols[7], nullptr, &symbols[9], 1, 0, 3, 27}, - {&symbols[8], nullptr, &symbols[9], 1, 0, 3, 28}, - {&symbols[15], &states[12], nullptr, 0, 0, 0, 29}, - {&symbols[7], nullptr, &symbols[10], 2, 0, 4, 30}, - {&symbols[8], nullptr, &symbols[10], 2, 0, 4, 31}, - {&symbols[14], &states[14], nullptr, 0, 0, 0, 32}, - {&symbols[16], &states[15], nullptr, 0, 0, 0, 33}, - {&symbols[17], &states[16], nullptr, 0, 0, 0, 34}, - {&symbols[18], &states[17], nullptr, 0, 0, 0, 35}, - {&symbols[19], &states[18], nullptr, 0, 0, 0, 36}, - {&symbols[7], nullptr, &symbols[14], 0, 0, -1, 37}, - {&symbols[8], nullptr, &symbols[14], 0, 0, -1, 38}, - {&symbols[7], nullptr, &symbols[11], 2, 0, 5, 39}, - {&symbols[8], nullptr, &symbols[11], 2, 0, 5, 40}, - {&symbols[7], nullptr, &symbols[14], 1, 0, 6, 41}, - {&symbols[8], nullptr, &symbols[14], 1, 0, 6, 42}, - {&symbols[7], nullptr, &symbols[14], 1, 0, 7, 43}, - {&symbols[8], nullptr, &symbols[14], 1, 0, 7, 44}, - {&symbols[7], nullptr, &symbols[14], 1, 0, 8, 45}, - {&symbols[8], nullptr, &symbols[14], 1, 0, 8, 46}, - {&symbols[7], nullptr, &symbols[14], 1, 0, 9, 47}, - {&symbols[8], nullptr, &symbols[14], 1, 0, 9, 48}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 4}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 5}, + {&symbols[21], &states[3], nullptr, 0, 0, 0, 6}, + {&symbols[24], &states[8], nullptr, 0, 0, 0, 7}, + {&symbols[25], &states[9], nullptr, 0, 0, 0, 8}, + {&symbols[26], &states[10], nullptr, 0, 0, 0, 9}, + {&symbols[27], &states[11], nullptr, 0, 0, 0, 10}, + {&symbols[28], &states[12], nullptr, 0, 0, 0, 11}, + {&symbols[29], &states[13], nullptr, 0, 0, 0, 12}, + {&symbols[31], &states[21], nullptr, 0, 0, 0, 13}, + {&symbols[32], &states[19], nullptr, 0, 0, 0, 14}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 15}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 16}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 17}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 18}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 19}, + {&symbols[22], nullptr, &symbols[21], 0, 0, -1, 20}, + {&symbols[23], nullptr, &symbols[21], 0, 0, -1, 21}, + {&symbols[22], &states[4], nullptr, 0, 0, 0, 22}, + {&symbols[23], &states[5], nullptr, 0, 0, 0, 23}, + {&symbols[1], nullptr, &symbols[19], 3, 0, 0, 24}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 25}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 26}, + {&symbols[24], &states[6], nullptr, 0, 0, 0, 27}, + {&symbols[25], &states[9], nullptr, 0, 0, 0, 28}, + {&symbols[26], &states[10], nullptr, 0, 0, 0, 29}, + {&symbols[27], &states[11], nullptr, 0, 0, 0, 30}, + {&symbols[28], &states[12], nullptr, 0, 0, 0, 31}, + {&symbols[29], &states[13], nullptr, 0, 0, 0, 32}, + {&symbols[31], &states[21], nullptr, 0, 0, 0, 33}, + {&symbols[32], &states[19], nullptr, 0, 0, 0, 34}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 35}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 36}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 37}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 38}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 39}, + {&symbols[23], &states[7], nullptr, 0, 0, 0, 40}, + {&symbols[22], nullptr, &symbols[21], 4, 0, 1, 41}, + {&symbols[23], nullptr, &symbols[21], 4, 0, 1, 42}, + {&symbols[22], nullptr, &symbols[21], 1, 0, 2, 43}, + {&symbols[23], nullptr, &symbols[21], 1, 0, 2, 44}, + {&symbols[22], nullptr, &symbols[24], 1, 0, 3, 45}, + {&symbols[23], nullptr, &symbols[24], 1, 0, 3, 46}, + {&symbols[22], nullptr, &symbols[24], 1, 0, 3, 47}, + {&symbols[23], nullptr, &symbols[24], 1, 0, 3, 48}, + {&symbols[22], nullptr, &symbols[24], 1, 0, 3, 49}, + {&symbols[23], nullptr, &symbols[24], 1, 0, 3, 50}, + {&symbols[22], nullptr, &symbols[24], 1, 0, 3, 51}, + {&symbols[23], nullptr, &symbols[24], 1, 0, 3, 52}, + {&symbols[35], &states[14], nullptr, 0, 0, 0, 53}, + {&symbols[11], &states[17], nullptr, 0, 0, 0, 54}, + {&symbols[30], &states[15], nullptr, 0, 0, 0, 55}, + {&symbols[35], &states[16], nullptr, 0, 0, 0, 56}, + {&symbols[22], nullptr, &symbols[25], 4, 0, 4, 57}, + {&symbols[23], nullptr, &symbols[25], 4, 0, 4, 58}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 59}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 60}, + {&symbols[31], &states[18], nullptr, 0, 0, 0, 61}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 62}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 63}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 64}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 65}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 66}, + {&symbols[6], &states[39], nullptr, 0, 0, 0, 67}, + {&symbols[7], &states[40], nullptr, 0, 0, 0, 68}, + {&symbols[8], &states[41], nullptr, 0, 0, 0, 69}, + {&symbols[9], &states[42], nullptr, 0, 0, 0, 70}, + {&symbols[10], &states[58], nullptr, 0, 0, 0, 71}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 72}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 73}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 74}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 75}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 76}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 77}, + {&symbols[22], nullptr, &symbols[26], 4, 6, 5, 78}, + {&symbols[23], nullptr, &symbols[26], 4, 6, 5, 79}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 80}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 81}, + {&symbols[31], &states[20], nullptr, 0, 0, 0, 82}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 83}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 84}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 85}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 86}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 87}, + {&symbols[6], &states[39], nullptr, 0, 0, 0, 88}, + {&symbols[7], &states[40], nullptr, 0, 0, 0, 89}, + {&symbols[8], &states[41], nullptr, 0, 0, 0, 90}, + {&symbols[9], &states[42], nullptr, 0, 0, 0, 91}, + {&symbols[10], &states[58], nullptr, 0, 0, 0, 92}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 93}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 94}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 95}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 96}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 97}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 98}, + {&symbols[22], nullptr, &symbols[27], 2, 0, 6, 99}, + {&symbols[23], nullptr, &symbols[27], 2, 0, 6, 100}, + {&symbols[6], &states[39], nullptr, 0, 0, 0, 101}, + {&symbols[7], &states[40], nullptr, 0, 0, 0, 102}, + {&symbols[8], &states[41], nullptr, 0, 0, 0, 103}, + {&symbols[9], &states[42], nullptr, 0, 0, 0, 104}, + {&symbols[10], &states[58], nullptr, 0, 0, 0, 105}, + {&symbols[11], &states[22], nullptr, 0, 0, 0, 106}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 107}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 108}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 109}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 110}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 111}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 112}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 113}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 114}, + {&symbols[31], &states[23], nullptr, 0, 0, 0, 115}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 116}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 117}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 118}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 119}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 120}, + {&symbols[6], &states[39], nullptr, 0, 0, 0, 121}, + {&symbols[7], &states[40], nullptr, 0, 0, 0, 122}, + {&symbols[8], &states[41], nullptr, 0, 0, 0, 123}, + {&symbols[9], &states[42], nullptr, 0, 0, 0, 124}, + {&symbols[10], &states[58], nullptr, 0, 0, 0, 125}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 126}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 127}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 128}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 129}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 130}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 131}, + {&symbols[22], nullptr, &symbols[28], 3, 6, 7, 132}, + {&symbols[23], nullptr, &symbols[28], 3, 6, 7, 133}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 134}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 135}, + {&symbols[31], &states[31], nullptr, 0, 0, 0, 136}, + {&symbols[33], &states[26], nullptr, 0, 0, 0, 137}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 138}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 139}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 140}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 141}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 142}, + {&symbols[5], nullptr, &symbols[33], 0, 0, -1, 143}, + {&symbols[34], nullptr, &symbols[33], 0, 0, -1, 144}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 145}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 146}, + {&symbols[31], &states[31], nullptr, 0, 0, 0, 147}, + {&symbols[33], &states[27], nullptr, 0, 0, 0, 148}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 149}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 150}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 151}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 152}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 153}, + {&symbols[5], nullptr, &symbols[33], 0, 0, -1, 154}, + {&symbols[34], nullptr, &symbols[33], 0, 0, -1, 155}, + {&symbols[5], &states[45], nullptr, 0, 0, 0, 156}, + {&symbols[34], &states[28], nullptr, 0, 0, 0, 157}, + {&symbols[5], &states[60], nullptr, 0, 0, 0, 158}, + {&symbols[34], &states[28], nullptr, 0, 0, 0, 159}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 160}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 161}, + {&symbols[31], &states[29], nullptr, 0, 0, 0, 162}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 163}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 164}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 165}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 166}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 167}, + {&symbols[6], &states[39], nullptr, 0, 0, 0, 168}, + {&symbols[7], &states[40], nullptr, 0, 0, 0, 169}, + {&symbols[8], &states[41], nullptr, 0, 0, 0, 170}, + {&symbols[9], &states[42], nullptr, 0, 0, 0, 171}, + {&symbols[10], &states[58], nullptr, 0, 0, 0, 172}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 173}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 174}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 175}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 176}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 177}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 178}, + {&symbols[34], &states[30], nullptr, 0, 0, 0, 179}, + {&symbols[5], nullptr, &symbols[33], 4, 0, 8, 180}, + {&symbols[34], nullptr, &symbols[33], 4, 0, 8, 181}, + {&symbols[6], &states[39], nullptr, 0, 0, 0, 182}, + {&symbols[7], &states[40], nullptr, 0, 0, 0, 183}, + {&symbols[8], &states[41], nullptr, 0, 0, 0, 184}, + {&symbols[9], &states[42], nullptr, 0, 0, 0, 185}, + {&symbols[10], &states[58], nullptr, 0, 0, 0, 186}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 187}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 188}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 189}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 190}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 191}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 192}, + {&symbols[5], nullptr, &symbols[33], 1, 0, 9, 193}, + {&symbols[34], nullptr, &symbols[33], 1, 0, 9, 194}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 195}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 196}, + {&symbols[31], &states[46], nullptr, 0, 0, 0, 197}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 198}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 199}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 200}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 201}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 202}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 203}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 204}, + {&symbols[31], &states[47], nullptr, 0, 0, 0, 205}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 206}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 207}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 208}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 209}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 210}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 211}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 212}, + {&symbols[31], &states[48], nullptr, 0, 0, 0, 213}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 214}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 215}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 216}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 217}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 218}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 219}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 220}, + {&symbols[31], &states[49], nullptr, 0, 0, 0, 221}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 222}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 223}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 224}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 225}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 226}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 227}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 228}, + {&symbols[31], &states[50], nullptr, 0, 0, 0, 229}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 230}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 231}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 232}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 233}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 234}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 235}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 236}, + {&symbols[31], &states[51], nullptr, 0, 0, 0, 237}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 238}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 239}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 240}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 241}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 242}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 243}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 244}, + {&symbols[31], &states[52], nullptr, 0, 0, 0, 245}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 246}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 247}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 248}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 249}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 250}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 251}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 252}, + {&symbols[31], &states[53], nullptr, 0, 0, 0, 253}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 254}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 255}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 256}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 257}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 258}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 259}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 260}, + {&symbols[31], &states[54], nullptr, 0, 0, 0, 261}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 262}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 263}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 264}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 265}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 266}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 267}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 268}, + {&symbols[31], &states[55], nullptr, 0, 0, 0, 269}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 270}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 271}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 272}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 273}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 274}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 275}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 276}, + {&symbols[31], &states[56], nullptr, 0, 0, 0, 277}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 278}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 279}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 280}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 281}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 282}, + {&symbols[4], &states[43], nullptr, 0, 0, 0, 283}, + {&symbols[18], &states[33], nullptr, 0, 0, 0, 284}, + {&symbols[31], &states[57], nullptr, 0, 0, 0, 285}, + {&symbols[35], &states[44], nullptr, 0, 0, 0, 286}, + {&symbols[36], &states[62], nullptr, 0, 0, 0, 287}, + {&symbols[37], &states[63], nullptr, 0, 0, 0, 288}, + {&symbols[38], &states[64], nullptr, 0, 0, 0, 289}, + {&symbols[39], &states[65], nullptr, 0, 0, 0, 290}, + {&symbols[4], &states[24], nullptr, 0, 0, 0, 291}, + {&symbols[5], nullptr, &symbols[31], 1, 0, 29, 292}, + {&symbols[6], nullptr, &symbols[31], 1, 0, 29, 293}, + {&symbols[7], nullptr, &symbols[31], 1, 0, 29, 294}, + {&symbols[8], nullptr, &symbols[31], 1, 0, 29, 295}, + {&symbols[9], nullptr, &symbols[31], 1, 0, 29, 296}, + {&symbols[10], nullptr, &symbols[31], 1, 0, 29, 297}, + {&symbols[11], nullptr, &symbols[31], 1, 0, 29, 298}, + {&symbols[12], nullptr, &symbols[31], 1, 0, 29, 299}, + {&symbols[13], nullptr, &symbols[31], 1, 0, 29, 300}, + {&symbols[14], nullptr, &symbols[31], 1, 0, 29, 301}, + {&symbols[15], nullptr, &symbols[31], 1, 0, 29, 302}, + {&symbols[16], nullptr, &symbols[31], 1, 0, 29, 303}, + {&symbols[17], nullptr, &symbols[31], 1, 0, 29, 304}, + {&symbols[22], nullptr, &symbols[31], 1, 0, 29, 305}, + {&symbols[23], nullptr, &symbols[31], 1, 0, 29, 306}, + {&symbols[34], nullptr, &symbols[31], 1, 0, 29, 307}, + {&symbols[5], nullptr, &symbols[31], 4, 3, 10, 308}, + {&symbols[6], nullptr, &symbols[31], 4, 3, 10, 309}, + {&symbols[7], nullptr, &symbols[31], 4, 3, 10, 310}, + {&symbols[8], nullptr, &symbols[31], 4, 3, 10, 311}, + {&symbols[9], nullptr, &symbols[31], 4, 3, 10, 312}, + {&symbols[10], nullptr, &symbols[31], 4, 3, 10, 313}, + {&symbols[11], nullptr, &symbols[31], 4, 3, 10, 314}, + {&symbols[12], nullptr, &symbols[31], 4, 3, 10, 315}, + {&symbols[13], nullptr, &symbols[31], 4, 3, 10, 316}, + {&symbols[14], nullptr, &symbols[31], 4, 3, 10, 317}, + {&symbols[15], nullptr, &symbols[31], 4, 3, 10, 318}, + {&symbols[16], nullptr, &symbols[31], 4, 3, 10, 319}, + {&symbols[17], nullptr, &symbols[31], 4, 3, 10, 320}, + {&symbols[22], nullptr, &symbols[31], 4, 3, 10, 321}, + {&symbols[23], nullptr, &symbols[31], 4, 3, 10, 322}, + {&symbols[34], nullptr, &symbols[31], 4, 3, 10, 323}, + {&symbols[6], nullptr, &symbols[31], 3, 7, 13, 324}, + {&symbols[7], nullptr, &symbols[31], 3, 7, 13, 325}, + {&symbols[8], nullptr, &symbols[31], 3, 7, 13, 326}, + {&symbols[9], nullptr, &symbols[31], 3, 7, 13, 327}, + {&symbols[10], nullptr, &symbols[31], 3, 7, 13, 328}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 329}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 330}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 331}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 332}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 333}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 334}, + {&symbols[5], nullptr, &symbols[31], 3, 7, 13, 335}, + {&symbols[11], nullptr, &symbols[31], 3, 7, 13, 336}, + {&symbols[22], nullptr, &symbols[31], 3, 7, 13, 337}, + {&symbols[23], nullptr, &symbols[31], 3, 7, 13, 338}, + {&symbols[34], nullptr, &symbols[31], 3, 7, 13, 339}, + {&symbols[6], nullptr, &symbols[31], 2, 7, 14, 340}, + {&symbols[7], nullptr, &symbols[31], 2, 7, 14, 341}, + {&symbols[8], nullptr, &symbols[31], 2, 7, 14, 342}, + {&symbols[9], nullptr, &symbols[31], 2, 7, 14, 343}, + {&symbols[10], nullptr, &symbols[31], 2, 7, 14, 344}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 345}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 346}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 347}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 348}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 349}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 350}, + {&symbols[5], nullptr, &symbols[31], 2, 7, 14, 351}, + {&symbols[11], nullptr, &symbols[31], 2, 7, 14, 352}, + {&symbols[22], nullptr, &symbols[31], 2, 7, 14, 353}, + {&symbols[23], nullptr, &symbols[31], 2, 7, 14, 354}, + {&symbols[34], nullptr, &symbols[31], 2, 7, 14, 355}, + {&symbols[6], nullptr, &symbols[31], 3, 7, 15, 356}, + {&symbols[7], nullptr, &symbols[31], 3, 7, 15, 357}, + {&symbols[8], nullptr, &symbols[31], 3, 7, 15, 358}, + {&symbols[9], nullptr, &symbols[31], 3, 7, 15, 359}, + {&symbols[10], nullptr, &symbols[31], 3, 7, 15, 360}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 361}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 362}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 363}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 364}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 365}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 366}, + {&symbols[5], nullptr, &symbols[31], 3, 7, 15, 367}, + {&symbols[11], nullptr, &symbols[31], 3, 7, 15, 368}, + {&symbols[22], nullptr, &symbols[31], 3, 7, 15, 369}, + {&symbols[23], nullptr, &symbols[31], 3, 7, 15, 370}, + {&symbols[34], nullptr, &symbols[31], 3, 7, 15, 371}, + {&symbols[6], nullptr, &symbols[31], 3, 7, 16, 372}, + {&symbols[7], nullptr, &symbols[31], 3, 7, 16, 373}, + {&symbols[8], nullptr, &symbols[31], 3, 7, 16, 374}, + {&symbols[9], nullptr, &symbols[31], 3, 7, 16, 375}, + {&symbols[10], nullptr, &symbols[31], 3, 7, 16, 376}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 377}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 378}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 379}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 380}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 381}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 382}, + {&symbols[5], nullptr, &symbols[31], 3, 7, 16, 383}, + {&symbols[11], nullptr, &symbols[31], 3, 7, 16, 384}, + {&symbols[22], nullptr, &symbols[31], 3, 7, 16, 385}, + {&symbols[23], nullptr, &symbols[31], 3, 7, 16, 386}, + {&symbols[34], nullptr, &symbols[31], 3, 7, 16, 387}, + {&symbols[6], nullptr, &symbols[31], 3, 7, 17, 388}, + {&symbols[7], nullptr, &symbols[31], 3, 7, 17, 389}, + {&symbols[8], nullptr, &symbols[31], 3, 7, 17, 390}, + {&symbols[9], nullptr, &symbols[31], 3, 7, 17, 391}, + {&symbols[10], nullptr, &symbols[31], 3, 7, 17, 392}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 393}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 394}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 395}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 396}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 397}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 398}, + {&symbols[5], nullptr, &symbols[31], 3, 7, 17, 399}, + {&symbols[11], nullptr, &symbols[31], 3, 7, 17, 400}, + {&symbols[22], nullptr, &symbols[31], 3, 7, 17, 401}, + {&symbols[23], nullptr, &symbols[31], 3, 7, 17, 402}, + {&symbols[34], nullptr, &symbols[31], 3, 7, 17, 403}, + {&symbols[6], nullptr, &symbols[31], 3, 7, 18, 404}, + {&symbols[7], nullptr, &symbols[31], 3, 7, 18, 405}, + {&symbols[8], nullptr, &symbols[31], 3, 7, 18, 406}, + {&symbols[9], nullptr, &symbols[31], 3, 7, 18, 407}, + {&symbols[10], nullptr, &symbols[31], 3, 7, 18, 408}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 409}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 410}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 411}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 412}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 413}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 414}, + {&symbols[5], nullptr, &symbols[31], 3, 7, 18, 415}, + {&symbols[11], nullptr, &symbols[31], 3, 7, 18, 416}, + {&symbols[22], nullptr, &symbols[31], 3, 7, 18, 417}, + {&symbols[23], nullptr, &symbols[31], 3, 7, 18, 418}, + {&symbols[34], nullptr, &symbols[31], 3, 7, 18, 419}, + {&symbols[6], nullptr, &symbols[31], 3, 7, 19, 420}, + {&symbols[7], nullptr, &symbols[31], 3, 7, 19, 421}, + {&symbols[8], nullptr, &symbols[31], 3, 7, 19, 422}, + {&symbols[9], nullptr, &symbols[31], 3, 7, 19, 423}, + {&symbols[10], nullptr, &symbols[31], 3, 7, 19, 424}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 425}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 426}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 427}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 428}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 429}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 430}, + {&symbols[5], nullptr, &symbols[31], 3, 7, 19, 431}, + {&symbols[11], nullptr, &symbols[31], 3, 7, 19, 432}, + {&symbols[22], nullptr, &symbols[31], 3, 7, 19, 433}, + {&symbols[23], nullptr, &symbols[31], 3, 7, 19, 434}, + {&symbols[34], nullptr, &symbols[31], 3, 7, 19, 435}, + {&symbols[6], &states[39], nullptr, 0, 0, 0, 436}, + {&symbols[7], &states[40], nullptr, 0, 0, 0, 437}, + {&symbols[8], &states[41], nullptr, 0, 0, 0, 438}, + {&symbols[9], &states[42], nullptr, 0, 0, 0, 439}, + {&symbols[10], &states[58], nullptr, 0, 0, 0, 440}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 441}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 442}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 443}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 444}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 445}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 446}, + {&symbols[5], nullptr, &symbols[31], 3, 4, 20, 447}, + {&symbols[11], nullptr, &symbols[31], 3, 4, 20, 448}, + {&symbols[22], nullptr, &symbols[31], 3, 4, 20, 449}, + {&symbols[23], nullptr, &symbols[31], 3, 4, 20, 450}, + {&symbols[34], nullptr, &symbols[31], 3, 4, 20, 451}, + {&symbols[6], &states[39], nullptr, 0, 0, 0, 452}, + {&symbols[7], &states[40], nullptr, 0, 0, 0, 453}, + {&symbols[8], &states[41], nullptr, 0, 0, 0, 454}, + {&symbols[9], &states[42], nullptr, 0, 0, 0, 455}, + {&symbols[10], &states[58], nullptr, 0, 0, 0, 456}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 457}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 458}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 459}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 460}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 461}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 462}, + {&symbols[5], nullptr, &symbols[31], 3, 4, 21, 463}, + {&symbols[11], nullptr, &symbols[31], 3, 4, 21, 464}, + {&symbols[22], nullptr, &symbols[31], 3, 4, 21, 465}, + {&symbols[23], nullptr, &symbols[31], 3, 4, 21, 466}, + {&symbols[34], nullptr, &symbols[31], 3, 4, 21, 467}, + {&symbols[6], nullptr, &symbols[31], 3, 5, 22, 468}, + {&symbols[7], nullptr, &symbols[31], 3, 5, 22, 469}, + {&symbols[8], &states[41], nullptr, 0, 0, 0, 470}, + {&symbols[9], &states[42], nullptr, 0, 0, 0, 471}, + {&symbols[10], &states[58], nullptr, 0, 0, 0, 472}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 473}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 474}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 475}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 476}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 477}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 478}, + {&symbols[5], nullptr, &symbols[31], 3, 5, 22, 479}, + {&symbols[11], nullptr, &symbols[31], 3, 5, 22, 480}, + {&symbols[22], nullptr, &symbols[31], 3, 5, 22, 481}, + {&symbols[23], nullptr, &symbols[31], 3, 5, 22, 482}, + {&symbols[34], nullptr, &symbols[31], 3, 5, 22, 483}, + {&symbols[6], nullptr, &symbols[31], 3, 5, 23, 484}, + {&symbols[7], nullptr, &symbols[31], 3, 5, 23, 485}, + {&symbols[8], &states[41], nullptr, 0, 0, 0, 486}, + {&symbols[9], &states[42], nullptr, 0, 0, 0, 487}, + {&symbols[10], &states[58], nullptr, 0, 0, 0, 488}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 489}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 490}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 491}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 492}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 493}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 494}, + {&symbols[5], nullptr, &symbols[31], 3, 5, 23, 495}, + {&symbols[11], nullptr, &symbols[31], 3, 5, 23, 496}, + {&symbols[22], nullptr, &symbols[31], 3, 5, 23, 497}, + {&symbols[23], nullptr, &symbols[31], 3, 5, 23, 498}, + {&symbols[34], nullptr, &symbols[31], 3, 5, 23, 499}, + {&symbols[5], &states[61], nullptr, 0, 0, 0, 500}, + {&symbols[6], &states[39], nullptr, 0, 0, 0, 501}, + {&symbols[7], &states[40], nullptr, 0, 0, 0, 502}, + {&symbols[8], &states[41], nullptr, 0, 0, 0, 503}, + {&symbols[9], &states[42], nullptr, 0, 0, 0, 504}, + {&symbols[10], &states[58], nullptr, 0, 0, 0, 505}, + {&symbols[12], &states[32], nullptr, 0, 0, 0, 506}, + {&symbols[13], &states[35], nullptr, 0, 0, 0, 507}, + {&symbols[14], &states[36], nullptr, 0, 0, 0, 508}, + {&symbols[15], &states[37], nullptr, 0, 0, 0, 509}, + {&symbols[16], &states[38], nullptr, 0, 0, 0, 510}, + {&symbols[17], &states[34], nullptr, 0, 0, 0, 511}, + {&symbols[35], &states[59], nullptr, 0, 0, 0, 512}, + {&symbols[4], &states[25], nullptr, 0, 0, 0, 513}, + {&symbols[5], nullptr, &symbols[31], 3, 0, 12, 514}, + {&symbols[6], nullptr, &symbols[31], 3, 0, 12, 515}, + {&symbols[7], nullptr, &symbols[31], 3, 0, 12, 516}, + {&symbols[8], nullptr, &symbols[31], 3, 0, 12, 517}, + {&symbols[9], nullptr, &symbols[31], 3, 0, 12, 518}, + {&symbols[10], nullptr, &symbols[31], 3, 0, 12, 519}, + {&symbols[11], nullptr, &symbols[31], 3, 0, 12, 520}, + {&symbols[12], nullptr, &symbols[31], 3, 0, 12, 521}, + {&symbols[13], nullptr, &symbols[31], 3, 0, 12, 522}, + {&symbols[14], nullptr, &symbols[31], 3, 0, 12, 523}, + {&symbols[15], nullptr, &symbols[31], 3, 0, 12, 524}, + {&symbols[16], nullptr, &symbols[31], 3, 0, 12, 525}, + {&symbols[17], nullptr, &symbols[31], 3, 0, 12, 526}, + {&symbols[22], nullptr, &symbols[31], 3, 0, 12, 527}, + {&symbols[23], nullptr, &symbols[31], 3, 0, 12, 528}, + {&symbols[34], nullptr, &symbols[31], 3, 0, 12, 529}, + {&symbols[5], nullptr, &symbols[31], 6, 3, 11, 530}, + {&symbols[6], nullptr, &symbols[31], 6, 3, 11, 531}, + {&symbols[7], nullptr, &symbols[31], 6, 3, 11, 532}, + {&symbols[8], nullptr, &symbols[31], 6, 3, 11, 533}, + {&symbols[9], nullptr, &symbols[31], 6, 3, 11, 534}, + {&symbols[10], nullptr, &symbols[31], 6, 3, 11, 535}, + {&symbols[11], nullptr, &symbols[31], 6, 3, 11, 536}, + {&symbols[12], nullptr, &symbols[31], 6, 3, 11, 537}, + {&symbols[13], nullptr, &symbols[31], 6, 3, 11, 538}, + {&symbols[14], nullptr, &symbols[31], 6, 3, 11, 539}, + {&symbols[15], nullptr, &symbols[31], 6, 3, 11, 540}, + {&symbols[16], nullptr, &symbols[31], 6, 3, 11, 541}, + {&symbols[17], nullptr, &symbols[31], 6, 3, 11, 542}, + {&symbols[22], nullptr, &symbols[31], 6, 3, 11, 543}, + {&symbols[23], nullptr, &symbols[31], 6, 3, 11, 544}, + {&symbols[34], nullptr, &symbols[31], 6, 3, 11, 545}, + {&symbols[5], nullptr, &symbols[31], 3, 3, 24, 546}, + {&symbols[6], nullptr, &symbols[31], 3, 3, 24, 547}, + {&symbols[7], nullptr, &symbols[31], 3, 3, 24, 548}, + {&symbols[8], nullptr, &symbols[31], 3, 3, 24, 549}, + {&symbols[9], nullptr, &symbols[31], 3, 3, 24, 550}, + {&symbols[10], nullptr, &symbols[31], 3, 3, 24, 551}, + {&symbols[11], nullptr, &symbols[31], 3, 3, 24, 552}, + {&symbols[12], nullptr, &symbols[31], 3, 3, 24, 553}, + {&symbols[13], nullptr, &symbols[31], 3, 3, 24, 554}, + {&symbols[14], nullptr, &symbols[31], 3, 3, 24, 555}, + {&symbols[15], nullptr, &symbols[31], 3, 3, 24, 556}, + {&symbols[16], nullptr, &symbols[31], 3, 3, 24, 557}, + {&symbols[17], nullptr, &symbols[31], 3, 3, 24, 558}, + {&symbols[22], nullptr, &symbols[31], 3, 3, 24, 559}, + {&symbols[23], nullptr, &symbols[31], 3, 3, 24, 560}, + {&symbols[34], nullptr, &symbols[31], 3, 3, 24, 561}, + {&symbols[5], nullptr, &symbols[31], 1, 0, 25, 562}, + {&symbols[6], nullptr, &symbols[31], 1, 0, 25, 563}, + {&symbols[7], nullptr, &symbols[31], 1, 0, 25, 564}, + {&symbols[8], nullptr, &symbols[31], 1, 0, 25, 565}, + {&symbols[9], nullptr, &symbols[31], 1, 0, 25, 566}, + {&symbols[10], nullptr, &symbols[31], 1, 0, 25, 567}, + {&symbols[11], nullptr, &symbols[31], 1, 0, 25, 568}, + {&symbols[12], nullptr, &symbols[31], 1, 0, 25, 569}, + {&symbols[13], nullptr, &symbols[31], 1, 0, 25, 570}, + {&symbols[14], nullptr, &symbols[31], 1, 0, 25, 571}, + {&symbols[15], nullptr, &symbols[31], 1, 0, 25, 572}, + {&symbols[16], nullptr, &symbols[31], 1, 0, 25, 573}, + {&symbols[17], nullptr, &symbols[31], 1, 0, 25, 574}, + {&symbols[22], nullptr, &symbols[31], 1, 0, 25, 575}, + {&symbols[23], nullptr, &symbols[31], 1, 0, 25, 576}, + {&symbols[34], nullptr, &symbols[31], 1, 0, 25, 577}, + {&symbols[5], nullptr, &symbols[31], 1, 2, 26, 578}, + {&symbols[6], nullptr, &symbols[31], 1, 2, 26, 579}, + {&symbols[7], nullptr, &symbols[31], 1, 2, 26, 580}, + {&symbols[8], nullptr, &symbols[31], 1, 2, 26, 581}, + {&symbols[9], nullptr, &symbols[31], 1, 2, 26, 582}, + {&symbols[10], nullptr, &symbols[31], 1, 2, 26, 583}, + {&symbols[11], nullptr, &symbols[31], 1, 2, 26, 584}, + {&symbols[12], nullptr, &symbols[31], 1, 2, 26, 585}, + {&symbols[13], nullptr, &symbols[31], 1, 2, 26, 586}, + {&symbols[14], nullptr, &symbols[31], 1, 2, 26, 587}, + {&symbols[15], nullptr, &symbols[31], 1, 2, 26, 588}, + {&symbols[16], nullptr, &symbols[31], 1, 2, 26, 589}, + {&symbols[17], nullptr, &symbols[31], 1, 2, 26, 590}, + {&symbols[22], nullptr, &symbols[31], 1, 2, 26, 591}, + {&symbols[23], nullptr, &symbols[31], 1, 2, 26, 592}, + {&symbols[34], nullptr, &symbols[31], 1, 2, 26, 593}, + {&symbols[5], nullptr, &symbols[31], 1, 0, 27, 594}, + {&symbols[6], nullptr, &symbols[31], 1, 0, 27, 595}, + {&symbols[7], nullptr, &symbols[31], 1, 0, 27, 596}, + {&symbols[8], nullptr, &symbols[31], 1, 0, 27, 597}, + {&symbols[9], nullptr, &symbols[31], 1, 0, 27, 598}, + {&symbols[10], nullptr, &symbols[31], 1, 0, 27, 599}, + {&symbols[11], nullptr, &symbols[31], 1, 0, 27, 600}, + {&symbols[12], nullptr, &symbols[31], 1, 0, 27, 601}, + {&symbols[13], nullptr, &symbols[31], 1, 0, 27, 602}, + {&symbols[14], nullptr, &symbols[31], 1, 0, 27, 603}, + {&symbols[15], nullptr, &symbols[31], 1, 0, 27, 604}, + {&symbols[16], nullptr, &symbols[31], 1, 0, 27, 605}, + {&symbols[17], nullptr, &symbols[31], 1, 0, 27, 606}, + {&symbols[22], nullptr, &symbols[31], 1, 0, 27, 607}, + {&symbols[23], nullptr, &symbols[31], 1, 0, 27, 608}, + {&symbols[34], nullptr, &symbols[31], 1, 0, 27, 609}, + {&symbols[5], nullptr, &symbols[31], 1, 0, 28, 610}, + {&symbols[6], nullptr, &symbols[31], 1, 0, 28, 611}, + {&symbols[7], nullptr, &symbols[31], 1, 0, 28, 612}, + {&symbols[8], nullptr, &symbols[31], 1, 0, 28, 613}, + {&symbols[9], nullptr, &symbols[31], 1, 0, 28, 614}, + {&symbols[10], nullptr, &symbols[31], 1, 0, 28, 615}, + {&symbols[11], nullptr, &symbols[31], 1, 0, 28, 616}, + {&symbols[12], nullptr, &symbols[31], 1, 0, 28, 617}, + {&symbols[13], nullptr, &symbols[31], 1, 0, 28, 618}, + {&symbols[14], nullptr, &symbols[31], 1, 0, 28, 619}, + {&symbols[15], nullptr, &symbols[31], 1, 0, 28, 620}, + {&symbols[16], nullptr, &symbols[31], 1, 0, 28, 621}, + {&symbols[17], nullptr, &symbols[31], 1, 0, 28, 622}, + {&symbols[22], nullptr, &symbols[31], 1, 0, 28, 623}, + {&symbols[23], nullptr, &symbols[31], 1, 0, 28, 624}, + {&symbols[34], nullptr, &symbols[31], 1, 0, 28, 625}, {nullptr, nullptr, nullptr, 0, 0, 0, -1} }; @@ -123,23 +740,70 @@ const ParserState states [] = { {0, 3, &transitions[0], "(null)"}, {1, 1, &transitions[3], "(null)"}, - {2, 8, &transitions[4], "(null)"}, - {3, 2, &transitions[12], "(null)"}, - {4, 1, &transitions[14], "(null)"}, - {5, 5, &transitions[15], "(null)"}, - {6, 1, &transitions[20], "(null)"}, - {7, 2, &transitions[21], "(null)"}, - {8, 2, &transitions[23], "(null)"}, - {9, 2, &transitions[25], "(null)"}, - {10, 2, &transitions[27], "(null)"}, - {11, 1, &transitions[29], "(null)"}, - {12, 2, &transitions[30], "(null)"}, - {13, 7, &transitions[32], "(null)"}, - {14, 2, &transitions[39], "(null)"}, - {15, 2, &transitions[41], "(null)"}, - {16, 2, &transitions[43], "(null)"}, - {17, 2, &transitions[45], "(null)"}, - {18, 2, &transitions[47], "(null)"}, + {2, 18, &transitions[4], "(null)"}, + {3, 2, &transitions[22], "(null)"}, + {4, 1, &transitions[24], "(null)"}, + {5, 15, &transitions[25], "(null)"}, + {6, 1, &transitions[40], "(null)"}, + {7, 2, &transitions[41], "(null)"}, + {8, 2, &transitions[43], "(null)"}, + {9, 2, &transitions[45], "(null)"}, + {10, 2, &transitions[47], "(null)"}, + {11, 2, &transitions[49], "(null)"}, + {12, 2, &transitions[51], "(null)"}, + {13, 1, &transitions[53], "(null)"}, + {14, 2, &transitions[54], "(null)"}, + {15, 1, &transitions[56], "(null)"}, + {16, 2, &transitions[57], "(null)"}, + {17, 8, &transitions[59], "(null)"}, + {18, 13, &transitions[67], "(null)"}, + {19, 8, &transitions[80], "(null)"}, + {20, 13, &transitions[88], "(null)"}, + {21, 12, &transitions[101], "(null)"}, + {22, 8, &transitions[113], "(null)"}, + {23, 13, &transitions[121], "(null)"}, + {24, 11, &transitions[134], "(null)"}, + {25, 11, &transitions[145], "(null)"}, + {26, 2, &transitions[156], "(null)"}, + {27, 2, &transitions[158], "(null)"}, + {28, 8, &transitions[160], "(null)"}, + {29, 12, &transitions[168], "(null)"}, + {30, 2, &transitions[180], "(null)"}, + {31, 13, &transitions[182], "(null)"}, + {32, 8, &transitions[195], "(null)"}, + {33, 8, &transitions[203], "(null)"}, + {34, 8, &transitions[211], "(null)"}, + {35, 8, &transitions[219], "(null)"}, + {36, 8, &transitions[227], "(null)"}, + {37, 8, &transitions[235], "(null)"}, + {38, 8, &transitions[243], "(null)"}, + {39, 8, &transitions[251], "(null)"}, + {40, 8, &transitions[259], "(null)"}, + {41, 8, &transitions[267], "(null)"}, + {42, 8, &transitions[275], "(null)"}, + {43, 8, &transitions[283], "(null)"}, + {44, 17, &transitions[291], "(null)"}, + {45, 16, &transitions[308], "(null)"}, + {46, 16, &transitions[324], "(null)"}, + {47, 16, &transitions[340], "(null)"}, + {48, 16, &transitions[356], "(null)"}, + {49, 16, &transitions[372], "(null)"}, + {50, 16, &transitions[388], "(null)"}, + {51, 16, &transitions[404], "(null)"}, + {52, 16, &transitions[420], "(null)"}, + {53, 16, &transitions[436], "(null)"}, + {54, 16, &transitions[452], "(null)"}, + {55, 16, &transitions[468], "(null)"}, + {56, 16, &transitions[484], "(null)"}, + {57, 12, &transitions[500], "(null)"}, + {58, 1, &transitions[512], "(null)"}, + {59, 17, &transitions[513], "(null)"}, + {60, 16, &transitions[530], "(null)"}, + {61, 16, &transitions[546], "(null)"}, + {62, 16, &transitions[562], "(null)"}, + {63, 16, &transitions[578], "(null)"}, + {64, 16, &transitions[594], "(null)"}, + {65, 16, &transitions[610], "(null)"}, {-1, 0, nullptr} }; @@ -151,25 +815,35 @@ const LexerAction lexer_actions [] = const LexerTransition lexer_transitions [] = { - {34, 35, &lexer_states[45], nullptr}, - {39, 40, &lexer_states[45], nullptr}, - {43, 44, &lexer_states[38], nullptr}, - {45, 46, &lexer_states[38], nullptr}, + {33, 34, &lexer_states[29], nullptr}, + {34, 35, &lexer_states[60], nullptr}, + {39, 40, &lexer_states[60], nullptr}, + {40, 41, &lexer_states[17], nullptr}, + {41, 42, &lexer_states[18], nullptr}, + {42, 43, &lexer_states[21], nullptr}, + {43, 44, &lexer_states[19], nullptr}, + {44, 45, &lexer_states[43], nullptr}, + {45, 46, &lexer_states[20], nullptr}, {46, 47, &lexer_states[6], nullptr}, - {48, 58, &lexer_states[37], nullptr}, - {59, 60, &lexer_states[19], nullptr}, - {97, 101, &lexer_states[28], nullptr}, + {47, 48, &lexer_states[22], nullptr}, + {48, 58, &lexer_states[53], nullptr}, + {58, 59, &lexer_states[37], nullptr}, + {59, 60, &lexer_states[33], nullptr}, + {60, 61, &lexer_states[26], nullptr}, + {61, 62, &lexer_states[23], nullptr}, + {62, 63, &lexer_states[25], nullptr}, + {97, 101, &lexer_states[44], nullptr}, {101, 102, &lexer_states[1], nullptr}, - {102, 103, &lexer_states[30], nullptr}, - {103, 112, &lexer_states[28], nullptr}, - {112, 113, &lexer_states[23], nullptr}, - {113, 116, &lexer_states[28], nullptr}, - {116, 117, &lexer_states[29], nullptr}, - {117, 118, &lexer_states[28], nullptr}, - {118, 119, &lexer_states[20], nullptr}, - {119, 123, &lexer_states[28], nullptr}, - {123, 124, &lexer_states[17], nullptr}, - {125, 126, &lexer_states[18], nullptr}, + {102, 103, &lexer_states[46], nullptr}, + {103, 112, &lexer_states[44], nullptr}, + {112, 113, &lexer_states[38], nullptr}, + {113, 116, &lexer_states[44], nullptr}, + {116, 117, &lexer_states[45], nullptr}, + {117, 118, &lexer_states[44], nullptr}, + {118, 119, &lexer_states[34], nullptr}, + {119, 123, &lexer_states[44], nullptr}, + {123, 124, &lexer_states[31], nullptr}, + {125, 126, &lexer_states[32], nullptr}, {114, 115, &lexer_states[2], nullptr}, {114, 115, &lexer_states[3], nullptr}, {111, 112, &lexer_states[4], nullptr}, @@ -184,93 +858,113 @@ const LexerTransition lexer_transitions [] = {97, 98, &lexer_states[14], nullptr}, {99, 100, &lexer_states[15], nullptr}, {101, 102, &lexer_states[16], nullptr}, - {97, 98, &lexer_states[21], nullptr}, - {114, 115, &lexer_states[22], nullptr}, - {114, 115, &lexer_states[24], nullptr}, - {105, 106, &lexer_states[25], nullptr}, - {110, 111, &lexer_states[26], nullptr}, - {116, 117, &lexer_states[27], nullptr}, - {114, 115, &lexer_states[31], nullptr}, - {97, 98, &lexer_states[33], nullptr}, - {117, 118, &lexer_states[32], nullptr}, - {101, 102, &lexer_states[36], nullptr}, - {108, 109, &lexer_states[34], nullptr}, - {115, 116, &lexer_states[35], nullptr}, - {101, 102, &lexer_states[36], nullptr}, - {46, 47, &lexer_states[39], nullptr}, - {48, 58, &lexer_states[37], nullptr}, - {69, 70, &lexer_states[41], nullptr}, - {101, 102, &lexer_states[41], nullptr}, - {48, 58, &lexer_states[37], nullptr}, - {48, 58, &lexer_states[40], nullptr}, - {48, 58, &lexer_states[40], nullptr}, - {69, 70, &lexer_states[41], nullptr}, - {101, 102, &lexer_states[41], nullptr}, - {43, 44, &lexer_states[42], nullptr}, - {45, 46, &lexer_states[42], nullptr}, - {48, 58, &lexer_states[43], nullptr}, - {48, 58, &lexer_states[43], nullptr}, - {48, 58, &lexer_states[43], nullptr}, - {0, 2147483647, &lexer_states[44], &lexer_actions[0]}, + {48, 58, &lexer_states[53], nullptr}, + {48, 58, &lexer_states[53], nullptr}, + {61, 62, &lexer_states[24], nullptr}, + {61, 62, &lexer_states[27], nullptr}, + {61, 62, &lexer_states[28], nullptr}, + {61, 62, &lexer_states[30], nullptr}, + {97, 98, &lexer_states[35], nullptr}, + {114, 115, &lexer_states[36], nullptr}, + {114, 115, &lexer_states[39], nullptr}, + {105, 106, &lexer_states[40], nullptr}, + {110, 111, &lexer_states[41], nullptr}, + {116, 117, &lexer_states[42], nullptr}, + {114, 115, &lexer_states[47], nullptr}, + {97, 98, &lexer_states[49], nullptr}, + {117, 118, &lexer_states[48], nullptr}, + {101, 102, &lexer_states[52], nullptr}, + {108, 109, &lexer_states[50], nullptr}, + {115, 116, &lexer_states[51], nullptr}, + {101, 102, &lexer_states[52], nullptr}, + {46, 47, &lexer_states[54], nullptr}, + {48, 58, &lexer_states[53], nullptr}, + {69, 70, &lexer_states[56], nullptr}, + {101, 102, &lexer_states[56], nullptr}, + {48, 58, &lexer_states[55], nullptr}, + {48, 58, &lexer_states[55], nullptr}, + {69, 70, &lexer_states[56], nullptr}, + {101, 102, &lexer_states[56], nullptr}, + {43, 44, &lexer_states[57], nullptr}, + {45, 46, &lexer_states[57], nullptr}, + {48, 58, &lexer_states[58], nullptr}, + {48, 58, &lexer_states[58], nullptr}, + {48, 58, &lexer_states[58], nullptr}, + {0, 2147483647, &lexer_states[59], &lexer_actions[0]}, {-1, -1, nullptr, nullptr} }; const LexerState lexer_states [] = { - {0, 19, &lexer_transitions[0], nullptr}, - {1, 1, &lexer_transitions[19], &symbols[15]}, - {2, 1, &lexer_transitions[20], nullptr}, - {3, 1, &lexer_transitions[21], nullptr}, - {4, 1, &lexer_transitions[22], nullptr}, - {5, 0, &lexer_transitions[23], &symbols[2]}, - {6, 1, &lexer_transitions[23], nullptr}, - {7, 1, &lexer_transitions[24], nullptr}, - {8, 1, &lexer_transitions[25], nullptr}, - {9, 1, &lexer_transitions[26], nullptr}, - {10, 1, &lexer_transitions[27], nullptr}, - {11, 1, &lexer_transitions[28], nullptr}, - {12, 1, &lexer_transitions[29], nullptr}, - {13, 1, &lexer_transitions[30], nullptr}, - {14, 1, &lexer_transitions[31], nullptr}, - {15, 1, &lexer_transitions[32], nullptr}, - {16, 0, &lexer_transitions[33], &symbols[3]}, - {17, 0, &lexer_transitions[33], &symbols[5]}, - {18, 0, &lexer_transitions[33], &symbols[7]}, - {19, 0, &lexer_transitions[33], &symbols[8]}, - {20, 1, &lexer_transitions[33], &symbols[15]}, - {21, 1, &lexer_transitions[34], nullptr}, - {22, 0, &lexer_transitions[35], &symbols[12]}, - {23, 1, &lexer_transitions[35], &symbols[15]}, - {24, 1, &lexer_transitions[36], nullptr}, - {25, 1, &lexer_transitions[37], nullptr}, - {26, 1, &lexer_transitions[38], nullptr}, - {27, 0, &lexer_transitions[39], &symbols[13]}, - {28, 0, &lexer_transitions[39], &symbols[15]}, - {29, 1, &lexer_transitions[39], &symbols[15]}, - {30, 1, &lexer_transitions[40], &symbols[15]}, - {31, 1, &lexer_transitions[41], nullptr}, - {32, 1, &lexer_transitions[42], nullptr}, - {33, 1, &lexer_transitions[43], nullptr}, - {34, 1, &lexer_transitions[44], nullptr}, - {35, 1, &lexer_transitions[45], nullptr}, - {36, 0, &lexer_transitions[46], &symbols[16]}, - {37, 4, &lexer_transitions[46], &symbols[17]}, - {38, 1, &lexer_transitions[50], nullptr}, - {39, 1, &lexer_transitions[51], nullptr}, - {40, 3, &lexer_transitions[52], &symbols[18]}, - {41, 3, &lexer_transitions[55], nullptr}, - {42, 1, &lexer_transitions[58], nullptr}, - {43, 1, &lexer_transitions[59], &symbols[18]}, - {44, 0, &lexer_transitions[60], &symbols[19]}, - {45, 1, &lexer_transitions[60], nullptr}, + {0, 29, &lexer_transitions[0], nullptr}, + {1, 1, &lexer_transitions[29], &symbols[35]}, + {2, 1, &lexer_transitions[30], nullptr}, + {3, 1, &lexer_transitions[31], nullptr}, + {4, 1, &lexer_transitions[32], nullptr}, + {5, 0, &lexer_transitions[33], &symbols[2]}, + {6, 1, &lexer_transitions[33], &symbols[10]}, + {7, 1, &lexer_transitions[34], nullptr}, + {8, 1, &lexer_transitions[35], nullptr}, + {9, 1, &lexer_transitions[36], nullptr}, + {10, 1, &lexer_transitions[37], nullptr}, + {11, 1, &lexer_transitions[38], nullptr}, + {12, 1, &lexer_transitions[39], nullptr}, + {13, 1, &lexer_transitions[40], nullptr}, + {14, 1, &lexer_transitions[41], nullptr}, + {15, 1, &lexer_transitions[42], nullptr}, + {16, 0, &lexer_transitions[43], &symbols[3]}, + {17, 0, &lexer_transitions[43], &symbols[4]}, + {18, 0, &lexer_transitions[43], &symbols[5]}, + {19, 1, &lexer_transitions[43], &symbols[6]}, + {20, 1, &lexer_transitions[44], &symbols[7]}, + {21, 0, &lexer_transitions[45], &symbols[8]}, + {22, 0, &lexer_transitions[45], &symbols[9]}, + {23, 1, &lexer_transitions[45], &symbols[11]}, + {24, 0, &lexer_transitions[46], &symbols[12]}, + {25, 1, &lexer_transitions[46], &symbols[13]}, + {26, 1, &lexer_transitions[47], &symbols[14]}, + {27, 0, &lexer_transitions[48], &symbols[15]}, + {28, 0, &lexer_transitions[48], &symbols[16]}, + {29, 1, &lexer_transitions[48], &symbols[18]}, + {30, 0, &lexer_transitions[49], &symbols[17]}, + {31, 0, &lexer_transitions[49], &symbols[20]}, + {32, 0, &lexer_transitions[49], &symbols[22]}, + {33, 0, &lexer_transitions[49], &symbols[23]}, + {34, 1, &lexer_transitions[49], &symbols[35]}, + {35, 1, &lexer_transitions[50], nullptr}, + {36, 0, &lexer_transitions[51], &symbols[29]}, + {37, 0, &lexer_transitions[51], &symbols[30]}, + {38, 1, &lexer_transitions[51], &symbols[35]}, + {39, 1, &lexer_transitions[52], nullptr}, + {40, 1, &lexer_transitions[53], nullptr}, + {41, 1, &lexer_transitions[54], nullptr}, + {42, 0, &lexer_transitions[55], &symbols[32]}, + {43, 0, &lexer_transitions[55], &symbols[34]}, + {44, 0, &lexer_transitions[55], &symbols[35]}, + {45, 1, &lexer_transitions[55], &symbols[35]}, + {46, 1, &lexer_transitions[56], &symbols[35]}, + {47, 1, &lexer_transitions[57], nullptr}, + {48, 1, &lexer_transitions[58], nullptr}, + {49, 1, &lexer_transitions[59], nullptr}, + {50, 1, &lexer_transitions[60], nullptr}, + {51, 1, &lexer_transitions[61], nullptr}, + {52, 0, &lexer_transitions[62], &symbols[36]}, + {53, 4, &lexer_transitions[62], &symbols[37]}, + {54, 1, &lexer_transitions[66], nullptr}, + {55, 3, &lexer_transitions[67], &symbols[38]}, + {56, 3, &lexer_transitions[70], nullptr}, + {57, 1, &lexer_transitions[73], nullptr}, + {58, 1, &lexer_transitions[74], &symbols[38]}, + {59, 0, &lexer_transitions[75], &symbols[39]}, + {60, 1, &lexer_transitions[75], nullptr}, {-1, 0, nullptr, nullptr} }; const LexerStateMachine lexer_state_machine = { 1, // #actions - 61, // #transitions - 46, // #states + 76, // #transitions + 61, // #states lexer_actions, // actions lexer_transitions, // transitions lexer_states, // states @@ -310,10 +1004,10 @@ const LexerStateMachine whitespace_lexer_state_machine = const ParserStateMachine parser_state_machine = { "oscript", - 10, // #actions - 20, // #symbols - 49, // #transitions - 19, // #states + 30, // #actions + 40, // #symbols + 626, // #transitions + 66, // #states actions, symbols, transitions, diff --git a/Objects/private/parser/oscript.g b/Objects/private/parser/oscript.g index 31fcc94..4ec64b4 100644 --- a/Objects/private/parser/oscript.g +++ b/Objects/private/parser/oscript.g @@ -1,33 +1,65 @@ oscript { - %whitespace "[ \t\r\n]*"; + %whitespace "[ \t\r\n]*"; + %none error; + %none integer; + %left '(' ')'; + %left '+' '-'; + %left '*' '/'; + %left '.' '='; + %left '==' '>' '<' '>=' '<=' '!=' '!'; - scope: - '{' statements '}' [scope] - | ; + scope: + '{' stmts '}' [scope] + | ; - statements: - statements ';' statement ';' [stm_scope_append] - | statement [stm_scope_create] - | ; + stmts: + stmts ';' stmt ';' [stm_list_append] + | stmt [stm_list_create] + | ; - statement: - statementVar [tmp] - | statementLog [tmp]; + stmt: + stm_var_def_new_type [tmp] + | stm_var_def_assign [tmp] + | stm_log [tmp] + | stm_assign [tmp] + ; - statementVar: 'var' id [stm_defVar]; - statementLog: 'print' value [stm_log]; + stm_var_def_new_type: 'var' id ':' id [stm_var_def_new_type]; + stm_var_def_assign: 'var' id '=' expr [stm_var_def_assign]; + stm_log: 'print' expr [stm_log]; + stm_assign: expr '=' expr [stm_assign]; - value: - boolean [expr_bool] - | integer [expr_int] - | real [expr_float] - | string [expr_string] - | - ; + expr_list: + expr_list ',' expr ',' [expr_list_append] + | expr [expr_list_create] + | ; - id: "[a-z]"; - boolean: "true|false"; - integer: "(\+|\-)?[0-9]+"; - real: "(\+|\-)?[0-9]+(\.[0-9]+)?((e|E)(\+|\-)?[0-9]+)?"; - string: "[\"']:string:"; + expr: + id '(' expr_list ')' [expr_function] + | expr '.' id '(' expr_list ')' [expr_method] + | expr '.' id [expr_child] + | expr '==' expr [expr_bool_eq] + | '!' expr [expr_bool_negate] + | expr '!=' expr [expr_bool_neq] + | expr '>' expr [expr_bool_grater] + | expr '<' expr [expr_bool_lesser] + | expr '>=' expr [expr_bool_grater_eq] + | expr '<=' expr [expr_bool_lesser_eq] + | expr '+' expr [expr_add] + | expr '-' expr [expr_subtract] + | expr '*' expr [expr_multiply] + | expr '/' expr [expr_divide] + | '(' expr ')' [expr_compound] + | boolean [expr_bool] + | integer [expr_int] + | real [expr_float] + | string [expr_string] + | id [expr_id] + ; + + id: "[a-z]"; + boolean: "true|false"; + integer: "(\+|\-)?[0-9]+"; + real: "(\+|\-)?[0-9]+(\.[0-9]+)?((e|E)(\+|\-)?[0-9]+)?"; + string: "[\"']:string:"; } diff --git a/Objects/private/parser/parser.cpp b/Objects/private/parser/parser.cpp index 6b2c1df..3548e37 100644 --- a/Objects/private/parser/parser.cpp +++ b/Objects/private/parser/parser.cpp @@ -2,94 +2,18 @@ #include -// #include "compiler/function.h" - -#include -#include +#include "Private.hpp" using namespace obj; -struct ASTNode { - BCgen::Expression* expression = nullptr; - BCgen::Statement* statement = nullptr; -}; - -extern const lalr::ParserStateMachine* oscript_parser_state_machine; -typedef void* UserData; -typedef char SymbolType; - -typedef std::basic_string::iterator IteratorType; - -namespace action { - static UserData expr_bool(const UserData* start, const lalr::ParserNode* nodes, size_t length) { - return new BCgen::ExpressionConst(nodes[0].lexeme() == "true"); - } - - static UserData expr_int(const UserData* start, const lalr::ParserNode* nodes, size_t length) { - return {}; - } - - static UserData expr_float(const UserData* start, const lalr::ParserNode* nodes, size_t length) { - return {}; - } - - static UserData expr_string(const UserData* start, const lalr::ParserNode* nodes, size_t length) { - return {}; - } - - static UserData stm_log(const UserData* start, const lalr::ParserNode* nodes, size_t length) { - auto expr = (BCgen::Expression*) (start[1]); - return new BCgen::StatementPrint(expr); - } - - static UserData stm_defVar(const UserData* start, const lalr::ParserNode* nodes, size_t length) { - return new BCgen::StatementLocalDef(nodes[1].lexeme().c_str(), new BCgen::ExpressionConst(false)); - } - - static UserData stm_scope_append(const UserData* start, const lalr::ParserNode* nodes, size_t length) { - auto scope = (BCgen::StatementScope*) start[0]; - auto stm = (BCgen::Statement*) start[2]; - scope->mStatements.append(stm); - return scope; - } - - static UserData stm_scope_create(const UserData* start, const lalr::ParserNode* nodes, size_t length) { - auto stm = (BCgen::Statement*) start[0]; - return new BCgen::StatementScope({ stm }, true); - } - - static UserData scope(const UserData* start, const lalr::ParserNode* nodes, size_t length) { - return start[1]; - } - - static UserData tmp(const UserData* start, const lalr::ParserNode* nodes, size_t length) { - return *start; - } -} - Parser::Result Parser::parse(const tp::String& stream) { lalr::ErrorPolicy errorPolicy; - lalr::Parser parser(oscript_parser_state_machine, &errorPolicy); - - parser.set_lexer_action_handler("string", &lalr::string_literal); - - parser.set_action_handler("expr_bool", &action::expr_bool); - parser.set_action_handler("expr_int", &action::expr_int); - parser.set_action_handler("expr_float", &action::expr_float); - parser.set_action_handler("expr_string", &action::expr_string); - - parser.set_action_handler("stm_defVar", &action::stm_defVar); - parser.set_action_handler("stm_log", &action::stm_log); - - parser.set_action_handler("stm_scope_create", &action::stm_scope_create); - parser.set_action_handler("stm_scope_append", &action::stm_scope_append); - - parser.set_action_handler("scope", &action::scope); - - parser.set_action_handler("tmp", &action::tmp); + LalrParser parser(oscript_parser_state_machine, &errorPolicy); + bind(parser); + std::string streamStd(stream.read()); LALR_ASSERT(parser.valid()); diff --git a/Objects/public/compiler/expression.h b/Objects/public/compiler/expression.h index 9065cfe..7d04bbd 100644 --- a/Objects/public/compiler/expression.h +++ b/Objects/public/compiler/expression.h @@ -24,6 +24,7 @@ namespace obj { FUNC, BOOLEAN, SELF, + LIST, } mType = Type::NONE; bool mValueUsed = false; @@ -32,7 +33,12 @@ namespace obj { Expression(Type type); ExpressionChild* ExprChild(tp::String id); - ExpressionCall* ExprCall(tp::InitialierList args); + ExpressionCall* ExprCall(class ExpressionList* args); + }; + + struct ExpressionList : public Expression { + tp::Buffer mItems; + ExpressionList(); }; struct ExpressionNew : public Expression { @@ -59,8 +65,8 @@ namespace obj { struct ExpressionCall : public Expression { Expression* mParent = NULL; - tp::Buffer mArgs; - ExpressionCall(Expression* mParent, tp::InitialierList args); + ExpressionList* mArgs; + ExpressionCall(Expression* mParent, ExpressionList* args); }; struct ExpressionAriphm : public Expression { diff --git a/Objects/tests/TestInterpreter.cpp b/Objects/tests/TestInterpreter.cpp index afbfdc2..0577c75 100644 --- a/Objects/tests/TestInterpreter.cpp +++ b/Objects/tests/TestInterpreter.cpp @@ -41,7 +41,10 @@ if (i == 10) { )"; auto script = R"( -var i = 10; +{ + var i = 10; + print (i + 10) * 5; +} )"; TEST_DEF_STATIC(Complex) { @@ -64,7 +67,7 @@ TEST_DEF_STATIC(Simple) { interpreter->getMember("target method")->setLink(method); - method->mScript->mReadable->val = "<< 3;"; + method->mScript->mReadable->val = script; method->compile(); interpreter->exec(); @@ -77,9 +80,12 @@ TEST_DEF_STATIC(Simple) { NDO->destroy(interpreterLoaded); NDO->destroy(interpreter); + + printf("\n\nEnd\n\n"); } TEST_DEF(Interpreter) { testSimple(); + exit(0); // testComplex(); } diff --git a/Objects/tests/TestParser.cpp b/Objects/tests/TestParser.cpp index da3f82b..ddc3b38 100644 --- a/Objects/tests/TestParser.cpp +++ b/Objects/tests/TestParser.cpp @@ -9,7 +9,7 @@ using namespace obj; TEST_DEF_STATIC(Basic) { Parser parser; - String stream = "{ var i; print false; }"; + String stream = "{ var i = true; print (i + 1) * 10; }"; auto res = parser.parse(stream); } diff --git a/Objects/tests/Tests.cpp b/Objects/tests/Tests.cpp index 2d752b2..d5ad769 100644 --- a/Objects/tests/Tests.cpp +++ b/Objects/tests/Tests.cpp @@ -16,6 +16,11 @@ int main() { tp::ModuleManifest* deps[] = { &gModuleObjects, nullptr }; tp::ModuleManifest module("ObjectsTests", nullptr, nullptr, deps); + if (module.initialize()) { + testInterpreter(); + module.deinitialize(); + } + if (module.initialize()) { testParser(); module.deinitialize(); @@ -31,10 +36,5 @@ int main() { module.deinitialize(); } - if (module.initialize()) { - testInterpreter(); - module.deinitialize(); - } - return 0; }