public void accept(Token token) { if (lexer.token() == token) { lexer.nextToken(); } else { setErrorEndPos(lexer.pos()); throw new ParserException( "syntax error, expect " + token + ", actual " + lexer.token() + " " + lexer.stringVal() + ", pos " + this.lexer.pos()); } }
public void test_lexer() throws Exception { String sql = "SELECT * FROM T WHERE F1 = ? ORDER BY F2"; Lexer lexer = new Lexer(sql); for (; ; ) { lexer.nextToken(); Token tok = lexer.token(); if (tok == Token.IDENTIFIER) { System.out.println(tok.name() + "\t\t" + lexer.stringVal()); } else if (tok == Token.LITERAL_INT) { System.out.println(tok.name() + "\t\t" + lexer.numberString()); } else { System.out.println(tok.name() + "\t\t\t" + tok.name); } if (tok == Token.EOF) { break; } } }
protected String as() { String alias = null; if (lexer.token() == Token.AS) { lexer.nextToken(); if (lexer.token() == Token.LITERAL_ALIAS) { alias = '"' + lexer.stringVal() + '"'; lexer.nextToken(); } else if (lexer.token() == Token.IDENTIFIER) { alias = lexer.stringVal(); lexer.nextToken(); } else if (lexer.token() == Token.LITERAL_CHARS) { alias = "'" + lexer.stringVal() + "'"; lexer.nextToken(); } else { switch (lexer.token()) { case KEY: case INDEX: case CASE: case MODEL: case PCTFREE: case INITRANS: case MAXTRANS: case SEGMENT: case CREATION: case IMMEDIATE: case DEFERRED: case STORAGE: case NEXT: case MINEXTENTS: case MAXEXTENTS: case MAXSIZE: case PCTINCREASE: case FLASH_CACHE: case CELL_FLASH_CACHE: case KEEP: case NONE: case LOB: case STORE: case ROW: case CHUNK: case CACHE: case NOCACHE: case LOGGING: case NOCOMPRESS: case KEEP_DUPLICATES: case EXCEPTIONS: case PURGE: case INITIALLY: case END: case COMMENT: case ENABLE: case DISABLE: case SEQUENCE: case USER: case ANALYZE: case OPTIMIZE: case GRANT: alias = lexer.stringVal(); lexer.nextToken(); return alias; case QUES: alias = "?"; lexer.nextToken(); default: break; } } if (alias != null) { while (lexer.token() == Token.DOT) { lexer.nextToken(); alias += ('.' + lexer.token().name()); lexer.nextToken(); } return alias; } if (lexer.token() == Token.LPAREN) { return null; } throw new ParserException("Error : " + lexer.token()); } if (lexer.token() == Token.LITERAL_ALIAS) { alias = '"' + lexer.stringVal() + '"'; lexer.nextToken(); } else if (lexer.token() == Token.IDENTIFIER) { alias = lexer.stringVal(); lexer.nextToken(); } else if (lexer.token() == Token.LITERAL_CHARS) { alias = "'" + lexer.stringVal() + "'"; lexer.nextToken(); } else if (lexer.token() == Token.CASE) { alias = lexer.token.name(); lexer.nextToken(); } switch (lexer.token()) { case KEY: alias = lexer.token().name(); lexer.nextToken(); return alias; default: break; } return alias; }
protected boolean identifierEquals(String text) { return lexer.token() == Token.IDENTIFIER && lexer.stringVal().equalsIgnoreCase(text); }
public void match(Token token) { if (lexer.token() != token) { throw new ParserException( "syntax error, expect " + token + ", actual " + lexer.token() + " " + lexer.stringVal()); } }