package token; import static util.Characters.*; import file.FilePosition; import util.Characters; public class TokenFactoryImpl implements TokenFactory { public Token createToken(String text, FilePosition position) { if (text.length() == 0) throw new EmptyTokenTextException(position); char firstCharacter = text.charAt(0); switch (firstCharacter) { case LEFT_PARENTHESIS: return new LeftParenthesis(text, position); case RIGHT_PARENTHESIS: return new RightParenthesis(text, position); case SINGLE_QUOTE: return new QuoteMark(text, position); case DOUBLE_QUOTE: return new QuotedString(text, position); default: if (Character.isDigit(firstCharacter)) { return new Number(text, position); } else if (Characters.isLegalIdentifierCharacter(firstCharacter)) { return new Identifier(text, position); } } throw new BadCharacterException(text, position); } public Token createEOFToken(FilePosition position) { return new Eof("EOF", position); } }