From ec355abb20b82b850e81fe6f5509be891a249ff4 Mon Sep 17 00:00:00 2001 From: augustin64 Date: Thu, 16 Nov 2023 14:39:52 +0100 Subject: [PATCH] Add NodeType::Bloc --- src/include/parser.h | 3 ++- src/parser.cpp | 13 +++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) 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 };