Java 如何跳过单行sql注释——在antlr4中

Java 如何跳过单行sql注释——在antlr4中,java,sql,antlr,antlr4,Java,Sql,Antlr,Antlr4,如何跳过antlr4语法中的sql单行注释 这是我提供的输入: -- -- $INPUT.sql$ -- CREATE TABLE table_one ( customer_number integer, address character varying(30)); create table table_two ( id integer, city character varying(50)); -- --$INPUT.sql$ -- 创建表1(客户号整数,地址字符变化(30)); 创建

如何跳过antlr4语法中的sql单行注释

这是我提供的输入:

-- -- $INPUT.sql$ -- CREATE TABLE table_one ( customer_number integer, address character varying(30)); create table table_two ( id integer, city character varying(50)); -- --$INPUT.sql$ -- 创建表1(客户号整数,地址字符变化(30)); 创建表2(id整数,城市字符变化(50)); 像这样:

SINGLE_LINE_COMMENT
 : '--' ~[\r\n]* -> skip
 ;
如果我使用以下语法分析您的示例输入:

grammar Hello;

parse
 : .*? EOF
 ;

INTEGER
 : [0-9]+
 ;

IDENTIFIER
 : [a-zA-Z_]+
 ;

SINGLE_LINE_COMMENT
 : '--' ~[\r\n]* -> skip
 ;

SPACES
 : [ \t\r\n]+ -> skip
 ;

OTHER
 : .
 ;
让ANTLRWorks2打印令牌,我看到以下内容:

[@0,23:28='CREATE',<2>,6:0]
[@1,30:34='TABLE',<2>,6:7]
[@2,36:44='table_one',<2>,6:13]
[@3,46:46='(',<5>,6:23]
[@4,48:62='customer_number',<2>,6:25]
[@5,64:70='integer',<2>,6:41]
[@6,71:71=',',<5>,6:48]
[@7,73:79='address',<2>,6:50]
[@8,81:89='character',<2>,6:58]
[@9,91:97='varying',<2>,6:68]
[@10,98:98='(',<5>,6:75]
[@11,99:100='30',<1>,6:76]
[@12,101:101=')',<5>,6:78]
[@13,102:102=')',<5>,6:79]
[@14,103:103=';',<5>,6:80]
[@15,106:111='create',<2>,8:0]
[@16,113:117='table',<2>,8:7]
[@17,119:127='table_two',<2>,8:13]
[@18,129:129='(',<5>,8:23]
[@19,131:132='id',<2>,8:25]
[@20,134:140='integer',<2>,8:28]
[@21,141:141=',',<5>,8:35]
[@22,143:146='city',<2>,8:37]
[@23,148:156='character',<2>,8:42]
[@24,158:164='varying',<2>,8:52]
[@25,165:165='(',<5>,8:59]
[@26,166:167='50',<1>,8:60]
[@27,168:168=')',<5>,8:62]
[@28,169:169=')',<5>,8:63]
[@29,170:170=';',<5>,8:64]
[@30,172:171='<EOF>',<-1>,9:0]
[@0,23:28='CREATE',6:0]
[@1,30:34='TABLE',6:7]
[@2,36:44='table_one',6:13]
[@3,46:46='(',,6:23]
[@4,48:62='customer_number',6:25]
[@5,64:70='integer',6:41]
[@6,71:71=',',,6:48]
[@7,73:79='address',6:50]
[@8,81:89='character',6:58]
[@9,91:97='variable',6:68]
[@10,98:98='(',,6:75]
[@11,99:100='30',,6:76]
[@12,101:101=')',,6:78]
[@13,102:102=')',,6:79]
[@14,103:103=';',,6:80]
[@15106:111='create',8:0]
[@16113:117='table',8:7]
[@17119:127='table_two',8:13]
[@18,129:129='(',,8:23]
[@19131:132='id',8:25]
[@20134:140='integer',8:28]
[@21,141:141=',',,8:35]
[@22143:146='city',8:37]
[@23148:156='character',8:42]
[@24158:164='variable',8:52]
[@25,165:165='(',,8:59]
[@26,166:167='50',,8:60]
[@27,168:168=')',,8:62]
[@28,169:169=')',,8:63]
[@29,170:170=';',,8:64]
[@30,172:171='',,9:0]
即:正确丢弃行注释。如果您的情况没有发生这种情况,则说明发生了其他问题。

