2017-03-20 11 views
0

私のantlr文法はエラーを返しませんが、私がJavaテストプログラムで解析しようとすると、上記のエラーが返されます。私はantlrプログラミングには比較的新しいです。Antlrエラー:実行可能な代替入力 '<EOF>'

マイSQLite.g4は次のとおりです。

/* 
    * The MIT License (MIT) 
    * 
    * Copyright (c) 2014 by Bart Kiers 
    * 
    * Permission is hereby granted, free of charge, to any person 
    * obtaining a copy of this software and associated documentation 
    * files (the "Software"), to deal in the Software without 
    * restriction, including without limitation the rights to use, 
    * copy, modify, merge, publish, distribute, sublicense, and/or sell 
    * copies of the Software, and to permit persons to whom the 
    * Software is furnished to do so, subject to the following 
    * conditions: 
    * 
    * The above copyright notice and this permission notice shall be 
    * included in all copies or substantial portions of the Software. 
    * 
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
    * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
    * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
    * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
    * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
    * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
    * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
    * OTHER DEALINGS IN THE SOFTWARE. 
    * 
    * Project  : sqlite-parser; an ANTLR4 grammar for SQLite 
    *    https://github.com/bkiers/sqlite-parser 
    * Developed by : Bart Kiers, [email protected] 
    */ 
grammar SQLite; 

parse 
: (sql_stmt_list | error)* EOF 
; 

error 
: UNEXPECTED_CHAR 
    { 
    throw new RuntimeException("UNEXPECTED_CHAR=" + $UNEXPECTED_CHAR.text); 
    } 
; 

sql_stmt_list 
: ';'* sql_stmt (';'+ sql_stmt)* ';'* 
; 

sql_stmt 
: (K_EXPLAIN (K_QUERY K_PLAN)?)? (alter_table_stmt 
             | analyze_stmt 
             | attach_stmt 
             | begin_stmt 
             | commit_stmt 
             | compound_select_stmt 
             | create_index_stmt 
             | create_table_stmt 
             | create_trigger_stmt 
             | create_view_stmt 
             | create_virtual_table_stmt 
             | delete_stmt 
             | delete_stmt_limited 
             | detach_stmt 
             | drop_index_stmt 
             | drop_table_stmt 
             | drop_trigger_stmt 
             | drop_view_stmt 
             | factored_select_stmt 
             | insert_stmt 
             | pragma_stmt 
             | reindex_stmt 
             | release_stmt 
             | rollback_stmt 
             | savepoint_stmt 
             | simple_select_stmt 
             | select_stmt 
             | update_stmt 
             | update_stmt_limited 
             | vacuum_stmt) 
; 

alter_table_stmt 
: K_ALTER K_TABLE (database_name '.')? table_name 
    (K_RENAME K_TO new_table_name 
    | K_ADD K_COLUMN? column_def 
    ) 
; 

analyze_stmt 
: K_ANALYZE (database_name | table_or_index_name | database_name '.' table_or_index_name)? 
; 

attach_stmt 
: K_ATTACH K_DATABASE? expr K_AS database_name 
; 

begin_stmt 
: K_BEGIN (K_DEFERRED | K_IMMEDIATE | K_EXCLUSIVE)? (K_TRANSACTION transaction_name?)? 
; 

commit_stmt 
: (K_COMMIT | K_END) (K_TRANSACTION transaction_name?)? 
; 

compound_select_stmt 
: with_clause? 
    select_core ((K_UNION K_ALL? | K_INTERSECT | K_EXCEPT) select_core)+ 
    (K_ORDER K_BY ordering_term (',' ordering_term)*)? 
    (K_LIMIT expr ((K_OFFSET | ',') expr)?)? 
; 

create_index_stmt 
: K_CREATE K_UNIQUE? K_INDEX (K_IF K_NOT K_EXISTS)? 
    (database_name '.')? index_name K_ON table_name '(' indexed_column (',' indexed_column)* ')' 
    (K_WHERE expr)? 
; 

create_table_stmt 
: K_CREATE (K_TEMP | K_TEMPORARY)? K_TABLE (K_IF K_NOT K_EXISTS)? 
    (database_name '.')? table_name 
    ('(' column_def (',' column_def)*? (',' table_constraint)* ')' (K_WITHOUT IDENTIFIER)? 
    | K_AS select_stmt 
    ) 
