From 9b0c3900f84beabf7f07d6e5de395ad4c8a46b17 Mon Sep 17 00:00:00 2001 From: augustin64 Date: Fri, 17 Nov 2023 11:01:57 +0100 Subject: [PATCH] Better if/else syntax errors --- src/parser.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/parser.cpp b/src/parser.cpp index 7b44223..c0773de 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -122,6 +122,8 @@ ParseReturn parse_instruction(vector tokens) { if (tokens.back().type != TokenType::Semicolon) throw ParseException(); + tokens.pop_back(); + return { .node=ret.node, .tokens=tokens @@ -135,6 +137,8 @@ ParseReturn parse_instruction(vector tokens) { if (tokens.size() < 1 || tokens.back().type != TokenType::Semicolon) throw ParseException(); + tokens.pop_back(); + return { .node=ret.node, .tokens=tokens @@ -187,7 +191,14 @@ ParseReturn parse_statement(vector tokens) { tokens = ret.tokens; Node expr = ret.node; - ret = parse_instruction(tokens); // Instruction1 + try { + ret = parse_instruction(tokens); // Instruction1 + } catch (const ParseException& pex) { + throw SyntaxError( + "Invalid Syntax", + pos=tokens.back().pos + ); + } if (holds_alternative(ret.node) && ( get(ret.node).type == NodeType::AssignedDeclaration ||