Better if/else syntax errors

This commit is contained in:
augustin64 2023-11-17 11:01:57 +01:00
parent 252e8ad829
commit 9b0c3900f8

View File

@ -122,6 +122,8 @@ ParseReturn parse_instruction(vector<Token> tokens) {
if (tokens.back().type != TokenType::Semicolon) if (tokens.back().type != TokenType::Semicolon)
throw ParseException(); throw ParseException();
tokens.pop_back();
return { return {
.node=ret.node, .node=ret.node,
.tokens=tokens .tokens=tokens
@ -135,6 +137,8 @@ ParseReturn parse_instruction(vector<Token> tokens) {
if (tokens.size() < 1 || tokens.back().type != TokenType::Semicolon) if (tokens.size() < 1 || tokens.back().type != TokenType::Semicolon)
throw ParseException(); throw ParseException();
tokens.pop_back();
return { return {
.node=ret.node, .node=ret.node,
.tokens=tokens .tokens=tokens
@ -187,7 +191,14 @@ ParseReturn parse_statement(vector<Token> tokens) {
tokens = ret.tokens; tokens = ret.tokens;
Node expr = ret.node; 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<InnerNode>(ret.node) && if (holds_alternative<InnerNode>(ret.node) &&
( get<InnerNode>(ret.node).type == NodeType::AssignedDeclaration || ( get<InnerNode>(ret.node).type == NodeType::AssignedDeclaration ||