package cangjie_tpc::prism4cj.prism
/**
* @see AbsVisitor
*/
public interface Visitor {
func visit(nodes: ArrayList<Node>): Unit
}
public abstract class AbsVisitor <: Visitor {
public open override func visit(nodes: ArrayList<Node>): Unit {
for (i in 0..nodes.size) {
if (nodes[i].isSyntax()) {
visitSyntax((nodes[i] as Syntax).getOrThrow())
} else {
visitText((nodes[i] as Text).getOrThrow())
}
}
}
protected func visitText(text: Text): Unit
// do not forget to call visit(syntax.children()) inside
protected func visitSyntax(x: Syntax): Unit
}