package typing;
import java.io.PushbackReader;
import java.io.StringReader;
import languages.Language;
import languages.LanguageFactory;
import languages.LanguageParser;
import expressions.Expression;
/**
* Simple test case for the {@link ProofTree} class.
*
* @author Benedikt Meurer
* @version $Id$
*/
final class TestProofTree {
private static final String SIMPLE = "(+) 1 20";
private static void printTree(ProofTree tree) {
ProofTreePrinter printer = new ProofTreePrinter(tree);
printer.print(System.out);
System.out.println();
}
private static void typecheck(Expression expression) throws Exception {
// create the initial proof tree
ProofTree tree = ProofTreeFactory.getFactory().createProofTree(expression);
printTree(tree);
// apply (APP)
System.out.println("by (APP):");
tree = tree.apply(Rule.APP, tree.getRoot());
printTree(tree);
// apply (CONST)
System.out.println("by (CONST):");
tree = tree.apply(Rule.CONST, tree.getRoot().getChildAt(1));
printTree(tree);
// apply (APP)
System.out.println("by (APP):");
tree = tree.apply(Rule.APP, tree.getRoot().getChildAt(0));
printTree(tree);
// apply (CONST)
System.out.println("by (CONST):");
tree = tree.apply(Rule.CONST, tree.getRoot().getChildAt(0).getChildAt(1));
printTree(tree);
// apply (CONST)
System.out.println("by (CONST):");
tree = tree.apply(Rule.CONST, tree.getRoot().getChildAt(0).getChildAt(0));
printTree(tree);
}
/**
* Main function.
*
* @param args command line args.
*/
public static void main(String[] args) {
try {
// allocate the language for L1
LanguageFactory languageFactory = LanguageFactory.newInstance();
Language language = languageFactory.getLanguageById("l1");
// allocate the parser
LanguageParser parser = language.newParser(new StringReader(SIMPLE));
// type checker test
typecheck(parser.parse());
}
catch (Exception e) {
e.printStackTrace();
}
}
}