; 

create_trigger_stmt 
: K_CREATE (K_TEMP | K_TEMPORARY)? K_TRIGGER (K_IF K_NOT K_EXISTS)? 
    (database_name '.')? trigger_name (K_BEFORE | K_AFTER | K_INSTEAD K_OF)? 
    (K_DELETE | K_INSERT | K_UPDATE (K_OF column_name (',' column_name)*)?) K_ON (database_name '.')? table_name 
    (K_FOR K_EACH K_ROW)? (K_WHEN expr)? 
    K_BEGIN ((update_stmt | insert_stmt | delete_stmt | select_stmt) ';')+ K_END 
; 

create_view_stmt 
: K_CREATE (K_TEMP | K_TEMPORARY)? K_VIEW (K_IF K_NOT K_EXISTS)? 
    (database_name '.')? view_name K_AS select_stmt 
; 

create_virtual_table_stmt 
: K_CREATE K_VIRTUAL K_TABLE (K_IF K_NOT K_EXISTS)? 
    (database_name '.')? table_name 
    K_USING module_name ('(' module_argument (',' module_argument)* ')')? 
; 

delete_stmt 
: with_clause? K_DELETE K_FROM qualified_table_name 
    (K_WHERE expr)? 
; 

delete_stmt_limited 
: with_clause? K_DELETE K_FROM qualified_table_name 
    (K_WHERE expr)? 
    ((K_ORDER K_BY ordering_term (',' ordering_term)*)? 
    K_LIMIT expr ((K_OFFSET | ',') expr)? 
    )? 
; 

detach_stmt 
: K_DETACH K_DATABASE? database_name 
; 

drop_index_stmt 
: K_DROP K_INDEX (K_IF K_EXISTS)? (database_name '.')? index_name 
; 

drop_table_stmt 
: K_DROP K_TABLE (K_IF K_EXISTS)? (database_name '.')? table_name 
; 

drop_trigger_stmt 
: K_DROP K_TRIGGER (K_IF K_EXISTS)? (database_name '.')? trigger_name 
; 

drop_view_stmt 
: K_DROP K_VIEW (K_IF K_EXISTS)? (database_name '.')? view_name 
; 

factored_select_stmt 
: with_clause? 
    select_core (compound_operator select_core)* 
    (K_ORDER K_BY ordering_term (',' ordering_term)*)? 
    (K_LIMIT expr ((K_OFFSET | ',') expr)?)? 
; 

insert_stmt 
: with_clause? (K_INSERT 
       | K_REPLACE 
       | K_INSERT K_OR K_REPLACE 
       | K_INSERT K_OR K_ROLLBACK 
       | K_INSERT K_OR K_ABORT 
       | K_INSERT K_OR K_FAIL 
       | K_INSERT K_OR K_IGNORE) K_INTO 
    (database_name '.')? table_name ('(' column_name (',' column_name)* ')')? 
    (K_VALUES '(' expr (',' expr)* ')' (',' '(' expr (',' expr)* ')')* 
    | select_stmt 
    | K_DEFAULT K_VALUES 
    ) 
; 

pragma_stmt 
: K_PRAGMA (database_name '.')? pragma_name ('=' pragma_value 
               | '(' pragma_value ')')? 
; 

reindex_stmt 
: K_REINDEX (collation_name 
      | (database_name '.')? (table_name | index_name) 
      )? 
; 

release_stmt 
: K_RELEASE K_SAVEPOINT? savepoint_name 
; 

rollback_stmt 
: K_ROLLBACK (K_TRANSACTION transaction_name?)? (K_TO K_SAVEPOINT? savepoint_name)? 
; 

savepoint_stmt 
: K_SAVEPOINT savepoint_name 
; 

simple_select_stmt 
: with_clause? 
    select_core (K_ORDER K_BY ordering_term (',' ordering_term)*)? 
    (K_LIMIT expr ((K_OFFSET | ',') expr)?)? 
; 

select_stmt 
: with_clause? 
    select_or_values (compound_operator select_or_values)* 
    (K_ORDER K_BY ordering_term (',' ordering_term)*)? 
    (K_LIMIT limit | (expr ((K_OFFSET | ',') expr)?))? 
    (K_SKIP skip)? 
