![]() |
1
0
我没有使用过很多antlr,但通常情况下,处理这种类型错误的方法是添加匹配错误语法的规则,使它们产生错误节点,并尝试在错误之后修复,以便继续解析。事后修复是个问题,因为在结束之前,您不希望一个错误为每个新令牌触发越来越多的错误。 |
![]() |
2
0
我通过在语法中为所有可能的错误语句添加新的替换规则来解决这个问题。 每个Java导入语句都被翻译成AST子树,例如以人工符号导入为根。为了确保区分AST和正确代码和错误代码,错误语句的规则使用前缀为err_u的根符号将其重写为AST,因此在import语句的示例中,人工根符号将为err_u import。 可以使用更多不同的根符号来编码有关分析错误的更详细信息。 我的解析器现在和我需要的一样具有容错性,每当我需要时,很容易为新类型的错误输入添加规则。不过,你必须注意不要在语法中引入任何歧义。 |
![]() |
paranoider · /ANTLR解析器规则中的s/s 7 年前 |
![]() |
tuk · Antlr分析规则,用于分析具有匹配大括号的字符串 7 年前 |
![]() |
Ritwik Bhar · Antlr-解析多行#为C.g4定义 7 年前 |