// -*- Java -*- This Cup file was machine-generated by BNFC package se.chalmers.cs.gf.Core; parser code {: public se.chalmers.cs.gf.Core.Absyn.Module pModule() throws Exception { java_cup.runtime.Symbol res = parse(); return (se.chalmers.cs.gf.Core.Absyn.Module) res.value; } public > A cons_(B x, A xs) { xs.addFirst(x); return xs; } public void syntax_error(java_cup.runtime.Symbol cur_token) { report_error("Syntax Error, trying to recover and continue parse...", cur_token); } public void unrecovered_syntax_error(java_cup.runtime.Symbol cur_token) throws java.lang.Exception { throw new Exception("Unrecoverable Syntax Error"); } :} nonterminal se.chalmers.cs.gf.Core.Absyn.Module Module; nonterminal se.chalmers.cs.gf.Core.Absyn.ListDecl ListDecl; nonterminal se.chalmers.cs.gf.Core.Absyn.Decl Decl; nonterminal se.chalmers.cs.gf.Core.Absyn.ConsDecl ConsDecl; nonterminal se.chalmers.cs.gf.Core.Absyn.ListConsDecl ListConsDecl; nonterminal se.chalmers.cs.gf.Core.Absyn.ListPattern ListPattern; nonterminal se.chalmers.cs.gf.Core.Absyn.Pattern Pattern; nonterminal se.chalmers.cs.gf.Core.Absyn.FieldPattern FieldPattern; nonterminal se.chalmers.cs.gf.Core.Absyn.ListFieldPattern ListFieldPattern; nonterminal se.chalmers.cs.gf.Core.Absyn.PatternVariable PatternVariable; nonterminal se.chalmers.cs.gf.Core.Absyn.Exp Exp; nonterminal se.chalmers.cs.gf.Core.Absyn.LetDef LetDef; nonterminal se.chalmers.cs.gf.Core.Absyn.ListLetDef ListLetDef; nonterminal se.chalmers.cs.gf.Core.Absyn.Case Case; nonterminal se.chalmers.cs.gf.Core.Absyn.ListCase ListCase; nonterminal se.chalmers.cs.gf.Core.Absyn.Exp Exp1; nonterminal se.chalmers.cs.gf.Core.Absyn.Exp Exp3; nonterminal se.chalmers.cs.gf.Core.Absyn.Exp Exp4; nonterminal se.chalmers.cs.gf.Core.Absyn.Exp Exp5; nonterminal se.chalmers.cs.gf.Core.Absyn.FieldType FieldType; nonterminal se.chalmers.cs.gf.Core.Absyn.ListFieldType ListFieldType; nonterminal se.chalmers.cs.gf.Core.Absyn.FieldValue FieldValue; nonterminal se.chalmers.cs.gf.Core.Absyn.ListFieldValue ListFieldValue; nonterminal se.chalmers.cs.gf.Core.Absyn.Exp Exp2; terminal _SYMB_0; // ; terminal _SYMB_1; // : terminal _SYMB_2; // { terminal _SYMB_3; // } terminal _SYMB_4; // = terminal _SYMB_5; // ( terminal _SYMB_6; // ) terminal _SYMB_7; // _ terminal _SYMB_8; // | terminal _SYMB_9; // -> terminal _SYMB_10; // \ terminal _SYMB_11; // . terminal _SYMB_12; // Type terminal _SYMB_13; // case terminal _SYMB_14; // data terminal _SYMB_15; // in terminal _SYMB_16; // let terminal _SYMB_17; // of terminal _SYMB_18; // rec terminal _SYMB_19; // sig terminal _SYMB_20; // where terminal String _STRING_; terminal Integer _INTEGER_; terminal Double _DOUBLE_; terminal String TMeta; terminal String CIdent; start with Module; Module ::= ListDecl:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.Module(p_1); :} ; ListDecl ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListDecl(); :} | Decl:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListDecl(); RESULT.addLast(p_1); :} | Decl:p_1 _SYMB_0 ListDecl:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; Decl ::= _SYMB_14 CIdent:p_2 _SYMB_1 Exp:p_4 _SYMB_20 _SYMB_2 ListConsDecl:p_7 _SYMB_3 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.DataDecl(p_2,p_4,p_7); :} | CIdent:p_1 _SYMB_1 Exp:p_3 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.TypeDecl(p_1,p_3); :} | CIdent:p_1 _SYMB_4 Exp:p_3 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ValueDecl(p_1,p_3); :} ; ConsDecl ::= CIdent:p_1 _SYMB_1 Exp:p_3 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ConsDecl(p_1,p_3); :} ; ListConsDecl ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListConsDecl(); :} | ConsDecl:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListConsDecl(); RESULT.addLast(p_1); :} | ConsDecl:p_1 _SYMB_0 ListConsDecl:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; ListPattern ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListPattern(); :} | ListPattern:p_1 Pattern:p_2 {: RESULT = p_1; p_1.addLast(p_2); :} ; Pattern ::= _SYMB_5 CIdent:p_2 ListPattern:p_3 _SYMB_6 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.PCons(p_2,p_3); :} | PatternVariable:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.PVar(p_1); :} | _SYMB_18 _SYMB_2 ListFieldPattern:p_3 _SYMB_3 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.PRec(p_3); :} | _STRING_:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.PStr(p_1); :} | _INTEGER_:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.PInt(p_1); :} ; FieldPattern ::= CIdent:p_1 _SYMB_4 Pattern:p_3 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.FieldPattern(p_1,p_3); :} ; ListFieldPattern ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListFieldPattern(); :} | FieldPattern:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListFieldPattern(); RESULT.addLast(p_1); :} | FieldPattern:p_1 _SYMB_0 ListFieldPattern:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; PatternVariable ::= CIdent:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.PVVar(p_1); :} | _SYMB_7 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.PVWild(); :} ; Exp ::= _SYMB_16 _SYMB_2 ListLetDef:p_3 _SYMB_3 _SYMB_15 Exp:p_6 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ELet(p_3,p_6); :} | _SYMB_13 Exp:p_2 _SYMB_17 _SYMB_2 ListCase:p_5 _SYMB_3 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ECase(p_2,p_5); :} | Exp1:p_1 {: RESULT = p_1; :} ; LetDef ::= CIdent:p_1 _SYMB_4 Exp:p_3 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.LetDef(p_1,p_3); :} ; ListLetDef ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListLetDef(); :} | LetDef:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListLetDef(); RESULT.addLast(p_1); :} | LetDef:p_1 _SYMB_0 ListLetDef:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; Case ::= Pattern:p_1 _SYMB_8 Exp:p_3 _SYMB_9 Exp:p_5 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.Case(p_1,p_3,p_5); :} ; ListCase ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListCase(); :} | Case:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListCase(); RESULT.addLast(p_1); :} | Case:p_1 _SYMB_0 ListCase:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; Exp1 ::= _SYMB_10 PatternVariable:p_2 _SYMB_9 Exp:p_4 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.EAbs(p_2,p_4); :} | _SYMB_5 PatternVariable:p_2 _SYMB_1 Exp:p_4 _SYMB_6 _SYMB_9 Exp:p_7 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.EPi(p_2,p_4,p_7); :} | Exp2:p_1 {: RESULT = p_1; :} ; Exp3 ::= Exp3:p_1 Exp4:p_2 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.EApp(p_1,p_2); :} | Exp4:p_1 {: RESULT = p_1; :} ; Exp4 ::= Exp4:p_1 _SYMB_11 CIdent:p_3 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.EProj(p_1,p_3); :} | Exp5:p_1 {: RESULT = p_1; :} ; Exp5 ::= _SYMB_19 _SYMB_2 ListFieldType:p_3 _SYMB_3 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ERecType(p_3); :} | _SYMB_18 _SYMB_2 ListFieldValue:p_3 _SYMB_3 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ERec(p_3); :} | CIdent:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.EVar(p_1); :} | _SYMB_12 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.EType(); :} | _STRING_:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.EStr(p_1); :} | _INTEGER_:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.EInteger(p_1); :} | _DOUBLE_:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.EDouble(p_1); :} | TMeta:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.EMeta(p_1); :} | _SYMB_5 Exp:p_2 _SYMB_6 {: RESULT = p_2; :} ; FieldType ::= CIdent:p_1 _SYMB_1 Exp:p_3 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.FieldType(p_1,p_3); :} ; ListFieldType ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListFieldType(); :} | FieldType:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListFieldType(); RESULT.addLast(p_1); :} | FieldType:p_1 _SYMB_0 ListFieldType:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; FieldValue ::= CIdent:p_1 _SYMB_4 Exp:p_3 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.FieldValue(p_1,p_3); :} ; ListFieldValue ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListFieldValue(); :} | FieldValue:p_1 {: RESULT = new se.chalmers.cs.gf.Core.Absyn.ListFieldValue(); RESULT.addLast(p_1); :} | FieldValue:p_1 _SYMB_0 ListFieldValue:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; Exp2 ::= Exp3:p_1 {: RESULT = p_1; :} ;