查看解析文件输出的方法?

时间:2011-03-04 10:56:40

标签: java antlr

我是Vinod并且有兴趣在Java项目中使用ANTLR v3.3生成C解析器,并以某种可视形式生成解析树。我从this tutorial

获得了写语法的帮助

ANTLR为语法生成词法分析器和解析器文件,但我并不完全了解如何查看这些生成的文件。例如在上面几篇文章中,作者使用ASTFrame生成了输出。我发现在ANTLRWorks中只有一个解释器选项显示了一些树,但是如果谓词更多,它会给出错误。

任何好的参考书或文章都会非常有用。

2 个答案:

答案 0 :(得分:1)

你只需要一本书:


enter image description here

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);
  }
}