Fix ParserException not catched

This commit is contained in:
augustin64 2023-11-10 17:53:41 +01:00
parent d3769e5630
commit 966bd36dad

View File

@ -11,7 +11,7 @@ Node parse(vector<Token> tokens) {
reverse(tokens.begin(), tokens.end()); reverse(tokens.begin(), tokens.end());
if (tokens.size() == 0) if (tokens.size() == 0)
throw new ParseException; throw ParseException();
// At least 1 instruction // At least 1 instruction
@ -47,7 +47,7 @@ ParseReturn parse_instruction(vector<Token> tokens) {
tokens = ret.tokens; tokens = ret.tokens;
if (tokens.back().type != TokenType::Semicolon) if (tokens.back().type != TokenType::Semicolon)
throw new ParseException; throw ParseException();
return { return {
.node=ret.node, .node=ret.node,
@ -60,7 +60,7 @@ ParseReturn parse_instruction(vector<Token> tokens) {
tokens = ret.tokens; tokens = ret.tokens;
if (tokens.size() < 1 || tokens.back().type != TokenType::Semicolon) if (tokens.size() < 1 || tokens.back().type != TokenType::Semicolon)
throw new ParseException; throw ParseException();
return { return {
.node=ret.node, .node=ret.node,
@ -69,7 +69,7 @@ ParseReturn parse_instruction(vector<Token> tokens) {
} }
catch (const ParseException& pex) { //* Instruction -> ; catch (const ParseException& pex) { //* Instruction -> ;
if (tokens.size() < 1 || tokens.back().type != TokenType::Semicolon) if (tokens.size() < 1 || tokens.back().type != TokenType::Semicolon)
throw new ParseException; throw ParseException();
vector<Node> children; vector<Node> children;
InnerNode epsilon_node = { InnerNode epsilon_node = {
@ -90,18 +90,18 @@ ParseReturn parse_instruction(vector<Token> tokens) {
ParseReturn parse_statement(vector<Token> tokens) { ParseReturn parse_statement(vector<Token> tokens) {
(void)tokens; (void)tokens;
// Aucune règle // Aucune règle
throw new ParseException; throw ParseException();
} }
ParseReturn parse_expr_statement(vector<Token> tokens) { ParseReturn parse_expr_statement(vector<Token> tokens) {
if (tokens.size() < 1 || tokens.back().type != TokenType::Type) if (tokens.size() < 1 || tokens.back().type != TokenType::Type)
throw new ParseException; throw ParseException();
Token type = tokens.back(); Token type = tokens.back();
tokens.pop_back(); tokens.pop_back();
if (tokens.size() < 1 || tokens.back().type != TokenType::Identifier) if (tokens.size() < 1 || tokens.back().type != TokenType::Identifier)
throw new ParseException; throw ParseException();
Token identifier = tokens.back(); Token identifier = tokens.back();
tokens.pop_back(); tokens.pop_back();
@ -136,7 +136,7 @@ ParseReturn parse_expr_statement(vector<Token> tokens) {
ParseReturn parse_expr(vector<Token> tokens) { ParseReturn parse_expr(vector<Token> tokens) {
if (tokens.size() == 0) if (tokens.size() == 0)
throw new ParseException; throw ParseException();
// At least 1 T // At least 1 T
ParseReturn ret = parse_t(tokens); ParseReturn ret = parse_t(tokens);
@ -181,7 +181,7 @@ ParseReturn parse_expr(vector<Token> tokens) {
ParseReturn parse_t(vector<Token> tokens) { ParseReturn parse_t(vector<Token> tokens) {
if (tokens.size() == 0) if (tokens.size() == 0)
throw new ParseException; throw ParseException();
// At least 1 U // At least 1 U
@ -268,7 +268,7 @@ ParseReturn parse_u(vector<Token> tokens) {
ParseReturn parse_f(vector<Token> tokens) { ParseReturn parse_f(vector<Token> tokens) {
if (tokens.size() == 0) if (tokens.size() == 0)
throw new ParseException; throw ParseException();
switch (tokens.back().type) { switch (tokens.back().type) {
case TokenType::Int: { //* U -> Number case TokenType::Int: { //* U -> Number
@ -285,7 +285,7 @@ ParseReturn parse_f(vector<Token> tokens) {
tokens=ret.tokens; tokens=ret.tokens;
if (tokens.size() < 1 || tokens.back().type != TokenType::RParenthese) if (tokens.size() < 1 || tokens.back().type != TokenType::RParenthese)
throw new ParseException; throw ParseException();
tokens.pop_back(); tokens.pop_back();
@ -318,6 +318,6 @@ ParseReturn parse_f(vector<Token> tokens) {
}; };
} }
default: default:
throw new ParseException; throw ParseException();
} }
} }