diff --git a/src/include/parser.h b/src/include/parser.h index 6608a2c..266ada7 100644 --- a/src/include/parser.h +++ b/src/include/parser.h @@ -78,7 +78,8 @@ enum class NodeType { LDecr, // -> --ParIdentifier RDecr, // -> ParIdentifier-- If, // -> If (Expr) Instruction - IfElse // -> If (Expr) Instruction Else Instruction + IfElse, // -> If (Expr) Instruction Else Instruction + Bloc // -> { Prog } }; struct InnerNode; diff --git a/src/parser.cpp b/src/parser.cpp index e5cc4c1..21c8b98 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -12,7 +12,10 @@ CodePosition null_pos = { }; -const char* _node_names[] = {"Prog", "Epsilon", "AssignedDeclaration", "Declaration", "Plus", "Minus", "Mult", "Div", "Mod", "UnaryMinus", "UnaryPlus", "Assignment", "LIncr", "RIncr", "LDecr", "RDecr", "If", "IfElse"}; +const char* _node_names[] = { + "Prog", "Epsilon", "AssignedDeclaration", "Declaration", "Plus", "Minus", "Mult", "Div", "Mod", + "UnaryMinus", "UnaryPlus", "Assignment", "LIncr", "RIncr", "LDecr", "RDecr", "If", "IfElse", "Bloc" +}; void _debug_print_tree(const Node& node, int depth, const string& prefix = "") { if (holds_alternative(node)) { const InnerNode& innerNode = get(node); @@ -216,6 +219,7 @@ ParseReturn parse_statement(vector tokens) { }; } case TokenType::LCurlyBracket: { + CodePosition pos = tokens.back().pos; tokens.pop_back(); ParseReturn ret = parse_prog(tokens); @@ -239,8 +243,13 @@ ParseReturn parse_statement(vector tokens) { tokens = ret.tokens; tokens.pop_back(); + InnerNode node = { + .type=NodeType::Bloc, + .children={ret.node}, + .pos=pos + }; return { - .node=ret.node, + .node=node, .tokens=tokens };