; 

select_or_values 
: K_SELECT (K_DISTINCT | K_ALL)? result_column (',' result_column)* (',' K_OVER'(' K_PARTITION K_BY (K_WITHIN K_DISTANCE)? '('partition_term')' ',' K_COLLECTIVE'(' (K_SKIP skip (K_LIMIT limit)?')' (K_HAVING expr K_ORDER K_BY ordering_term (',' ordering_term)*)?)?')')? 
    (K_FROM (table_or_subquery (',' table_or_subquery)* | join_clause))? 
    (K_WHERE expr)? 
    (K_COLLECTIVE '(' K_ORDER K_BY ordering_term ((K_LIMIT limit K_SKIP skip)?|(K_SKIP skip K_LIMIT limit)?) ')')? 
    (K_GROUP K_BY expr ((',')? K_COLLECTIVE '(' K_ORDER K_BY ordering_term(',' ordering_term)* ((K_LIMIT limit K_SKIP skip)?| (K_SKIP skip K_LIMIT limit)?)')')? (',' expr)* (K_HAVING expr)?)? 
| K_VALUES '(' expr (',' expr)* ')' (',' '(' expr (',' expr)* ')')* 
; 

partition_term 
: any_name '.' any_name ',' any_name 
; 



update_stmt 
: with_clause? K_UPDATE (K_OR K_ROLLBACK 
         | K_OR K_ABORT 
         | K_OR K_REPLACE 
         | K_OR K_FAIL 
         | K_OR K_IGNORE)? qualified_table_name 
    K_SET column_name '=' expr (',' column_name '=' expr)* (K_WHERE expr)? 
; 

update_stmt_limited 
: with_clause? K_UPDATE (K_OR K_ROLLBACK 
         | K_OR K_ABORT 
         | K_OR K_REPLACE 
         | K_OR K_FAIL 
         | K_OR K_IGNORE)? qualified_table_name 
    K_SET column_name '=' expr (',' column_name '=' expr)* (K_WHERE expr)? 
    ((K_ORDER K_BY ordering_term (',' ordering_term)*)? 
    K_LIMIT expr ((K_OFFSET | ',') expr)? 
    )? 
; 

vacuum_stmt 
: K_VACUUM 
; 

column_def 
: column_name type_name? column_constraint* 
; 

type_name 
: name+? ('(' signed_number ')' 
     | '(' signed_number ',' signed_number ')')? 
; 

column_constraint 
: (K_CONSTRAINT name)? 
    (K_PRIMARY K_KEY (K_ASC | K_DESC)? conflict_clause K_AUTOINCREMENT? 
    | K_NOT? K_NULL conflict_clause 
    | K_UNIQUE conflict_clause 
    | K_CHECK '(' expr ')' 
    | K_DEFAULT (signed_number | literal_value | '(' expr ')') 
    | K_COLLATE collation_name 
    | foreign_key_clause 
    ) 
; 

conflict_clause 
: (K_ON K_CONFLICT (K_ROLLBACK 
        | K_ABORT 
        | K_FAIL 
        | K_IGNORE 
        | K_REPLACE 
        ) 
    )? 
; 

//added limit here 

limit 
:(K_CONTAINS (contain)?)? 
//(K_CONTAINS ('(' K_COLLECT '('(file_read)')' ',' '"'any_name'"' ')')?)? 
//(K_CONTAINS (contain)?)? 
; 
contain 
: '(' K_COLLECT '('(file_read)')' ',' (any_name)? (file_read)?')'((file_read)? | (any_name)?) 
//'(' K_COLLECT '('(file_read)')' ',' (any_name)? ')'')' 
; 

skip 
: (K_CONTAINS (contain)?)? 
//(K_CONTAINS ('(' K_COLLECT '('(file_read)')' ',' ('"'(any_name)'"')? (file_read)?)?)?')' 
; 

/* 
    SQLite understands the following binary operators, in order from highest to 
    lowest precedence: 

    || 
    * / % 
    + - 
    << >> & | 
    < <= > >= 
    = == != <> IS IS NOT IN LIKE GLOB MATCH REGEXP 
    AND 
    OR 
*/ 
//added 
file_name 
: any_name '.' any_name 
; 
read_name 
: '"' any_name (',' any_name)* '"' 
; 

