From 6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6 Mon Sep 17 00:00:00 2001 From: Elizabeth Alexander Hunt Date: Thu, 2 Jul 2026 11:55:17 -0700 Subject: Init --- Homework/cs5300/p4-formatter/main/Main.java | 76 +++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 Homework/cs5300/p4-formatter/main/Main.java (limited to 'Homework/cs5300/p4-formatter/main') diff --git a/Homework/cs5300/p4-formatter/main/Main.java b/Homework/cs5300/p4-formatter/main/Main.java new file mode 100644 index 0000000..7eb7d72 --- /dev/null +++ b/Homework/cs5300/p4-formatter/main/Main.java @@ -0,0 +1,76 @@ +package main; + +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; +import parser.CminusLexer; +import parser.CminusParser; +import submit.ASTVisitor; +import org.antlr.v4.runtime.Parser; +import submit.ast.Node; + +import java.io.IOException; +import java.util.Properties; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class Main { + private static Logger LOGGER; + + /** + * @param args the command line arguments + * @throws java.io.IOException + */ + public static void main(String[] args) throws IOException { + // Logging setup + Level level = Level.INFO; + + // TODO Enable trace-level code as needed. When true, LOGGER.fine() statements + // will be visible. + final boolean trace = true; + if (trace) { + level = Level.ALL; + } + + Properties props = System.getProperties(); + props.setProperty("java.util.logging.SimpleFormatter.format", "%5$s%6$s%n"); + Logger.getLogger("").setLevel(level); + for (Handler handler : Logger.getLogger("").getHandlers()) { + handler.setLevel(level); + } + LOGGER = Logger.getLogger(Parser.class.getName()); + + // TODO Update the filename as needed + final String filename = "data/test1.c"; + + LOGGER.info(""); + LOGGER.info("Parsing " + filename + "\n"); + LOGGER.info(""); + final CharStream charStream = CharStreams.fromFileName(filename); + CminusLexer lexer = new CminusLexer(charStream); + CommonTokenStream tokens = new CommonTokenStream(lexer); + CminusParser parser = new CminusParser(tokens); + parser.setBuildParseTree(true); + CminusParser.ProgramContext programCtx = parser.program(); + + // TODO Implement building of the parse tree + LOGGER.info(""); + LOGGER.info("Building abstract syntax tree"); + LOGGER.info(""); + ASTVisitor v = new ASTVisitor(LOGGER); + Node ast = v.visitProgram(programCtx); + + // TODO Output formatted code + LOGGER.info(""); + LOGGER.info("Formatted code:"); + LOGGER.info(""); + StringBuilder builder = new StringBuilder(); + try { + ast.toCminus(builder, ""); + } finally { + LOGGER.info(builder.toString()); + } + } + +} -- cgit v1.3