开发者

Way to view a parsed file output?

I am Vinod and am interested to use an ANTLR v3.3 for C parser generation in a Java project and generate the parsed tree in some viewable form. I got help to 开发者_如何学JAVAwrite grammar from this tutorial

ANTLR generates lexer and parser files for the grammar but I don't exactly get how these generated files are viewed. e.g. in few examples from above article, author has generated output using ASTFrame. I found only an interpreter option in ANTLRWorks which shows some tree but it gives error if predicates are more.

Any good reference book or article would be really helpful.


There's only one book you need:


Way to view a parsed file output?

The Definitive ANTLR Reference: Building Domain-Specific Languages.


After that, many more excellent books exist (w.r.t. DSL creation), but this is the book for getting started with ANTLR.


As you saw, ANTLRWorks will print both parse trees and the AST but won't work with predicates and the C target. While not a nice picture like ANTLRWorks, this will print a text version of the AST when you pass it the root of your tree.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