如下所示:

SINGLE_LINE_COMMENT
 : '--' ~[\r\n]* -> skip
 ;
如果我使用以下语法分析您的示例输入:

grammar Hello;

parse
 : .*? EOF
 ;

INTEGER
 : [0-9]+
 ;

IDENTIFIER
 : [a-zA-Z_]+
 ;

SINGLE_LINE_COMMENT
 : '--' ~[\r\n]* -> skip
 ;

SPACES
 : [ \t\r\n]+ -> skip
 ;

OTHER
 : .
 ;
让ANTLRWorks2打印令牌,我看到以下内容:

[@0,23:28='CREATE',<2>,6:0]
[@1,30:34='TABLE',<2>,6:7]
[@2,36:44='table_one',<2>,6:13]
[@3,46:46='(',<5>,6:23]
[@4,48:62='customer_number',<2>,6:25]
[@5,64:70='integer',<2>,6:41]
[@6,71:71=',',<5>,6:48]
[@7,73:79='address',<2>,6:50]
[@8,81:89='character',<2>,6:58]
[@9,91:97='varying',<2>,6:68]
[@10,98:98='(',<5>,6:75]
[@11,99:100='30',<1>,6:76]
[@12,101:101=')',<5>,6:78]
[@13,102:102=')',<5>,6:79]
[@14,103:103=';',<5>,6:80]
[@15,106:111='create',<2>,8:0]
[@16,113:117='table',<2>,8:7]
[@17,119:127='table_two',<2>,8:13]
[@18,129:129='(',<5>,8:23]
[@19,131:132='id',<2>,8:25]
[@20,134:140='integer',<2>,8:28]
[@21,141:141=',',<5>,8:35]
[@22,143:146='city',<2>,8:37]
[@23,148:156='character',<2>,8:42]
[@24,158:164='varying',<2>,8:52]
[@25,165:165='(',<5>,8:59]
[@26,166:167='50',<1>,8:60]
[@27,168:168=')',<5>,8:62]
[@28,169:169=')',<5>,8:63]
[@29,170:170=';',<5>,8:64]
[@30,172:171='<EOF>',<-1>,9:0]
[@0,23:28='CREATE',6:0]
[@1,30:34='TABLE',6:7]
[@2,36:44='table_one',6:13]
[@3,46:46='(',,6:23]
[@4,48:62='customer_number',6:25]
[@5,64:70='integer',6:41]
[@6,71:71=',',,6:48]
[@7,73:79='address',6:50]
[@8,81:89='character',6:58]
[@9,91:97='variable',6:68]
[@10,98:98='(',,6:75]
[@11,99:100='30',,6:76]
[@12,101:101=')',,6:78]
[@13,102:102=')',,6:79]
[@14,103:103=';',,6:80]
[@15106:111='create',8:0]
[@16113:117='table',8:7]
[@17119:127='table_two',8:13]
[@18,129:129='(',,8:23]
[@19131:132='id',8:25]
[@20134:140='integer',8:28]
[@21,141:141=',',,8:35]
[@22143:146='city',8:37]
[@23148:156='character',8:42]
[@24158:164='variable',8:52]
[@25,165:165='(',,8:59]
[@26,166:167='50',,8:60]
[@27,168:168=')',,8:62]
[@28,169:169=')',,8:63]
[@29,170:170=';',,8:64]
[@30,172:171='',,9:0]
即:正确丢弃行注释。如果您的情况没有发生这种情况,则说明发生了其他问题。

如下所示:

SINGLE_LINE_COMMENT
 : '--' ~[\r\n]* -> skip
 ;
如果我使用以下语法分析您的示例输入:

grammar Hello;

parse
 : .*? EOF
 ;

INTEGER
 : [0-9]+
 ;

IDENTIFIER
 : [a-zA-Z_]+
 ;

SINGLE_LINE_COMMENT
 : '--' ~[\r\n]* -> skip
 ;

SPACES
 : [ \t\r\n]+ -> skip
 ;

