处理特定ANTLR解析器规则中的空格,但在所有其他情况下跳过它

时间:2015-07-01 10:13:59

标签: antlr whitespace

也许有人可以帮我解决这个问题。我写了一个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\\\[\]";=]+;

我对其他数据类型有不同的解析器规则,但考虑到String类型,我不想跳过空格。

例如,输入可能如下所示:

string1 = " a ";

在这种情况下,我想要" a"之前和之后的空格。保存。因此,双引号内的任何内容都应保留原样。

我试图用定义的频道来做,但显然,我做错了。

有什么想法吗?

提前Thanx!

1 个答案:

答案 0 :(得分:1)

您需要将stringVal作为词法规则:

STRING: '"' ~'"'* '"';

并删除DOUBLEQUOTE