From d35a37a449d31e6f4b43b937abf7b0e1fc497828 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Thu, 16 Jun 2016 20:21:25 +0300 Subject: Grammar now uses reverse polish notation --- main/exception/InterpreterException.java | 33 ++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) (limited to 'main/exception/InterpreterException.java') diff --git a/main/exception/InterpreterException.java b/main/exception/InterpreterException.java index 6ba5a7b..26e39fd 100644 --- a/main/exception/InterpreterException.java +++ b/main/exception/InterpreterException.java @@ -2,36 +2,45 @@ package com.jantuomi.interpreter.main.exception; import java.util.HashMap; +import java.util.List; import java.util.Map; /** * Created by jan on 12.6.2016. */ -public class InterpreterException { +public class InterpreterException extends Exception { - public enum Exception { + public enum ExceptionType { IllegalTokenError, UnknownOperatorError, SyntaxError, TypeError } - public static Map errorTexts = new HashMap<>(); + public static Map errorTexts = new HashMap<>(); static { - errorTexts.put(Exception.IllegalTokenError, "Illegal token %s found."); - errorTexts.put(Exception.UnknownOperatorError, "Unexpected operator %s found."); - errorTexts.put(Exception.SyntaxError, "Unexpected %s."); - errorTexts.put(Exception.TypeError, "Incompatible types %s and %s."); + errorTexts.put(ExceptionType.IllegalTokenError, "Illegal token %s found."); + errorTexts.put(ExceptionType.UnknownOperatorError, "Unexpected operator %s found."); + errorTexts.put(ExceptionType.SyntaxError, "Unexpected %s."); + errorTexts.put(ExceptionType.TypeError, "Incompatible types %s and %s."); } - private Exception exception; + private ExceptionType exceptionType; - public InterpreterException(Exception e) { - exception = e; + public InterpreterException(ExceptionType exceptionType, int line, List args) { + super(formatMessage(exceptionType.toString() + what(exceptionType), line, args)); + this.exceptionType = exceptionType; } - public String what() { - return errorTexts.get(exception); + private static String formatMessage(String message, int line, List args) { + for (String arg : args) { + message = String.format(message, arg); + } + return String.format("line %d: ", line) + message; + } + + public static String what(ExceptionType type) { + return errorTexts.get(type); } } -- cgit v1.3