也许有人可以帮我解决这个问题。我写了一个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!
答案 0 :(得分:1)
您需要将stringVal
作为词法规则:
STRING: '"' ~'"'* '"';
并删除DOUBLEQUOTE
。