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 {
|
public static class UncheckedIOException extends LispException {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private IOException ioException;
|
private IOException ioException;
|
||||||
|
|
||||||
public UncheckedIOException(IOException ioException) {
|
public UncheckedIOException(IOException ioException) {
|
||||||
|
|
|
@ -3,15 +3,12 @@ package scanner;
|
||||||
import static util.Characters.*;
|
import static util.Characters.*;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.text.MessageFormat;
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import error.LispException;
|
import error.LineColumnException;
|
||||||
import file.FilePosition;
|
import file.FilePosition;
|
||||||
import file.FilePositionTracker;
|
import file.FilePositionTracker;
|
||||||
import token.Token;
|
import token.*;
|
||||||
import token.TokenFactory;
|
|
||||||
import token.TokenFactoryImpl;
|
|
||||||
import util.Characters;
|
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 static final long serialVersionUID = 1L;
|
||||||
private FilePosition position;
|
|
||||||
|
|
||||||
public UnterminatedStringException(FilePosition position) {
|
public UnterminatedStringException(FilePosition position) {
|
||||||
this.position = position;
|
super(position);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getSeverity() {
|
public String getMessagePrefix() {
|
||||||
return 0;
|
return "unterminated quoted string";
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getMessage() {
|
|
||||||
return MessageFormat.format("unterminated quoted string - line {0}, column {1}", position.getLineNumber(),
|
|
||||||
position.getColumnNumber());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,9 +35,8 @@ public class LispNumber extends Atom {
|
||||||
public class InvalidNumberException extends LispException {
|
public class InvalidNumberException extends LispException {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private String text;
|
private String text;
|
||||||
|
|
||||||
public InvalidNumberException(String text) {
|
public InvalidNumberException(String text) {
|
||||||
this.text = text;
|
this.text = text;
|
||||||
}
|
}
|
||||||
|
@ -46,7 +45,7 @@ public class LispNumber extends Atom {
|
||||||
public int getSeverity() {
|
public int getSeverity() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getMessage() {
|
public String getMessage() {
|
||||||
return MessageFormat.format("{0} is not a valid integer", text);
|
return MessageFormat.format("{0} is not a valid integer", text);
|
||||||
|
|
|
@ -2,9 +2,9 @@ package token;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
import error.LineColumnException;
|
||||||
import file.FilePosition;
|
import file.FilePosition;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
import token.ParseException.EofEncounteredException;
|
|
||||||
|
|
||||||
public class Eof extends Token {
|
public class Eof extends Token {
|
||||||
|
|
||||||
|
@ -17,4 +17,17 @@ public class Eof extends Token {
|
||||||
throw new EofEncounteredException(this);
|
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 java.util.function.Supplier;
|
||||||
|
|
||||||
|
import error.LineColumnException;
|
||||||
import file.FilePosition;
|
import file.FilePosition;
|
||||||
import sexpression.Nil;
|
import sexpression.Nil;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
import token.ParseException.StartsWithRightParenthesisException;
|
|
||||||
|
|
||||||
public class RightParenthesis extends Token {
|
public class RightParenthesis extends Token {
|
||||||
|
|
||||||
|
@ -23,4 +23,17 @@ public class RightParenthesis extends Token {
|
||||||
return Nil.getUniqueInstance();
|
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 ')'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,10 @@ public abstract class Token {
|
||||||
public String getText() {
|
public String getText() {
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FilePosition getPosition() {
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
public String getFileName() {
|
public String getFileName() {
|
||||||
return position.getFileName();
|
return position.getFileName();
|
||||||
|
|
|
@ -2,7 +2,7 @@ package token;
|
||||||
|
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
|
|
||||||
import error.LispException;
|
import error.LineColumnException;
|
||||||
import file.FilePosition;
|
import file.FilePosition;
|
||||||
|
|
||||||
public interface TokenFactory {
|
public interface TokenFactory {
|
||||||
|
@ -11,28 +11,20 @@ public interface TokenFactory {
|
||||||
|
|
||||||
Token createEOFToken(FilePosition position);
|
Token createEOFToken(FilePosition position);
|
||||||
|
|
||||||
public static class BadCharacterException extends LispException {
|
public static class BadCharacterException extends LineColumnException {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private String text;
|
private String text;
|
||||||
private FilePosition position;
|
|
||||||
|
|
||||||
public BadCharacterException(String text, FilePosition position) {
|
public BadCharacterException(String text, FilePosition position) {
|
||||||
|
super(position);
|
||||||
this.text = text;
|
this.text = text;
|
||||||
this.position = position;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getSeverity() {
|
public String getMessagePrefix() {
|
||||||
return 0;
|
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 error.LispException;
|
||||||
import scanner.LispInputStream.UncheckedIOException;
|
import scanner.LispInputStream.UncheckedIOException;
|
||||||
import scanner.LispScanner.UnterminatedStringException;
|
import scanner.LispScanner.UnterminatedStringException;
|
||||||
import token.ParseException.EofEncounteredException;
|
import token.Eof.EofEncounteredException;
|
||||||
import token.ParseException.StartsWithRightParenthesisException;
|
import token.RightParenthesis.StartsWithRightParenthesisException;
|
||||||
import token.TokenFactory.BadCharacterException;
|
import token.TokenFactory.BadCharacterException;
|
||||||
|
|
||||||
public class LispParserTester {
|
public class LispParserTester {
|
||||||
|
|
Loading…
Reference in New Issue