import java.io.PrintWriter;
// Start of code from CodeTemplate.KernelBase
//**************************************************
// class AstNode extension
//**************************************************
public abstract class AstNode {
//**************************************************
// reduce2ast
//**************************************************
public void reduce2ast( AstProperties props ) {
boolean order[];
int t, n, i;
PrintWriter ps;
order = printorder();
t = 0;
n = 0;
ps = ( PrintWriter ) props.getProperty( "output" );
ps.println( " (" + className() + ") new " + className() +
"().setParms( " );
for ( i=0; i<order.length; i++ ) {
if ( i>0 )
ps.print( ", " );
// if order[i] is true; print token else print nonterminal
if ( order[i] )
tok[t++].reduce2ast( props );
else
arg[n++].reduce2ast( props );
}
ps.println( ") /* " + className() + " */" );
}
//**************************************************
// Print_Only_Token_Ast
//**************************************************
public void Print_Only_Token_Ast( AstProperties props ) {
int i;
PrintWriter ps;
if ( tok == null )
return;
tok[0].reduce2ast( props );
ps = ( PrintWriter ) props.getProperty( "output" );
for ( i=1; i<tok.length; i++ ) {
ps.print( "," );
tok[i].reduce2ast( props );
}
}
//**************************************************
// this is the reduce2ast routine that is shared by all
// code escape rewrites.
//**************************************************
public void reduce2astEscape( AstProperties props, String type ) {
PrintWriter pw = ( PrintWriter ) props.getProperty( "output" );
AstToken atok = ( AstToken ) tok[0];
Integer oldLevel = ( Integer ) props.getProperty( "AstLevel" );
// Decrement AstLevel marker
if ( oldLevel != null ) {
if ( oldLevel.intValue() ==1 )
props.removeProperty( "AstLevel" );
else
props.setProperty( "AstLevel",
new Integer( oldLevel.intValue()-1 ) );
}
/* DELETE -- always add white space
if (atok.white_space.trim().length() == 0) {
// white_space is all white. Don't add comment this.
pw.print("(" + $TEqn.kernelConstants.LangName + type + ") " +
$TEqn.kernelConstants.LangName + "AstNode.safeCopy(" );
arg[0].reduce2java(props);
pw.print(" )");
}
else {
*/
pw.print( "(" + kernelConstants.LangName + type + ") "
+ kernelConstants.LangName + "AstNode.addComment( " );
pw.print( kernelConstants.LangName + "AstNode.safeCopy(" );
arg[0].reduce2java( props );
pw.print( "),\"" );
atok.printWhitespaceOnly( props );
pw.print( "\")" );
/* DELETE
}
*/
// Restore AstLevel marker (increment)
if ( oldLevel == null )
props.setProperty( "AstLevel", new Integer( 1 ) );
else
props.setProperty( "AstLevel", oldLevel );
}
}