这是我的语法:
grammar Text;
prog: description+;
description:
type='dat' COLON time COLON ';'
;
time:
type='before ' ID
| type='after ' ID
;
STRING : '"' ('""'|~'"')* '"' ; // quote-quote is an escaped quote
LINE_COMMENT
: '//' (~('\n'|'\r'))* -> skip;
COMMENT : '/*' .*? '*/' -> skip;
LE: '<';
MINUS: '-';
GR: '>';
COLON : ':' ;
HASH: '#';
EQ: '=';
SEMI: ';';
SPACE: ' ';
COMMA: ',';
AND: [Aa][Nn][Dd];
NUMBER: [0-9];
ID: [a-zA-Z][a-zA-z0-9]+;
WS : [ \t\n\r]+ -> channel(HIDDEN);
ANY_CHAR : . ;
和相应的监听器功能:
public void enterDescription(anamParser.DescriptionContext ctx) {
String ID = ctx.time().ID().toString();
System.out.println("ID " + ID);
}
如果我的语法是这样的:
dat:before somethingElse;
字符串ID不包含&#34; somethingElse&#34; 但是&#34; [somethingElse]&#34;
更换线路 String ID = ctx.time()。ID()。toString(); 同 String ID = ctx.time()。ID()。getString();
不会改变这种行为。
访问ID内容的正确方法是什么?
答案 0 :(得分:0)
我确实过分简化了这个例子:
time:
type='before ' ID
| type='after ' ID
| type='between ' ID ' AND ' ID
;
是整个故事。
所以似乎time()。ID()给出了一个数组 type ='before'和type =“'after'。
因此,对ID的正确访问是:
String ID = ctx.time().ID(0).toString();
和第三种类型('之间') 访问显然是
String ID2 = ctx.time().ID(1).toString();
这很好用。