2021-06-08 09:37:38 +01:00
|
|
|
module compiler.parsing.exceptions;
|
|
|
|
|
2021-06-08 09:45:14 +01:00
|
|
|
import compiler.parsing.core;
|
|
|
|
import misc.exceptions;
|
|
|
|
import compiler.symbols.check;
|
|
|
|
import compiler.symbols.data;
|
2023-01-28 16:12:49 +00:00
|
|
|
import compiler.lexer.core : Token;
|
2022-12-13 12:17:40 +00:00
|
|
|
import std.conv : to;
|
2021-06-08 09:45:14 +01:00
|
|
|
|
2021-06-08 09:37:38 +01:00
|
|
|
public class ParserException : TError
|
|
|
|
{
|
2021-06-08 09:38:46 +01:00
|
|
|
private Parser parser;
|
2021-06-08 09:37:38 +01:00
|
|
|
|
2022-12-13 12:17:40 +00:00
|
|
|
this(Parser parser, string message)
|
2021-06-08 09:38:46 +01:00
|
|
|
{
|
2022-12-13 12:17:40 +00:00
|
|
|
super(message);
|
2021-06-08 09:38:46 +01:00
|
|
|
this.parser = parser;
|
2021-06-08 09:37:38 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-06-08 09:37:43 +01:00
|
|
|
public final class SyntaxError : ParserException
|
|
|
|
{
|
|
|
|
private SymbolType expected;
|
|
|
|
private SymbolType provided;
|
2022-12-13 12:17:40 +00:00
|
|
|
private Token providedToken;
|
2021-06-08 09:37:43 +01:00
|
|
|
|
2022-12-13 12:17:40 +00:00
|
|
|
this(Parser parser, SymbolType expected, Token providedToken)
|
2021-06-08 09:37:43 +01:00
|
|
|
{
|
|
|
|
this.expected = expected;
|
2022-12-14 17:49:08 +00:00
|
|
|
this.provided = getSymbolType(providedToken);
|
2022-12-13 12:17:40 +00:00
|
|
|
this.providedToken = providedToken;
|
|
|
|
|
|
|
|
super(parser, "Syntax error: Expected "~to!(string)(expected)~" but got "~to!(string)(provided)~", see "~providedToken.toString());
|
2021-06-08 09:37:43 +01:00
|
|
|
}
|
|
|
|
}
|