//initial adition of Overlap  
expr 
: literal_value 
| BIND_PARAMETER 
| file_read 
| read_name 
| function_name '(' (K_DISTINCT? expr (',' expr)* | '*')? ')' 
| ((database_name '.')? table_name '.')? column_name 
| unary_operator expr 
| expr '||' expr 
| expr ('*' | '/' | '%') expr 
| expr ('+' | '-') expr 
| expr ('<<' | '>>' | '&' | '|') expr 
| expr ('<' | '<=' | '>' | '>=') expr 
| expr ('=' | '==' | '!=' | '<>') expr 
| expr K_AND expr 
| expr K_OR expr 
| '(' expr ')' 
| K_CAST '(' expr K_AS type_name ')' 
| expr K_COLLATE collation_name 
| expr K_NOT? (K_LIKE | K_GLOB | K_REGEXP | K_MATCH) expr (K_ESCAPE expr)? 
| expr (K_ISNULL | K_NOTNULL | K_NOT K_NULL) 
| expr K_IS K_NOT? expr 
| expr K_NOT? K_BETWEEN expr K_AND expr 
| expr K_NOT? K_IN ('(' (select_stmt 
          | expr (',' expr)* 
         )? 
         ')' 
        | (database_name '.')? table_name) 
| ((K_NOT)? K_EXISTS)? '(' select_stmt ')' 
| K_CASE expr? (K_WHEN expr K_THEN expr)+ (K_ELSE expr)? K_END 
| raise_function 
; 

foreign_key_clause 
: K_REFERENCES foreign_table ('(' column_name (',' column_name)* ')')? 
    ((K_ON (K_DELETE | K_UPDATE) (K_SET K_NULL 
            | K_SET K_DEFAULT 
            | K_CASCADE 
            | K_RESTRICT 
            | K_NO K_ACTION) 
    | K_MATCH name 
    ) 
    )* 
    (K_NOT? K_DEFERRABLE (K_INITIALLY K_DEFERRED | K_INITIALLY K_IMMEDIATE)?)? 
; 

raise_function 
: K_RAISE '(' (K_IGNORE 
       | (K_ROLLBACK | K_ABORT | K_FAIL) ',' error_message) 
      ')' 
; 

indexed_column 
: column_name (K_COLLATE collation_name)? (K_ASC | K_DESC)? 
; 

table_constraint 
: (K_CONSTRAINT name)? 
    ((K_PRIMARY K_KEY | K_UNIQUE) '(' indexed_column (',' indexed_column)* ')' conflict_clause 
    | K_CHECK '(' expr ')' 
    | K_FOREIGN K_KEY '(' column_name (',' column_name)* ')' foreign_key_clause 
    ) 
; 

with_clause 
: K_WITH K_RECURSIVE? common_table_expression (',' common_table_expression)* 
; 

qualified_table_name 
: (database_name '.')? table_name (K_INDEXED K_BY index_name 
            | K_NOT K_INDEXED)? 
; 

ordering_term 
: expr (K_COLLATE collation_name)? (K_ASC | K_DESC)? 
| expr '+' expr 
; 

pragma_value 
: signed_number 
| name 
| STRING_LITERAL 
; 

common_table_expression 
: table_name ('(' column_name (',' column_name)* ')')? K_AS '(' select_stmt ')' 
; 

result_column 
: '*' 
| table_name '.' '*' 
| expr (K_AS? column_alias)? 
; 

table_or_subquery 
: (schema_name '.')? table_name (K_AS? table_alias)? 
    (K_INDEXED K_BY index_name 
    | K_NOT K_INDEXED)? 
| (schema_name '.')? table_function_name '(' (expr (',' expr)*)? ')' (K_AS? table_alias)? 
| '(' (table_or_subquery (',' table_or_subquery)* 
     | join_clause) 
    ')' 
| '(' select_stmt ')' (K_AS? table_alias)? 
; 

join_clause 
: table_or_subquery (join_operator table_or_subquery join_constraint)* 
; 

join_operator 
: ',' 
| K_NATURAL? (K_LEFT K_OUTER? | K_INNER | K_CROSS)? K_JOIN 
; 

