小编flu*_*lux的帖子

ANTLR4:空白处理

我见过许多使用空格处理的ANTLR语法,如下所示:

WS: [ \n\t\r]+ -> skip;
// or
WS: [ \n\t\r]+ -> channel(HIDDEN);
Run Code Online (Sandbox Code Playgroud)

因此将空格分别丢弃发送到隐藏的频道.

用这样的语法:

grammar Not;

start:      expression;
expression: NOT expression
          | (TRUE | FALSE);

NOT:    'not';
TRUE:   'true';
FALSE:  'false';
WS: [ \n\t\r]+ -> skip;
Run Code Online (Sandbox Code Playgroud)

有效输入" 不是真 "或" 非假 ",但也是"非真实 ",这不是理想的结果.将语法更改为:

grammar Not;

start:      expression;

expression: NOT WS+ expression
          | (TRUE | FALSE);

NOT:    'not';

TRUE:   'true';
FALSE:  'false';

WS: [ \n\t\r];
Run Code Online (Sandbox Code Playgroud)

解决了这个问题,但我不想在每个规则中手动处理空格.

一般来说,我希望每个令牌之间都有一个空格,但有一些例外(例如' !true '之间不需要空格).

有一个简单的方法吗?

whitespace parsing antlr parser-generator antlr4

19
推荐指数
1
解决办法
1万
查看次数

标签 统计

antlr ×1

antlr4 ×1

parser-generator ×1

parsing ×1

whitespace ×1