[antlr-interest] Suppress output of org.antlr.runtime.tree.TreeRewriter
Jim Idle
jimi at temporal-wave.com
Tue Jun 30 08:19:06 PDT 2009
Stefan Bischof wrote:
> Hi guys,
>
> I'm currently using a rewriting tree grammar (rewrite=true, filter=true)
> which means my parser is extending org.antlr.runtime.tree.TreeRewriter.
>
> I want to feed output of my program directly to another program with an
> unnamed pipe | on the command line. Unfortunately that's not possible
> now because the TreeRewriter shows every rewriting on stdout (like a ->
> b).
>
> So, is there a possibility to suppress this output (yes, it's using
> System.out.println)?
>
Hmmm - I wonder if it is supposed to be doing that:
if ( r!=null && !t.equals(r.getTree()) && r.getTree()!=null
) { // show any transformations
System.out.println(((CommonTree)t).toStringTree()+" -> "+
((CommonTree)r.getTree()).toStringTree());
}
Anyway, tell ANTLR to use a superclass say AbstractMyTreeRewriter
(options { superClass=AbstractMyTreeRewriter; } ) and in that class:
public abstract class AbstractMyTreeRewriter extends TreeRewriter {
public TreeRewriter(TreeNodeStream input) {
super(input);
}
public TreeRewriter(TreeNodeStream input, RecognizerSharedState state) {
super(input, state);
}
public Object applyOnce(Object t, fptr whichRule) {
if ( t==null ) return null;
try {
// share TreeParser object but not parsing-related state
state = new RecognizerSharedState();
input = new CommonTreeNodeStream(originalAdaptor, t);
((CommonTreeNodeStream)input).setTokenStream(originalTokenStream);
setBacktrackingLevel(1);
TreeRuleReturnScope r = (TreeRuleReturnScope)whichRule.rule();
setBacktrackingLevel(0);
if ( failed() ) return t;
//
-------------------------------------------------------------------------
// Commented out the output
//if ( r!=null && !t.equals(r.getTree()) &&
r.getTree()!=null ) { // show any transformations
// System.out.println(((CommonTree)t).toStringTree()+" -> "+
//
((CommonTree)r.getTree()).toStringTree());
//}
if ( r!=null && r.getTree()!=null ) return r.getTree();
else return t;
}
catch (RecognitionException e) { ; }
return t;
}
}
More information about the antlr-interest
mailing list