join_constraint 
: (K_ON expr 
    | K_USING '(' column_name (',' column_name)* ')')? 
; 

select_core 
: K_SELECT (K_DISTINCT | K_ALL)? result_column (',' result_column)* 
    (K_FROM (table_or_subquery (',' table_or_subquery)* | join_clause))? 
    (K_WHERE expr)? 
    (K_GROUP K_BY expr (',' expr)* (K_HAVING expr)?)? 
| K_VALUES '(' expr (',' expr)* ')' (',' '(' expr (',' expr)* ')')* 
; 

compound_operator 
: K_UNION 
| K_UNION K_ALL 
| K_INTERSECT 
| K_EXCEPT 
; 

signed_number 
: ('+' | '-')? NUMERIC_LITERAL 
; 

literal_value 
: NUMERIC_LITERAL 
| STRING_LITERAL 
| BLOB_LITERAL 
| K_NULL 
| K_CURRENT_TIME 
| K_CURRENT_DATE 
| K_CURRENT_TIMESTAMP 
; 

unary_operator 
: '-' 
| '+' 
| '~' 
| K_NOT 
; 

error_message 
: STRING_LITERAL 
; 

module_argument // TODO check what exactly is permitted here 
: expr 
| column_def 
; 

column_alias 
: IDENTIFIER 
| STRING_LITERAL 
; 

keyword 
: K_ABORT 
| K_ACTION 
| K_ADD 
| K_AFTER 
| K_ALL 
| K_ALTER 
| K_ANALYZE 
| K_AND 
| K_AS 
| K_ASC 
| K_ATTACH 
| K_AUTOINCREMENT 
| K_BEFORE 
| K_BEGIN 
| K_BETWEEN 
| K_BY 
| K_CASCADE 
| K_CASE 
| K_CAST 
| K_CHECK 
| K_COLLATE 
| K_COLUMN 
| K_COMMIT 
| K_CONFLICT 
| K_CONSTRAINT 
| K_CREATE 
| K_CROSS 
| K_CURRENT_DATE 
| K_CURRENT_TIME 
| K_CURRENT_TIMESTAMP 
| K_DATABASE 
| K_DEFAULT 
| K_DEFERRABLE 
| K_DEFERRED 
| K_DELETE 
| K_DESC 
| K_DETACH 
| K_DISTINCT 
| K_DROP 
| K_EACH 
| K_ELSE 
| K_END 
| K_ESCAPE 
| K_EXCEPT 
| K_EXCLUSIVE 
| K_EXISTS 
| K_EXPLAIN 
| K_FAIL 
| K_FOR 
| K_FOREIGN 
| K_FROM 
| K_FULL 
| K_GLOB 
| K_GROUP 
| K_HAVING 
| K_IF 
| K_IGNORE 
| K_IMMEDIATE 
| K_IN 
| K_INDEX 
| K_INDEXED 
| K_INITIALLY 
| K_INNER 
| K_INSERT 
| K_INSTEAD 
| K_INTERSECT 
| K_INTO 
| K_IS 
| K_ISNULL 
| K_JOIN 
| K_KEY 
| K_LEFT 
| K_LIKE 
| K_LIMIT 
| K_MATCH 
| K_NATURAL 
| K_NO 
| K_NOT 
| K_NOTNULL 
| K_NULL 
| K_OF 
| K_OFFSET 
| K_ON 
| K_OR 
| K_ORDER 
| K_OUTER 
| K_PLAN 
| K_PRAGMA 
| K_PRIMARY 
| K_QUERY 
| K_RAISE 
| K_RECURSIVE 
| K_REFERENCES 
| K_REGEXP 
| K_REINDEX 
| K_RELEASE 
| K_RENAME 
| K_REPLACE 
| K_RESTRICT 
| K_RIGHT 
| K_ROLLBACK 
| K_ROW 
| K_SAVEPOINT 
| K_SELECT 
| K_SET 
| K_TABLE 
| K_TEMP 
| K_TEMPORARY 
| K_THEN 
| K_TO 
| K_TRANSACTION 
| K_TRIGGER 
| K_UNION 
| K_UNIQUE 
| K_UPDATE 
| K_USING 
| K_VACUUM 
| K_VALUES 
| K_VIEW 
| K_VIRTUAL 
| K_WHEN 
| K_WHERE 
| K_WITH 
| K_WITHOUT 
| K_PARTITION 
| K_SKIP 
| K_OVER 
| K_COLLECTIVE 
| K_WITHIN 
| K_DISTANCE 
| K_CONTAINS 
| K_COLLECT 
| K_OVERLAP 
; 

