Refactored some of the exception classes.
This commit is contained in:
parent
a137e41a14
commit
6f4a319dab
|
@ -0,0 +1,29 @@
|
|||
package error;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
|
||||
import file.FilePosition;
|
||||
|
||||
public abstract class LineColumnException extends LispException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private FilePosition position;
|
||||
|
||||
public LineColumnException(FilePosition position) {
|
||||
this.position = position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSeverity() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return MessageFormat.format("{0} - line {1}, column {2}", getMessagePrefix(), position.getLineNumber(),
|
||||
position.getColumnNumber());
|
||||
}
|
||||
|
||||
public abstract String getMessagePrefix();
|
||||
|
||||
}
|
|
@ -24,7 +24,6 @@ public interface LispInputStream {
|
|||
public static class UncheckedIOException extends LispException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private IOException ioException;
|
||||
|
||||
public UncheckedIOException(IOException ioException) {
|
||||
|
|
|
@ -3,15 +3,12 @@ package scanner;
|
|||
import static util.Characters.*;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.function.Function;
|
||||
|
||||
import error.LispException;
|
||||
import error.LineColumnException;
|
||||
import file.FilePosition;
|
||||
import file.FilePositionTracker;
|
||||
import token.Token;
|
||||
import token.TokenFactory;
|
||||
import token.TokenFactoryImpl;
|
||||
import token.*;
|
||||
import util.Characters;
|
||||
|
||||
/**
|
||||
|
@ -152,24 +149,17 @@ public class LispScanner {
|
|||
}
|
||||
}
|
||||
|
||||
public static class UnterminatedStringException extends LispException {
|
||||
public static class UnterminatedStringException extends LineColumnException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private FilePosition position;
|
||||
|
||||
public UnterminatedStringException(FilePosition position) {
|
||||
this.position = position;
|
||||
super(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSeverity() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return MessageFormat.format("unterminated quoted string - line {0}, column {1}", position.getLineNumber(),
|
||||
position.getColumnNumber());
|
||||
public String getMessagePrefix() {
|
||||
return "unterminated quoted string";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,6 @@ public class LispNumber extends Atom {
|
|||
public class InvalidNumberException extends LispException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String text;
|
||||
|
||||
public InvalidNumberException(String text) {
|
||||
|
|
|
@ -2,9 +2,9 @@ package token;
|
|||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import error.LineColumnException;
|
||||
import file.FilePosition;
|
||||
import sexpression.SExpression;
|
||||
import token.ParseException.EofEncounteredException;
|
||||
|
||||
public class Eof extends Token {
|
||||
|
||||
|
@ -17,4 +17,17 @@ public class Eof extends Token {
|
|||
throw new EofEncounteredException(this);
|
||||
}
|
||||
|
||||
public static class EofEncounteredException extends LineColumnException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public EofEncounteredException(Token token) {
|
||||
super(token.getPosition());
|
||||
}
|
||||
|
||||
public String getMessagePrefix() {
|
||||
return "end-of-file encountered";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,55 +0,0 @@
|
|||
package token;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
|
||||
import error.LispException;
|
||||
|
||||
public abstract class ParseException extends LispException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private Token token;
|
||||
|
||||
public ParseException(Token token) {
|
||||
this.token = token;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSeverity() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return MessageFormat.format("{0} - line {1}, column {2}", getMessagePrefix(), token.getLine(),
|
||||
token.getColumn());
|
||||
}
|
||||
|
||||
public abstract String getMessagePrefix();
|
||||
|
||||
public static class EofEncounteredException extends ParseException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public EofEncounteredException(Token token) {
|
||||
super(token);
|
||||
}
|
||||
|
||||
public String getMessagePrefix() {
|
||||
return "end-of-file encountered";
|
||||
}
|
||||
}
|
||||
|
||||
public static class StartsWithRightParenthesisException extends ParseException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public StartsWithRightParenthesisException(Token token) {
|
||||
super(token);
|
||||
}
|
||||
|
||||
public String getMessagePrefix() {
|
||||
return "Expression begins with ')'";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -2,10 +2,10 @@ package token;
|
|||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import error.LineColumnException;
|
||||
import file.FilePosition;
|
||||
import sexpression.Nil;
|
||||
import sexpression.SExpression;
|
||||
import token.ParseException.StartsWithRightParenthesisException;
|
||||
|
||||
public class RightParenthesis extends Token {
|
||||
|
||||
|
@ -23,4 +23,17 @@ public class RightParenthesis extends Token {
|
|||
return Nil.getUniqueInstance();
|
||||
}
|
||||
|
||||
public static class StartsWithRightParenthesisException extends LineColumnException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public StartsWithRightParenthesisException(Token token) {
|
||||
super(token.getPosition());
|
||||
}
|
||||
|
||||
public String getMessagePrefix() {
|
||||
return "Expression begins with ')'";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -23,6 +23,10 @@ public abstract class Token {
|
|||
return text;
|
||||
}
|
||||
|
||||
public FilePosition getPosition() {
|
||||
return position;
|
||||
}
|
||||
|
||||
public String getFileName() {
|
||||
return position.getFileName();
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package token;
|
|||
|
||||
import java.text.MessageFormat;
|
||||
|
||||
import error.LispException;
|
||||
import error.LineColumnException;
|
||||
import file.FilePosition;
|
||||
|
||||
public interface TokenFactory {
|
||||
|
@ -11,28 +11,20 @@ public interface TokenFactory {
|
|||
|
||||
Token createEOFToken(FilePosition position);
|
||||
|
||||
public static class BadCharacterException extends LispException {
|
||||
public static class BadCharacterException extends LineColumnException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String text;
|
||||
private FilePosition position;
|
||||
|
||||
public BadCharacterException(String text, FilePosition position) {
|
||||
super(position);
|
||||
this.text = text;
|
||||
this.position = position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSeverity() {
|
||||
return 0;
|
||||
public String getMessagePrefix() {
|
||||
return MessageFormat.format("illegal character >>{0}<<", text);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return MessageFormat.format("illegal character >>{0}<< - line {1}, column {2}", text,
|
||||
position.getLineNumber(), position.getColumnNumber());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,8 +13,8 @@ import error.ErrorManager;
|
|||
import error.LispException;
|
||||
import scanner.LispInputStream.UncheckedIOException;
|
||||
import scanner.LispScanner.UnterminatedStringException;
|
||||
import token.ParseException.EofEncounteredException;
|
||||
import token.ParseException.StartsWithRightParenthesisException;
|
||||
import token.Eof.EofEncounteredException;
|
||||
import token.RightParenthesis.StartsWithRightParenthesisException;
|
||||
import token.TokenFactory.BadCharacterException;
|
||||
|
||||
public class LispParserTester {
|
||||
|
|
Loading…
Reference in New Issue