public static void main(String args[]) throws Exception { Yylex l = null; parser p; Interpreter I; try { if (args.length == 0) l = new Yylex(System.in); else l = new Yylex(new FileReader(args[0])); } catch (FileNotFoundException e) { System.err.println("Error: File not found: " + args[0]); System.exit(1); } p = new parser(l); /* The default parser is the first-defined entry point. */ /* You may want to change this. Other options are: */ /* */ try { calc.Absyn.Exp parse_tree = p.pExp(); I = new Interpreter(); // I.eval(parse_tree) ; System.out.println(I.eval(parse_tree)); /*System.out.println(); System.out.println("Parse Succesful!"); System.out.println(); System.out.println("[Abstract Syntax]"); System.out.println(); System.out.println(PrettyPrinter.show(parse_tree)); System.out.println(); System.out.println("[Linearized Tree]"); System.out.println(); System.out.println(PrettyPrinter.print(parse_tree)); */ } catch (Throwable e) { System.err.println( "At line " + String.valueOf(l.line_num()) + ", near \"" + l.buff() + "\" :"); System.err.println(" " + e.getMessage()); System.exit(1); } }
/** Method with the actual generated action code. */ public final java_cup.runtime.Symbol CUP$parser$do_action( int CUP$parser$act_num, java_cup.runtime.lr_parser CUP$parser$parser, java.util.Stack CUP$parser$stack, int CUP$parser$top) throws java.lang.Exception { /* Symbol object for return from actions */ java_cup.runtime.Symbol CUP$parser$result; /* select the action based on the action number */ switch (CUP$parser$act_num) { /*. . . . . . . . . . . . . . . . . . . .*/ case 14: // expresion ::= LPARENT expresion RPARENT { Integer RESULT = null; int EXWleft = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).left; int EXWright = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).right; Integer EXW = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).value; RESULT = new Integer(EXW.intValue()); CUP$parser$result = parser .getSymbolFactory() .newSymbol( "expresion", 0, ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 13: // expresion ::= RESTA expresion { Integer RESULT = null; int EPX1left = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left; int EPX1right = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right; Integer EPX1 = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new Integer(EPX1 * (-1)); CUP$parser$result = parser .getSymbolFactory() .newSymbol( "expresion", 0, ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 12: // expresion ::= expresion POTENCIA expresion { Integer RESULT = null; int ED1left = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).left; int ED1right = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).right; Integer ED1 = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).value; int ED2left = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left; int ED2right = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right; Integer ED2 = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new Integer((int) Math.pow(ED1.intValue(), ED2.intValue())); CUP$parser$result = parser .getSymbolFactory() .newSymbol( "expresion", 0, ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 11: // expresion ::= expresion DIVISION expresion { Integer RESULT = null; int EC1left = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).left; int EC1right = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).right; Integer EC1 = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).value; int EC2left = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left; int EC2right = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right; Integer EC2 = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new Integer(EC1.intValue() / EC2.intValue()); CUP$parser$result = parser .getSymbolFactory() .newSymbol( "expresion", 0, ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 10: // expresion ::= expresion MULTIPLICACION expresion { Integer RESULT = null; int EA1left = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).left; int EA1right = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).right; Integer EA1 = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).value; int EA2left = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left; int EA2right = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right; Integer EA2 = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new Integer(EA1.intValue() * EA2.intValue()); CUP$parser$result = parser .getSymbolFactory() .newSymbol( "expresion", 0, ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 9: // expresion ::= expresion RESTA expresion { Integer RESULT = null; int EE1left = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).left; int EE1right = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).right; Integer EE1 = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).value; int EE2left = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left; int EE2right = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right; Integer EE2 = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new Integer(EE1.intValue() - EE2.intValue()); CUP$parser$result = parser .getSymbolFactory() .newSymbol( "expresion", 0, ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 8: // expresion ::= expresion SUMA expresion { Integer RESULT = null; int E1left = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).left; int E1right = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).right; Integer E1 = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).value; int E2left = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left; int E2right = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right; Integer E2 = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new Integer(E1.intValue() + E2.intValue()); CUP$parser$result = parser .getSymbolFactory() .newSymbol( "expresion", 0, ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 7: // expresion ::= ENTERO { Integer RESULT = null; int D1left = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left; int D1right = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right; Integer D1 = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; RESULT = new Integer(D1.intValue()); CUP$parser$result = parser .getSymbolFactory() .newSymbol( "expresion", 0, ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 6: // ecuacion ::= error NT$1 RESULTADO { Object RESULT = null; // propagate RESULT from NT$1 RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).value; CUP$parser$result = parser .getSymbolFactory() .newSymbol( "ecuacion", 2, ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 5: // NT$1 ::= { Object RESULT = null; System.out.println("Aprenda a escribir br.."); CUP$parser$result = parser .getSymbolFactory() .newSymbol( "NT$1", 4, ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 4: // ecuacion ::= expresion NT$0 RESULTADO { Object RESULT = null; // propagate RESULT from NT$0 RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).value; int EQleft = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).left; int EQright = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).right; Integer EQ = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).value; CUP$parser$result = parser .getSymbolFactory() .newSymbol( "ecuacion", 2, ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 3: // NT$0 ::= { Object RESULT = null; int EQleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left; int EQright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right; Integer EQ = (Integer) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value; System.out.println("Sintaxis OK"); System.out.println("Resultado = " + EQ.intValue()); CUP$parser$result = parser .getSymbolFactory() .newSymbol( "NT$0", 3, ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 2: // sesion ::= ecuacion { Object RESULT = null; CUP$parser$result = parser .getSymbolFactory() .newSymbol( "sesion", 1, ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 1: // $START ::= sesion EOF { Object RESULT = null; int start_valleft = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).left; int start_valright = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).right; Object start_val = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).value; RESULT = start_val; CUP$parser$result = parser .getSymbolFactory() .newSymbol( "$START", 0, ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } /* ACCEPT */ CUP$parser$parser.done_parsing(); return CUP$parser$result; /*. . . . . . . . . . . . . . . . . . . .*/ case 0: // sesion ::= sesion ecuacion { Object RESULT = null; CUP$parser$result = parser .getSymbolFactory() .newSymbol( "sesion", 1, ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)), ((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT); } return CUP$parser$result; /* . . . . . .*/ default: throw new Exception("Invalid action number found in internal parse table"); } }
public static void main(String[] args) throws IOException // may be thrown by the scanner { // check for command-line args if (args.length != 2) { System.err.println( "please supply name of file to be parsed and name of file for unparsed version."); System.exit(-1); } try { Codegen.p = new PrintWriter("/home/ben/Scripts/github/Academic/cs 536/p6/gencode.asm"); } catch (FileNotFoundException e) { System.err.println("File " + args[0] + " not found."); System.exit(-1); } // open input file FileReader inFile = null; try { inFile = new FileReader(args[0]); } catch (FileNotFoundException ex) { System.err.println("File " + args[0] + " not found."); System.exit(-1); } // open output file PrintWriter outFile = null; try { outFile = new PrintWriter(args[1]); } catch (FileNotFoundException ex) { System.err.println("File " + args[1] + " could not be opened for writing."); System.exit(-1); } parser P = new parser(new Yylex(inFile)); Symbol root = null; // the parser will return a Symbol whose value // field is the translation of the root // nonterminal (i.e., of the nonterminal // "program") try { root = P.parse(); // do the parse System.out.println("Little program parsed correctly."); } catch (Exception ex) { System.err.println("Exception occured during parse: " + ex); ex.printStackTrace(); System.exit(-1); } try { // ((SymTabNode)root.value).provideSymTab(new SymTab()); ((ProgramNode) root.value).processNames(); } catch (Exception ex) { System.err.println("Exception occured during parse: " + ex); ex.printStackTrace(); System.exit(-1); } if (!Errors.errors) { ((ASTnode) root.value).unparse(outFile, 0); try { ((ProgramNode) root.value).typeCheck(); } catch (Exception ex) { System.err.println("Exception occured during typecheck: " + ex); ex.printStackTrace(); System.exit(-1); } } if (!Errors.errors) { try { ((ProgramNode) root.value).generate(); Codegen.p.close(); } catch (Exception ex) { System.err.println("Exception occured during codegen: " + ex); ex.printStackTrace(); System.exit(-1); } } outFile.close(); return; }
public static void main(String args[]) throws Exception { parser analizador; analizador = new parser(new Scanner(System.in)); analizador.parse(); }