/* * xtc - The eXTensible Compiler * Copyright (C) 2007-2011 Robert Grimm * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. */ package xtc.lang; import java.io.File; import java.io.IOException; import java.io.Reader; import xtc.Constants; import xtc.parser.ParseException; import xtc.tree.Node; import xtc.util.SymbolTable; import xtc.util.Tool; /** * A tool for reading and writing simply typed lambda calculus * expressions. * * @author Robert Grimm * @version $Revision: 1.12 $ */ public class TypedLambda extends Tool { /** Create a new driver for the simply typed lambda calculus. */ public TypedLambda() { /* Nothing to do. */ } public String getName() { return "xtc Simply Typed Lambda Calculus Driver"; } public String getCopy() { return Constants.COPY; } public void init() { super.init(); runtime. bool("printAST", "printAST", false, "Print the program's AST in generic form."). bool("printSource", "printSource", false, "Print the program's AST in source form."); } public File locate(String name) throws IOException { final File file = super.locate(name); if (Integer.MAX_VALUE < file.length()) { throw new IllegalArgumentException(file + ": file too large"); } return file; } public Node parse(Reader in, File file) throws IOException, ParseException { final TypedLambdaParser parser = new TypedLambdaParser(in, file.toString(), (int)file.length()); return (Node)parser.value(parser.pExpression(0)); } public void process(Node node) { // Print AST. if (runtime.test("printAST")) { runtime.console().format(node).pln().flush(); } // Print source. if (runtime.test("printSource")) { new TypedLambdaPrinter(runtime.console()).dispatch(node); runtime.console().pln().flush(); } } /** * Run the driver with the specified command line arguments. * * @param args The command line arguments. */ public static void main(String[] args) { new TypedLambda().run(args); } }