import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.tree.*;

import java.io.FileInputStream;
import java.io.InputStream;

public class Conclave {
    public static void main(String[] args) throws Exception {
        String inputFile = null;

        if ( args.length>0 ) inputFile = args[0];
        InputStream is = System.in;
        if ( inputFile!=null ) {
            is = new FileInputStream(inputFile);
        }
        ANTLRInputStream input = new ANTLRInputStream(is);

        JavaLexer lexer = new JavaLexer(input);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        JavaParser parser = new JavaParser(tokens);
        ParseTree tree = parser.compilationUnit(); // parse

		System.out.println("# TYPE, UID, ID, CTX, FILE, LINESTART, LINEEND");

        ParseTreeWalker walker = new ParseTreeWalker(); // create standard walker
        ConclaveListener extractor = new ConclaveListener(parser, inputFile);
        walker.walk(extractor, tree); // initiate walk of tree with listener
    }
}