OTHER
 : .
 ;
让ANTLRWorks2打印令牌,我看到以下内容:

[@0,23:28='CREATE',<2>,6:0]
[@1,30:34='TABLE',<2>,6:7]
[@2,36:44='table_one',<2>,6:13]
[@3,46:46='(',<5>,6:23]
[@4,48:62='customer_number',<2>,6:25]
[@5,64:70='integer',<2>,6:41]
[@6,71:71=',',<5>,6:48]
[@7,73:79='address',<2>,6:50]
[@8,81:89='character',<2>,6:58]
[@9,91:97='varying',<2>,6:68]
[@10,98:98='(',<5>,6:75]
[@11,99:100='30',<1>,6:76]
[@12,101:101=')',<5>,6:78]
[@13,102:102=')',<5>,6:79]
[@14,103:103=';',<5>,6:80]
[@15,106:111='create',<2>,8:0]
[@16,113:117='table',<2>,8:7]
[@17,119:127='table_two',<2>,8:13]
[@18,129:129='(',<5>,8:23]
[@19,131:132='id',<2>,8:25]
[@20,134:140='integer',<2>,8:28]
[@21,141:141=',',<5>,8:35]
[@22,143:146='city',<2>,8:37]
[@23,148:156='character',<2>,8:42]
[@24,158:164='varying',<2>,8:52]
[@25,165:165='(',<5>,8:59]
[@26,166:167='50',<1>,8:60]
[@27,168:168=')',<5>,8:62]
[@28,169:169=')',<5>,8:63]
[@29,170:170=';',<5>,8:64]
[@30,172:171='<EOF>',<-1>,9:0]
[@0,23:28='CREATE',6:0]
[@1,30:34='TABLE',6:7]
[@2,36:44='table_one',6:13]
[@3,46:46='(',,6:23]
[@4,48:62='customer_number',6:25]
[@5,64:70='integer',6:41]
[@6,71:71=',',,6:48]
[@7,73:79='address',6:50]
[@8,81:89='character',6:58]
[@9,91:97='variable',6:68]
[@10,98:98='(',,6:75]
[@11,99:100='30',,6:76]
[@12,101:101=')',,6:78]
[@13,102:102=')',,6:79]
[@14,103:103=';',,6:80]
[@15106:111='create',8:0]
[@16113:117='table',8:7]
[@17119:127='table_two',8:13]
[@18,129:129='(',,8:23]
[@19131:132='id',8:25]
[@20134:140='integer',8:28]
[@21,141:141=',',,8:35]
[@22143:146='city',8:37]
[@23148:156='character',8:42]
[@24158:164='variable',8:52]
[@25,165:165='(',,8:59]
[@26,166:167='50',,8:60]
[@27,168:168=')',,8:62]
[@28,169:169=')',,8:63]
[@29,170:170=';',,8:64]
[@30,172:171='',,9:0]
即:正确丢弃行注释。如果您的情况没有发生这种情况,则说明发生了其他问题。

如下所示:

SINGLE_LINE_COMMENT
 : '--' ~[\r\n]* -> skip
 ;
如果我使用以下语法分析您的示例输入:

grammar Hello;

parse
 : .*? EOF
 ;

INTEGER
 : [0-9]+
 ;

IDENTIFIER
 : [a-zA-Z_]+
 ;

SINGLE_LINE_COMMENT
 : '--' ~[\r\n]* -> skip
 ;

SPACES
 : [ \t\r\n]+ -> skip
 ;

OTHER
 : .
 ;
让ANTLRWorks2打印令牌,我看到以下内容:

