ANTLRWorks调试 - 不同颜色的含义是什么?(ANTLRWorks debugging -

2019-07-17 14:46发布

我使用ANTLRWorks的调试模式来测试我的C-语法。 调试中ANTLRWorks是为了更好的理解真的很棒,但我理解输出树的不同颜色的问题。 我使用的是backtrack=true在我的语法。 我认为红色意味着调试器进入错误的方式,而绿色的告诉我,这是已经在正确的道路。 但对于暗红色和深绿色?

我添加了一个“小树”,只有符合下列输入的图片:

int test;

如果一定要回答的问题是必要的,下面是其中使用了4条最重要的规则。

start
: declaration*
;

declaration
: functionDefinition
| dataDeclaration //also used for Function Declaration
| assemblerDefinition
;


functionDefinition 
: declarationSpecifier* declarator Equals Default Semi
| declarationSpecifier* declarator Equals Delete Semi
| declarationSpecifier* declarator functionBody
;

dataDeclaration
:declarationSpecifier* declarator initializer? (Comma declarator initializer?)* Semi
;

Answer 1:

这与其说是“正确”和“错误的”,因为它是关于解析器试图找出哪些规则将匹配输入。 当ANTLR有原路返回,ANTLRWorks使用红色,它被视为可能的匹配分析树的分支。 绿色用于分支解析器实际探索和黑色为成功匹配的输入分支。 较暗和较亮的颜色为回溯的嵌套级别提供视觉反馈ANTLRWorks - 更深水平的颜色越深。

此答案的主要来源是从ANTLRWorks:一个ANTLR语法开发环境未发表的草案由播威(创建ANTLRWorks)和帕尔(创建ANTLR)写入。

第8页:

由解析器所采取的路径以绿色示出

第15页:

当ANTLR必须原路返回替代生产之间的区分,它通常是难以调试分析器,因为开发人员必须跟踪当分析器猜测,当它不是。 ANTLRWorks清楚地示出以红色的解析树的所有推测性解析分支在两个模式之间进行区分。 ...第二子树[以黑色示出是用于在规则s表示匹配成功的第二替代的解析树。 在ANTLR必须巢原路返回,ANTLRWorks通过一系列的灰度,每个回溯嵌套级别改变颜色的情况。



文章来源: ANTLRWorks debugging - the meaning of the different colors?