name 
: any_name 
; 

function_name 
: any_name 
; 

database_name 
: any_name 
; 

schema_name 
: any_name 
; 

table_function_name 
: any_name 
; 

table_name 
: any_name 
; 

table_or_index_name 
: any_name 
; 

new_table_name 
: any_name 
; 

column_name 
: any_name 
; 

collation_name 
: any_name 
; 

foreign_table 
: any_name 
; 

index_name 
: any_name 
; 

trigger_name 
: any_name 
; 

view_name 
: any_name 
; 

module_name 
: any_name 
; 

pragma_name 
: any_name 
; 

savepoint_name 
: any_name 
; 

table_alias 
: IDENTIFIER 
| STRING_LITERAL 
| '(' table_alias ')' 
; 

transaction_name 
: any_name 
; 

file_read 
: any_name '.' any_name 
; 
//added 
inner_loop 
: IDENTIFIER 
| inner_loop ',' inner_loop 
| any_name '.' any_name ',' any_name 
; 
any_name 
: IDENTIFIER 
| keyword 
| STRING_LITERAL 
| '(' any_name ')' 
| any_name '.' any_name 
| '"'any_name'"' 
; 

//added 
file_splitter 
: IDENTIFIER 
| keyword 
|STRING_LITERAL 
| file_splitter ',' 
| ',' file_splitter ',' 
| ',' file_splitter 
; 

SCOL : ';'; 
DOT : '.'; 
OPEN_PAR : '('; 
CLOSE_PAR : ')'; 
COMMA : ','; 
ASSIGN : '='; 
STAR : '*'; 
PLUS : '+'; 
MINUS : '-'; 
TILDE : '~'; 
PIPE2 : '||'; 
DIV : '/'; 
MOD : '%'; 
LT2 : '<<'; 
GT2 : '>>'; 
AMP : '&'; 
PIPE : '|'; 
LT : '<'; 
LT_EQ : '<='; 
GT : '>'; 
GT_EQ : '>='; 
EQ : '=='; 
NOT_EQ1 : '!='; 
NOT_EQ2 : '<>'; 

