让 ANTLRWorks 自动处理空格
我有一个像这样的 ANTLR 语法:
grammar HelloGrammar1;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
STATEMENT : 'hello' ID ';' ;
WS : (' '|'\t'|'\r'|'\n')* ;
我希望它解析以下文本:hello qwerty ;
。它是这样工作的。如果我将字符串更改为 helloqwerty;
,一切都很好。我还可以将语法更改为:
grammar HelloGrammar2;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
STATEMENT : 'hello' WS ID WS ';' ;
WS : (' '|'\t'|'\r'|'\n')* ;
在这种情况下, hello qwerty ;
工作正常。是否可以让 ANTLR 自动跳过空格? (即 - 我想让 HelloGrammar1 与 hello qwerty 一起使用;
)
更新
如果有意义:我正在 ANTLRWorks 中测试它。
更新2
也尝试过这种方式:
grammar HelloGrammar;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
STATEMENT : 'hello' ID ';' ;
WS : (' '|'\t'|'\r'|'\n') { $channel = HIDDEN; } ;
仍然不起作用。
更新 3
我正在使用“解释器”选项卡并选择了“语句”规则。
I have an ANTLR grammar like this:
grammar HelloGrammar1;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
STATEMENT : 'hello' ID ';' ;
WS : (' '|'\t'|'\r'|'\n')* ;
I want it to parse the following text: hello qwerty ;
. It doesn work this way. If I change my string to helloqwerty;
, everything is fine. I can also change grammar to:
grammar HelloGrammar2;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
STATEMENT : 'hello' WS ID WS ';' ;
WS : (' '|'\t'|'\r'|'\n')* ;
And in this case, hello qwerty ;
works fine. Is it possible to make ANTLR skip whitespaces automatically? (i.e. - I want to make HelloGrammar1 work with hello qwerty ;
)
Update
If it makes sense: I'm testing it in ANTLRWorks.
Update 2
Also tried this way:
grammar HelloGrammar;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
STATEMENT : 'hello' ID ';' ;
WS : (' '|'\t'|'\r'|'\n') { $channel = HIDDEN; } ;
Still doesn't work.
Update 3
I'm using "Interpreter" tab with "STATEMENT" rule selected.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为问题可能是您应该将 STATMENT (当前是词法分析器规则)更改为 statement (解析器规则)
在 ANTLRWorks 中,它接受:
但不接受:
I think the issue may be that you should change STATEMENT (currently a lexer rule) to statement (a parser rule)
In ANTLRWorks this accepts:
but does not accept: