|
|
|
@ -72,36 +72,27 @@ peg& get_parser() |
|
|
|
|
throw logic_error("invalid peg grammar"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
parser.ast({ |
|
|
|
|
{ peg::AstNodeType::Regular, "STATEMENTS", Statements }, |
|
|
|
|
{ peg::AstNodeType::Regular, "WHILE", While }, |
|
|
|
|
{ peg::AstNodeType::Regular, "ASSIGNMENT", Assignment }, |
|
|
|
|
{ peg::AstNodeType::Regular, "IF", If }, |
|
|
|
|
{ peg::AstNodeType::Regular, "FUNCTION", Function }, |
|
|
|
|
{ peg::AstNodeType::Regular, "PARAMETERS", Undefined }, |
|
|
|
|
{ peg::AstNodeType::Regular, "FUNCTION_CALL", FunctionCall }, |
|
|
|
|
{ peg::AstNodeType::Regular, "ARGUMENTS", Undefined }, |
|
|
|
|
{ peg::AstNodeType::Optimizable, "PRIMARY", LogicalOr }, |
|
|
|
|
{ peg::AstNodeType::Optimizable, "LOGICAL_OR", LogicalAnd }, |
|
|
|
|
{ peg::AstNodeType::Optimizable, "LOGICAL_AND", Condition }, |
|
|
|
|
{ peg::AstNodeType::Optimizable, "CONDITION", BinExpresion }, |
|
|
|
|
{ peg::AstNodeType::Optimizable, "TERM", UnaryPlus }, |
|
|
|
|
{ peg::AstNodeType::Optimizable, "UNARY_PLUS", UnaryMinus }, |
|
|
|
|
{ peg::AstNodeType::Optimizable, "UNARY_MINUS", UnaryNot }, |
|
|
|
|
{ peg::AstNodeType::Optimizable, "UNARY_NOT", BinExpresion }, |
|
|
|
|
{ peg::AstNodeType::Token, "CONDITION_OPERATOR", Undefined }, |
|
|
|
|
{ peg::AstNodeType::Token, "TERM_OPERATOR", Undefined }, |
|
|
|
|
{ peg::AstNodeType::Token, "UNARY_PLUS_OPERATOR", Undefined }, |
|
|
|
|
{ peg::AstNodeType::Token, "UNARY_MINUS_OPERATOR", Undefined }, |
|
|
|
|
{ peg::AstNodeType::Token, "UNARY_NOT_OPERATOR", Undefined }, |
|
|
|
|
{ peg::AstNodeType::Token, "FACTOR_OPERATOR", Undefined }, |
|
|
|
|
{ peg::AstNodeType::Token, "NUMBER", Number }, |
|
|
|
|
{ peg::AstNodeType::Token, "BOOLEAN", Boolean }, |
|
|
|
|
{ peg::AstNodeType::Token, "STRING", Undefined }, |
|
|
|
|
{ peg::AstNodeType::Token, "IDENTIFIER", Identifier }, |
|
|
|
|
{ peg::AstNodeType::Regular, "INTERPOLATED_STRING", InterpolatedString }, |
|
|
|
|
{ peg::AstNodeType::Token, "INTERPOLATED_CONTENT", Undefined }, |
|
|
|
|
{ peg::AstNodeType::Token, "MUTABLE", Undefined }, |
|
|
|
|
parser.enable_ast({ |
|
|
|
|
{ "STATEMENTS", Statements }, |
|
|
|
|
{ "WHILE", While }, |
|
|
|
|
{ "ASSIGNMENT", Assignment }, |
|
|
|
|
{ "IF", If }, |
|
|
|
|
{ "FUNCTION", Function }, |
|
|
|
|
{ "PARAMETERS", Undefined }, |
|
|
|
|
{ "FUNCTION_CALL", FunctionCall }, |
|
|
|
|
{ "ARGUMENTS", Undefined }, |
|
|
|
|
{ "PRIMARY", LogicalOr, true }, |
|
|
|
|
{ "LOGICAL_OR", LogicalAnd, true }, |
|
|
|
|
{ "LOGICAL_AND", Condition, true }, |
|
|
|
|
{ "CONDITION", BinExpresion, true }, |
|
|
|
|
{ "TERM", UnaryPlus, true }, |
|
|
|
|
{ "UNARY_PLUS", UnaryMinus, true }, |
|
|
|
|
{ "UNARY_MINUS", UnaryNot, true }, |
|
|
|
|
{ "UNARY_NOT", BinExpresion, true }, |
|
|
|
|
{ "NUMBER", Number }, |
|
|
|
|
{ "BOOLEAN", Boolean }, |
|
|
|
|
{ "IDENTIFIER", Identifier }, |
|
|
|
|
{ "INTERPOLATED_STRING", InterpolatedString }, |
|
|
|
|
}, |
|
|
|
|
Undefined); |
|
|
|
|
} |
|
|
|
|