Java 如何跳过单行sql注释——在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)); 创建表2(id整数,城市字符变化(50)); 像这样: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)); 创建
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