SourcePrinter.java
package org.sterling.source.syntax;
import java.io.PrintStream;
import org.sterling.util.PrinterState;
public class SourcePrinter {
public void print(SourceNode node, PrintStream out) {
print(node, new SourcePrinterState(out));
}
private void print(SourceNode node, PrinterState state) {
if (node.isTerminal()) {
print(node.getToken(), state);
} else {
state.begin(node);
for (SourceNode child : node.getChildren()) {
print(child, state);
}
state.end();
}
}
private void print(Token value, PrinterState state) {
state.println(value.getClass().getSimpleName() + " " + value.toString());
}
private static final class SourcePrinterState extends PrinterState {
public SourcePrinterState(PrintStream out) {
super(out);
}
@Override
protected String formatNode(Object node) {
return "Node " + ((SourceNode) node).getKind();
}
}
}