[@0,23:28='CREATE',<2>,6:0]
[@1,30:34='TABLE',<2>,6:7]
[@2,36:44='table_one',<2>,6:13]
[@3,46:46='(',<5>,6:23]
[@4,48:62='customer_number',<2>,6:25]
[@5,64:70='integer',<2>,6:41]
[@6,71:71=',',<5>,6:48]
[@7,73:79='address',<2>,6:50]
[@8,81:89='character',<2>,6:58]
[@9,91:97='varying',<2>,6:68]
[@10,98:98='(',<5>,6:75]
[@11,99:100='30',<1>,6:76]
[@12,101:101=')',<5>,6:78]
[@13,102:102=')',<5>,6:79]
[@14,103:103=';',<5>,6:80]
[@15,106:111='create',<2>,8:0]
[@16,113:117='table',<2>,8:7]
[@17,119:127='table_two',<2>,8:13]
[@18,129:129='(',<5>,8:23]
[@19,131:132='id',<2>,8:25]
[@20,134:140='integer',<2>,8:28]
[@21,141:141=',',<5>,8:35]
[@22,143:146='city',<2>,8:37]
[@23,148:156='character',<2>,8:42]
[@24,158:164='varying',<2>,8:52]
[@25,165:165='(',<5>,8:59]
[@26,166:167='50',<1>,8:60]
[@27,168:168=')',<5>,8:62]
[@28,169:169=')',<5>,8:63]
[@29,170:170=';',<5>,8:64]
[@30,172:171='<EOF>',<-1>,9:0]
[@0,23:28='CREATE',6:0]
[@1,30:34='TABLE',6:7]
[@2,36:44='table_one',6:13]
[@3,46:46='(',,6:23]
[@4,48:62='customer_number',6:25]
[@5,64:70='integer',6:41]
[@6,71:71=',',,6:48]
[@7,73:79='address',6:50]
[@8,81:89='character',6:58]
[@9,91:97='variable',6:68]
[@10,98:98='(',,6:75]
[@11,99:100='30',,6:76]
[@12,101:101=')',,6:78]
[@13,102:102=')',,6:79]
[@14,103:103=';',,6:80]
[@15106:111='create',8:0]
[@16113:117='table',8:7]
[@17119:127='table_two',8:13]
[@18,129:129='(',,8:23]
[@19131:132='id',8:25]
[@20134:140='integer',8:28]
[@21,141:141=',',,8:35]
[@22143:146='city',8:37]
[@23148:156='character',8:42]
[@24158:164='variable',8:52]
[@25,165:165='(',,8:59]
[@26,166:167='50',,8:60]
[@27,168:168=')',,8:62]
[@28,169:169=')',,8:63]
[@29,170:170=';',,8:64]
[@30,172:171='',,9:0]

即:正确丢弃行注释。如果在您的情况下没有发生这种情况,则说明出现了其他问题。

尝试在规则末尾使用
EOF
作为选项之一,而不仅仅是
\r\n
,例如:

LINE_COMMENT
   : '//' ~[\r\n]* (EOF|'\r'? '\n') -> channel(HIDDEN)
   ;

尝试将规则末尾的
EOF
作为选项之一,而不仅仅是
\r\n
,例如:

LINE_COMMENT
   : '//' ~[\r\n]* (EOF|'\r'? '\n') -> channel(HIDDEN)
   ;

尝试将规则末尾的
EOF
作为选项之一,而不仅仅是
\r\n
,例如:

LINE_COMMENT
   : '//' ~[\r\n]* (EOF|'\r'? '\n') -> channel(HIDDEN)
   ;

尝试将规则末尾的
EOF
作为选项之一,而不仅仅是
\r\n
,例如:

LINE_COMMENT
   : '//' ~[\r\n]* (EOF|'\r'? '\n') -> channel(HIDDEN)
   ;

得到同样的结果。。。跳过整个sql文件一次尝试以下代码
行\u注释:'-'~[\r\n]*(EOF |'\r'?'\n')->通道(隐藏)关于
/
的内容,而不是
-
类似的
行注释:'/'~[\r\n]*(EOF |'\r'?'\n')->频道(隐藏)//工作正常,我可以跳过这些注释..但是--注释不起作用--得到相同的结果。。。跳过整个sql文件一次尝试以下代码
行\u注释:'-'~[\r\n]*(EOF |'\r'?'\n')->通道(隐藏)关于
/
的内容,而不是
-
类似的
行注释:'/'~[\r\n]*(EOF |'\r'?'\n')->频道(隐藏)//工作正常,我可以跳过这些注释..但是--注释不起作用--得到相同的结果。。。跳过整个sql文件一次请尝试以下代码
行\u注释:'--'~[\r\n