// http://www.sqlite.org/lang_keywords.html 
K_ABORT : A B O R T; 
K_ACTION : A C T I O N; 
K_ADD : A D D; 
K_AFTER : A F T E R; 
K_ALL : A L L; 
K_ALTER : A L T E R; 
K_ANALYZE : A N A L Y Z E; 
K_AND : A N D; 
K_AS : A S; 
K_ASC : A S C; 
K_ATTACH : A T T A C H; 
K_AUTOINCREMENT : A U T O I N C R E M E N T; 
K_BEFORE : B E F O R E; 
K_BEGIN : B E G I N; 
K_BETWEEN : B E T W E E N; 
K_BY : B Y; 
K_CASCADE : C A S C A D E; 
K_CASE : C A S E; 
K_CAST : C A S T; 
K_CHECK : C H E C K; 
K_COLLATE : C O L L A T E; 
K_COLUMN : C O L U M N; 
K_COMMIT : C O M M I T; 
K_CONFLICT : C O N F L I C T; 
K_CONSTRAINT : C O N S T R A I N T; 
K_CREATE : C R E A T E; 
K_CROSS : C R O S S; 
K_CURRENT_DATE : C U R R E N T '_' D A T E; 
K_CURRENT_TIME : C U R R E N T '_' T I M E; 
K_CURRENT_TIMESTAMP : C U R R E N T '_' T I M E S T A M P; 
K_DATABASE : D A T A B A S E; 
K_DEFAULT : D E F A U L T; 
K_DEFERRABLE : D E F E R R A B L E; 
K_DEFERRED : D E F E R R E D; 
K_DELETE : D E L E T E; 
K_DESC : D E S C; 
K_DETACH : D E T A C H; 
K_DISTINCT : D I S T I N C T; 
K_DROP : D R O P; 
K_EACH : E A C H; 
K_ELSE : E L S E; 
K_END : E N D; 
K_ESCAPE : E S C A P E; 
K_EXCEPT : E X C E P T; 
K_EXCLUSIVE : E X C L U S I V E; 
K_EXISTS : E X I S T S; 
K_EXPLAIN : E X P L A I N; 
K_FAIL : F A I L; 
K_FOR : F O R; 
K_FOREIGN : F O R E I G N; 
K_FROM : F R O M; 
K_FULL : F U L L; 
K_GLOB : G L O B; 
K_GROUP : G R O U P; 
K_HAVING : H A V I N G; 
K_IF : I F; 
K_IGNORE : I G N O R E; 
K_IMMEDIATE : I M M E D I A T E; 
K_IN : I N; 
K_INDEX : I N D E X; 
K_INDEXED : I N D E X E D; 
K_INITIALLY : I N I T I A L L Y; 
K_INNER : I N N E R; 
K_INSERT : I N S E R T; 
K_INSTEAD : I N S T E A D; 
K_INTERSECT : I N T E R S E C T; 
K_INTO : I N T O; 
K_IS : I S; 
K_ISNULL : I S N U L L; 
K_JOIN : J O I N; 
K_KEY : K E Y; 
K_LEFT : L E F T; 
K_LIKE : L I K E; 
K_LIMIT : L I M I T; 
K_MATCH : M A T C H; 
K_NATURAL : N A T U R A L; 
K_NO : N O; 
K_NOT : N O T; 
K_NOTNULL : N O T N U L L; 
K_NULL : N U L L; 
K_OF : O F; 
K_OFFSET : O F F S E T; 
K_ON : O N; 
K_OR : O R; 
K_ORDER : O R D E R; 
K_OUTER : O U T E R; 
K_PLAN : P L A N; 
K_PRAGMA : P R A G M A; 
K_PRIMARY : P R I M A R Y; 
K_QUERY : Q U E R Y; 
K_RAISE : R A I S E; 
K_RECURSIVE : R E C U R S I V E; 
K_REFERENCES : R E F E R E N C E S; 
K_REGEXP : R E G E X P; 
K_REINDEX : R E I N D E X; 
K_RELEASE : R E L E A S E; 
K_RENAME : R E N A M E; 
K_REPLACE : R E P L A C E; 
K_RESTRICT : R E S T R I C T; 
K_RIGHT : R I G H T; 
K_ROLLBACK : R O L L B A C K; 
K_ROW : R O W; 
K_SAVEPOINT : S A V E P O I N T; 
K_SELECT : S E L E C T; 
K_SET : S E T; 
K_TABLE : T A B L E; 
K_TEMP : T E M P; 
K_TEMPORARY : T E M P O R A R Y; 
K_THEN : T H E N; 
K_TO : T O; 
K_TRANSACTION : T R A N S A C T I O N; 
K_TRIGGER : T R I G G E R; 
K_UNION : U N I O N; 
K_UNIQUE : U N I Q U E; 
K_UPDATE : U P D A T E; 
K_USING : U S I N G; 
K_VACUUM : V A C U U M; 
K_VALUES : V A L U E S; 
K_VIEW : V I E W; 
K_VIRTUAL : V I R T U A L; 
K_WHEN : W H E N; 
K_WHERE : W H E R E; 
K_WITH : W I T H; 
K_WITHOUT : W I T H O U T; //My additions 
K_PARTITION : P A R T I T I O N; 
K_SKIP : S K I P; 
K_OVER : O V E R; 
K_COLLECTIVE : C O L L E C T I V E; 
K_WITHIN : W I T H I N; 
K_DISTANCE : D I S T A N C E; 
K_CONTAINS : C O N T A I N S; 
K_COLLECT : C O L L E C T; 
K_OVERLAP : O V E R L A P; 
//added 

IDENTIFIER 
: '"' (~'"' | '""')* '"' 
| '`' (~'`' | '``')* '`' 
| '[' ~']'* ']' 
| [a-zA-Z_] [a-zA-Z_0-9]* // TODO check: needs more chars in set 
| [a-zA-Z_0-9]* //added 
; 

NUMERIC_LITERAL 
: DIGIT+ ('.' DIGIT*)? (E [-+]? DIGIT+)? 
| '.' DIGIT+ (E [-+]? DIGIT+)? 
; 

