我是Vinod并且有兴趣在Java项目中使用ANTLR v3.3生成C解析器,并以某种可视形式生成解析树。我从this tutorial
获得了写语法的帮助ANTLR为语法生成词法分析器和解析器文件,但我并不完全了解如何查看这些生成的文件。例如在上面几篇文章中,作者使用ASTFrame生成了输出。我发现在ANTLRWorks中只有一个解释器选项显示了一些树,但是如果谓词更多,它会给出错误。
任何好的参考书或文章都会非常有用。
答案 0 :(得分:1)
你只需要一本书:
The Definitive ANTLR Reference: Building Domain-Specific Languages。
之后,存在更多优秀书籍(w.r.t. DSL创作),但这是 开始使用ANTLR的书。
答案 1 :(得分:0)
如您所见,ANTLRWorks将打印解析树和AST,但不适用于谓词和C目标。虽然不是像ANTLRWorks那样漂亮的图片,但是当你将树的根目录传递给它时,它会打印AST的文本版本。
void printNodes(pANTLR3_BASE_TREE thisNode, int level)
{
ANTLR3_UINT32 numChildren = thisNode->getChildCount(thisNode);
//printf("Child count %d\n",numChildren);
pANTLR3_BASE_TREE loopNode;
for(int i=0;i<numChildren;i++)
{
//Need to cast since these can hold anything
loopNode = (pANTLR3_BASE_TREE)thisNode->getChild(thisNode,i);
//Print this node
pANTLR3_STRING thisText = loopNode->getText(loopNode);
for(int j=0;j<level;j++)
printf(" ");
printf("%s\n",thisText->chars);
//If this node has a child
if(loopNode->getChildCount(loopNode) > 0)
printNodes(loopNode, level + 2);
}
}