我正在使用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
;发布于 2013-04-20 11:01:08
与其说是“对”还是“错”,倒不如说是解析器试图找出哪个规则与输入匹配。当ANTLR必须回溯时,ANTLRWorks使用red表示它认为可能匹配的解析树的分支。绿色用于解析器实际探索的分支,黑色用于成功匹配输入的分支。较暗和较亮的颜色是ANTLRWorks,它为嵌套级别的回溯提供视觉反馈-级别越深,颜色越暗。
这个答案的主要来源是由Bovet (创建的ANTLRWorks)和Parr (创建的ANTLR)编写的ANTLRWorks: An ANTLR Grammar Development Environment Unpublished Draft。
从第8页开始:
解析器采用的路径显示为绿色
从第15页开始:
当ANTLR必须回溯以区分不同的产品时,通常很难调试解析器,因为开发人员必须跟踪解析器何时进行推测,何时不进行推测。ANTLRWorks通过将解析树中的所有推测性解析分支显示为红色,清楚地区分了这两种模式。..。以黑色显示的第二个子树是规则的中成功匹配的第二个备选方案的解析树。在ANTLR必须嵌套回溯的情况下,ANTLRWorks通过一系列渐变来更改颜色,每个回溯嵌套级别一个渐变。
https://stackoverflow.com/questions/14057224
复制相似问题