BIND_PARAMETER 
: '?' DIGIT* 
| [:@$] IDENTIFIER 
; 

STRING_LITERAL 
: '\'' (~'\'' | '\'\'')* '\'' 
; 

BLOB_LITERAL 
: X STRING_LITERAL 
; 

SINGLE_LINE_COMMENT 
: '--' ~[\r\n]* -> channel(HIDDEN) 
; 

MULTILINE_COMMENT 
: '/*' .*? ('*/' | EOF) -> channel(HIDDEN) 
; 

SPACES 
: [ \u000B\t\r\n] -> channel(HIDDEN) 
; 

UNEXPECTED_CHAR 
: . 
; 

fragment DIGIT : [0-9]; 

fragment A : [aA]; 
fragment B : [bB]; 
fragment C : [cC]; 
fragment D : [dD]; 
fragment E : [eE]; 
fragment F : [fF]; 
fragment G : [gG]; 
fragment H : [hH]; 
fragment I : [iI]; 
fragment J : [jJ]; 
fragment K : [kK]; 
fragment L : [lL]; 
fragment M : [mM]; 
fragment N : [nN]; 
fragment O : [oO]; 
fragment P : [pP]; 
fragment Q : [qQ]; 
fragment R : [rR]; 
fragment S : [sS]; 
fragment T : [tT]; 
fragment U : [uU]; 
fragment V : [vV]; 
fragment W : [wW]; 
fragment X : [xX]; 
fragment Y : [yY]; 
fragment Z : [zZ]; 

私Main.javaは次のとおりです。

import org.antlr.v4.runtime.ANTLRInputStream; 
import org.antlr.v4.runtime.CommonTokenStream; 
import org.antlr.v4.runtime.misc.NotNull; 
import org.antlr.v4.runtime.tree.ParseTree; 
import org.antlr.v4.runtime.tree.ParseTreeWalker; 
import java.util.ArrayList; 
import java.util.List; 

public class Main { 

    public static void main(String[] args) throws Exception { 

     // The list that will hold our function names. 
     final List<String> functionNames = new ArrayList<String>(); 

     // The select-statement to be parsed. 
     String sql = "SELECT log AS x FROM t1 \n" + 
       "GROUP BY x\n" + 
       "HAVING count(*) >= 4 \n" + 
       "ORDER BY max(n) + 0"; 

     // Create a lexer and parser for the input. 
     SQLiteLexer lexer = new SQLiteLexer(new ANTLRInputStream(sql)); 
     SQLiteParser parser = new SQLiteParser(new CommonTokenStream(lexer)); 

     // Invoke the `select_stmt` production. 
     ParseTree tree = parser.select_stmt(); 

     // Walk the `select_stmt` production and listen when the parser 
     // enters the `expr` production. 
     ParseTreeWalker.DEFAULT.walk(new SQLiteBaseListener(){ 

      @Override 
      public void enterExpr(@NotNull SQLiteParser.ExprContext ctx) { 
       // Check if the expression is a function call. 
       if (ctx.function_name() != null) { 
        // Yes, it was a function call: add the name of the function 
        // to out list. 
        functionNames.add(ctx.function_name().getText()); 
       } 
      } 
     }, tree); 

     // Print the parsed functions. 
     ParseTree treetry = parser.ordering_term(); 

     ParseTreeWalker.DEFAULT.walk(new SQLiteBaseListener(){ 

      @Override 
      public void enterExpr(@NotNull SQLiteParser.ExprContext ctx) { 
       // Check if the expression is a function call. 
       //if (ctx.function_name() != null) { 
        // Yes, it was a function call: add the name of the function 
        // to out list. 
        //functionNames.add(ctx.function_name().getText()); 
       //} 

       System.out.println("Helloss"); 
      } 
     }, treetry); 

    } 
} 

答えて

0

あなたはあなたの最初のルール(parse)の代わりにselect_stmtで解析を始めています。
EOFトークンがselect_stmtの一部ではないため、エラーが発生しています。

(それはいけない)あなたの一番上のルールにパーサを起動してみてくださいとエラーが解決しない場合は以下を参照してください

ParseTree tree = parser.parse(); 
関連する問題