【发布时间】:2015-07-01 10:13:58
【问题描述】:
也许有人可以帮助我。我写了一个 ANTLR 语法,简而言之是这样的:
grammar myGrammar;
file: mystring+;
mystring: name EQUALITYSIGN DOUBLEQUOTE stringVal DOUBLEQUOTE SEMICOLON;
stringVal: (CHAR | INT)*;
name: CHAR | INT;
EQUALITYSIGN : '=';
DOUBLEQUOTE: '"';
SEMICOLON: ';';
WHITESPACE : ' ' -> skip;
NEWLINE : '\r'? '\n' -> skip;
CHAR : ~[ \t\r\n\\\[\]";=]+;
我对其他数据类型有不同的解析器规则,但考虑到字符串类型,我不想跳过空格。
例如,输入可能如下所示:
string1 = " a ";
在这种情况下,我希望保留“a”前后的空格。因此,双引号内的任何内容都应按原样保留。
我曾尝试使用已定义的渠道来执行此操作,但显然我做错了什么。
有什么想法吗?
提前谢谢!
【问题讨论】:
-
我不使用ANTLR,所以这只是一个猜测:你试过
stringVal: DOUBLEQUOTE (CHAR | INT)* DOUBLEQUOTE ;吗? (当然,然后从mystring中取出双引号)。 -
Thanx 但这没有任何区别。问题是我定义了一般要跳过的空格,但想为 myString 规则设置一个例外。而且我还没有完全成功地做到这一点。
-
我相信 Bart 有它——我的想法和他一样,我只是不确定 ANTLR 如何区分词法分析器和解析器规则。
标签: antlr whitespace