繁体   English   中英

检测错误的语法(错误替代)以进行快速修复

[英]Detect wrong grammar (error alternatives) for quick fixes

在我的ANTLR语法中,我想检测错误的关键字或错误的类型常量,例如“ null”而不是“ NULL”。 我在语法中添加了错误替代,例如:

|   extra='null' #error1

如果在我的自定义编辑器中检测到错误的常数,则可以通过用正确的常数替换它来修复它。

但是我不知道这是否是解决和检测语法错误的关键字或常量的正确方法。

另外,我尝试检测语法中缺少的结尾(请参阅ANTLR书的第9.4章):

.......
|   'if' '(' expr  expr #error2
|   '{'  exprlist #error3
|   'while' '(' expr  expr #error4
........

但这极大地减慢了解析过程,因此我认为这样做是错误的。

我的问题是:

如上所述以这种方式检测错误的关键字,常量等是否正确?

在不大幅降低速度的情况下,是否有可能以某种方式捕获语法中缺少的结尾?

任何帮助表示赞赏。

我发现我可以从规则中提取第二个令牌(在该位置添加大括号):

|   'if' '(' expr  expr #error2

与:

Token myToken = tokens.get(ctx.getChild(2).getSourceInterval().b);
parser.notifyErrorListeners(........

但是,它大大降低了解析器的速度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM