// -*- Java -*- This Cup file was machine-generated by BNFC package se.chalmers.cs.gf.GFC; parser code {: public se.chalmers.cs.gf.GFC.Absyn.Canon pCanon() throws Exception { java_cup.runtime.Symbol res = parse(); return (se.chalmers.cs.gf.GFC.Absyn.Canon) 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.GFC.Absyn.Canon Canon; nonterminal se.chalmers.cs.gf.GFC.Absyn.Line Line; nonterminal se.chalmers.cs.gf.GFC.Absyn.Module Module; nonterminal se.chalmers.cs.gf.GFC.Absyn.ModType ModType; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListModule ListModule; nonterminal se.chalmers.cs.gf.GFC.Absyn.Extend Extend; nonterminal se.chalmers.cs.gf.GFC.Absyn.Open Open; nonterminal se.chalmers.cs.gf.GFC.Absyn.Flag Flag; nonterminal se.chalmers.cs.gf.GFC.Absyn.Def Def; nonterminal se.chalmers.cs.gf.GFC.Absyn.ParDef ParDef; nonterminal se.chalmers.cs.gf.GFC.Absyn.Status Status; nonterminal se.chalmers.cs.gf.GFC.Absyn.CIdent CIdent; nonterminal se.chalmers.cs.gf.GFC.Absyn.Exp Exp1; nonterminal se.chalmers.cs.gf.GFC.Absyn.Exp Exp; nonterminal se.chalmers.cs.gf.GFC.Absyn.Exp Exp2; nonterminal se.chalmers.cs.gf.GFC.Absyn.Sort Sort; nonterminal se.chalmers.cs.gf.GFC.Absyn.Equation Equation; nonterminal se.chalmers.cs.gf.GFC.Absyn.APatt APatt; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListDecl ListDecl; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListAPatt ListAPatt; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListEquation ListEquation; nonterminal se.chalmers.cs.gf.GFC.Absyn.Atom Atom; nonterminal se.chalmers.cs.gf.GFC.Absyn.Decl Decl; nonterminal se.chalmers.cs.gf.GFC.Absyn.CType CType; nonterminal se.chalmers.cs.gf.GFC.Absyn.Labelling Labelling; nonterminal se.chalmers.cs.gf.GFC.Absyn.Term Term2; nonterminal se.chalmers.cs.gf.GFC.Absyn.Term Term1; nonterminal se.chalmers.cs.gf.GFC.Absyn.Term Term; nonterminal se.chalmers.cs.gf.GFC.Absyn.Tokn Tokn; nonterminal se.chalmers.cs.gf.GFC.Absyn.Assign Assign; nonterminal se.chalmers.cs.gf.GFC.Absyn.Case Case; nonterminal se.chalmers.cs.gf.GFC.Absyn.Variant Variant; nonterminal se.chalmers.cs.gf.GFC.Absyn.Label Label; nonterminal se.chalmers.cs.gf.GFC.Absyn.ArgVar ArgVar; nonterminal se.chalmers.cs.gf.GFC.Absyn.Patt Patt; nonterminal se.chalmers.cs.gf.GFC.Absyn.PattAssign PattAssign; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListFlag ListFlag; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListDef ListDef; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListParDef ListParDef; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListCType ListCType; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListCIdent ListCIdent; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListAssign ListAssign; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListArgVar ListArgVar; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListLabelling ListLabelling; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListCase ListCase; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListTerm ListTerm2; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListString ListString; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListVariant ListVariant; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListPattAssign ListPattAssign; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListPatt ListPatt; nonterminal se.chalmers.cs.gf.GFC.Absyn.ListIdent ListIdent; 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; // ) terminal _SYMB_13; // _ terminal _SYMB_14; // < terminal _SYMB_15; // > terminal _SYMB_16; // $ terminal _SYMB_17; // ? terminal _SYMB_18; // => terminal _SYMB_19; // ! terminal _SYMB_20; // ++ terminal _SYMB_21; // / terminal _SYMB_22; // @ terminal _SYMB_23; // + terminal _SYMB_24; // | terminal _SYMB_25; // , terminal _SYMB_26; // Ints terminal _SYMB_27; // Str terminal _SYMB_28; // Type terminal _SYMB_29; // abstract terminal _SYMB_30; // cat terminal _SYMB_31; // concrete terminal _SYMB_32; // data terminal _SYMB_33; // flags terminal _SYMB_34; // fun terminal _SYMB_35; // grammar terminal _SYMB_36; // in terminal _SYMB_37; // lin terminal _SYMB_38; // lincat terminal _SYMB_39; // of terminal _SYMB_40; // open terminal _SYMB_41; // oper terminal _SYMB_42; // param terminal _SYMB_43; // pre terminal _SYMB_44; // resource terminal _SYMB_45; // table terminal _SYMB_46; // transfer terminal _SYMB_47; // variants terminal String _STRING_; terminal Integer _INTEGER_; terminal Double _DOUBLE_; terminal String _IDENT_; start with Canon; Canon ::= _SYMB_35 ListIdent:p_2 _SYMB_39 _IDENT_:p_4 _SYMB_0 ListModule:p_6 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.MGr(p_2,p_4,p_6); :} | ListModule:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Gr(p_1); :} ; Line ::= _SYMB_35 ListIdent:p_2 _SYMB_39 _IDENT_:p_4 _SYMB_0 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.LMulti(p_2,p_4); :} | ModType:p_1 _SYMB_1 Extend:p_3 Open:p_4 _SYMB_2 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.LHeader(p_1,p_3,p_4); :} | Flag:p_1 _SYMB_0 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.LFlag(p_1); :} | Def:p_1 _SYMB_0 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.LDef(p_1); :} | _SYMB_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.LEnd(); :} ; Module ::= ModType:p_1 _SYMB_1 Extend:p_3 Open:p_4 _SYMB_2 ListFlag:p_6 ListDef:p_7 _SYMB_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Mod(p_1,p_3,p_4,p_6,p_7); :} ; ModType ::= _SYMB_29 _IDENT_:p_2 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.MTAbs(p_2); :} | _SYMB_31 _IDENT_:p_2 _SYMB_39 _IDENT_:p_4 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.MTCnc(p_2,p_4); :} | _SYMB_44 _IDENT_:p_2 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.MTRes(p_2); :} | _SYMB_46 _IDENT_:p_2 _SYMB_4 _IDENT_:p_4 _SYMB_5 _IDENT_:p_6 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.MTTrans(p_2,p_4,p_6); :} ; ListModule ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListModule(); :} | ListModule:p_1 Module:p_2 {: RESULT = p_1; p_1.addLast(p_2); :} ; Extend ::= ListIdent:p_1 _SYMB_6 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Ext(p_1); :} | /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.NoExt(); :} ; Open ::= _SYMB_40 ListIdent:p_2 _SYMB_36 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Opens(p_2); :} | /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.NoOpens(); :} ; Flag ::= _SYMB_33 _IDENT_:p_2 _SYMB_1 _IDENT_:p_4 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Flg(p_2,p_4); :} ; Def ::= _SYMB_30 _IDENT_:p_2 _SYMB_7 ListDecl:p_4 _SYMB_8 _SYMB_1 ListCIdent:p_7 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.AbsDCat(p_2,p_4,p_7); :} | _SYMB_34 _IDENT_:p_2 _SYMB_4 Exp:p_4 _SYMB_1 Exp:p_6 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.AbsDFun(p_2,p_4,p_6); :} | _SYMB_46 _IDENT_:p_2 _SYMB_1 Exp:p_4 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.AbsDTrans(p_2,p_4); :} | _SYMB_42 _IDENT_:p_2 _SYMB_1 ListParDef:p_4 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ResDPar(p_2,p_4); :} | _SYMB_41 _IDENT_:p_2 _SYMB_4 CType:p_4 _SYMB_1 Term:p_6 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ResDOper(p_2,p_4,p_6); :} | _SYMB_38 _IDENT_:p_2 _SYMB_1 CType:p_4 _SYMB_1 Term:p_6 _SYMB_0 Term:p_8 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.CncDCat(p_2,p_4,p_6,p_8); :} | _SYMB_37 _IDENT_:p_2 _SYMB_4 CIdent:p_4 _SYMB_1 _SYMB_9 ListArgVar:p_7 _SYMB_5 Term:p_9 _SYMB_0 Term:p_11 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.CncDFun(p_2,p_4,p_7,p_9,p_11); :} | _IDENT_:p_1 Status:p_2 _SYMB_36 _IDENT_:p_4 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.AnyDInd(p_1,p_2,p_4); :} ; ParDef ::= _IDENT_:p_1 ListCType:p_2 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ParD(p_1,p_2); :} ; Status ::= _SYMB_32 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Canon(); :} | /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.NonCan(); :} ; CIdent ::= _IDENT_:p_1 _SYMB_10 _IDENT_:p_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.CIQ(p_1,p_3); :} ; Exp1 ::= Exp1:p_1 Exp2:p_2 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.EApp(p_1,p_2); :} | Exp2:p_1 {: RESULT = p_1; :} ; Exp ::= _SYMB_11 _IDENT_:p_2 _SYMB_4 Exp:p_4 _SYMB_12 _SYMB_5 Exp:p_7 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.EProd(p_2,p_4,p_7); :} | _SYMB_9 _IDENT_:p_2 _SYMB_5 Exp:p_4 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.EAbs(p_2,p_4); :} | _SYMB_2 ListEquation:p_2 _SYMB_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.EEq(p_2); :} | Exp1:p_1 {: RESULT = p_1; :} ; Exp2 ::= Atom:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.EAtom(p_1); :} | _SYMB_32 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.EData(); :} | _SYMB_11 Exp:p_2 _SYMB_12 {: RESULT = p_2; :} ; Sort ::= _SYMB_28 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.SType(); :} ; Equation ::= ListAPatt:p_1 _SYMB_5 Exp:p_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Equ(p_1,p_3); :} ; APatt ::= _SYMB_11 CIdent:p_2 ListAPatt:p_3 _SYMB_12 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.APC(p_2,p_3); :} | _IDENT_:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.APV(p_1); :} | _STRING_:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.APS(p_1); :} | _INTEGER_:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.API(p_1); :} | _DOUBLE_:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.APF(p_1); :} | _SYMB_13 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.APW(); :} ; ListDecl ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListDecl(); :} | Decl:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListDecl(); RESULT.addLast(p_1); :} | Decl:p_1 _SYMB_0 ListDecl:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; ListAPatt ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListAPatt(); :} | ListAPatt:p_1 APatt:p_2 {: RESULT = p_1; p_1.addLast(p_2); :} ; ListEquation ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListEquation(); :} | ListEquation:p_1 Equation:p_2 _SYMB_0 {: RESULT = p_1; p_1.addLast(p_2); :} ; Atom ::= CIdent:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.AC(p_1); :} | _SYMB_14 CIdent:p_2 _SYMB_15 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.AD(p_2); :} | _SYMB_16 _IDENT_:p_2 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.AV(p_2); :} | _SYMB_17 _INTEGER_:p_2 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.AM(p_2); :} | _STRING_:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.AS(p_1); :} | _INTEGER_:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.AI(p_1); :} | Sort:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.AT(p_1); :} ; Decl ::= _IDENT_:p_1 _SYMB_4 Exp:p_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Decl(p_1,p_3); :} ; CType ::= _SYMB_2 ListLabelling:p_2 _SYMB_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.RecType(p_2); :} | _SYMB_11 CType:p_2 _SYMB_18 CType:p_4 _SYMB_12 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Table(p_2,p_4); :} | CIdent:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Cn(p_1); :} | _SYMB_27 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.TStr(); :} | _SYMB_26 _INTEGER_:p_2 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.TInts(p_2); :} ; Labelling ::= Label:p_1 _SYMB_4 CType:p_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Lbg(p_1,p_3); :} ; Term2 ::= ArgVar:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Arg(p_1); :} | CIdent:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.I(p_1); :} | _SYMB_14 CIdent:p_2 ListTerm2:p_3 _SYMB_15 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Par(p_2,p_3); :} | _SYMB_16 _IDENT_:p_2 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.LI(p_2); :} | _SYMB_2 ListAssign:p_2 _SYMB_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.R(p_2); :} | _INTEGER_:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.EInt(p_1); :} | _DOUBLE_:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.EFloat(p_1); :} | Tokn:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.K(p_1); :} | _SYMB_7 _SYMB_8 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.E(); :} | _SYMB_11 Term:p_2 _SYMB_12 {: RESULT = p_2; :} ; Term1 ::= Term2:p_1 _SYMB_10 Label:p_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.P(p_1,p_3); :} | _SYMB_45 CType:p_2 _SYMB_2 ListCase:p_4 _SYMB_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.T(p_2,p_4); :} | _SYMB_45 CType:p_2 _SYMB_7 ListTerm2:p_4 _SYMB_8 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.V(p_2,p_4); :} | Term1:p_1 _SYMB_19 Term2:p_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.S(p_1,p_3); :} | _SYMB_47 _SYMB_2 ListTerm2:p_3 _SYMB_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.FV(p_3); :} | Term2:p_1 {: RESULT = p_1; :} ; Term ::= Term:p_1 _SYMB_20 Term1:p_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.C(p_1,p_3); :} | Term1:p_1 {: RESULT = p_1; :} ; Tokn ::= _STRING_:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.KS(p_1); :} | _SYMB_7 _SYMB_43 ListString:p_3 _SYMB_2 ListVariant:p_5 _SYMB_3 _SYMB_8 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.KP(p_3,p_5); :} ; Assign ::= Label:p_1 _SYMB_1 Term:p_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Ass(p_1,p_3); :} ; Case ::= ListPatt:p_1 _SYMB_18 Term:p_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Cas(p_1,p_3); :} ; Variant ::= ListString:p_1 _SYMB_21 ListString:p_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.Var(p_1,p_3); :} ; Label ::= _IDENT_:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.L(p_1); :} | _SYMB_16 _INTEGER_:p_2 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.LV(p_2); :} ; ArgVar ::= _IDENT_:p_1 _SYMB_22 _INTEGER_:p_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.A(p_1,p_3); :} | _IDENT_:p_1 _SYMB_23 _INTEGER_:p_3 _SYMB_22 _INTEGER_:p_5 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.AB(p_1,p_3,p_5); :} ; Patt ::= _SYMB_11 CIdent:p_2 ListPatt:p_3 _SYMB_12 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.PC(p_2,p_3); :} | _IDENT_:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.PV(p_1); :} | _SYMB_13 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.PW(); :} | _SYMB_2 ListPattAssign:p_2 _SYMB_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.PR(p_2); :} | _INTEGER_:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.PI(p_1); :} | _DOUBLE_:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.PF(p_1); :} ; PattAssign ::= Label:p_1 _SYMB_1 Patt:p_3 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.PAss(p_1,p_3); :} ; ListFlag ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListFlag(); :} | ListFlag:p_1 Flag:p_2 _SYMB_0 {: RESULT = p_1; p_1.addLast(p_2); :} ; ListDef ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListDef(); :} | ListDef:p_1 Def:p_2 _SYMB_0 {: RESULT = p_1; p_1.addLast(p_2); :} ; ListParDef ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListParDef(); :} | ParDef:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListParDef(); RESULT.addLast(p_1); :} | ParDef:p_1 _SYMB_24 ListParDef:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; ListCType ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListCType(); :} | ListCType:p_1 CType:p_2 {: RESULT = p_1; p_1.addLast(p_2); :} ; ListCIdent ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListCIdent(); :} | ListCIdent:p_1 CIdent:p_2 {: RESULT = p_1; p_1.addLast(p_2); :} ; ListAssign ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListAssign(); :} | Assign:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListAssign(); RESULT.addLast(p_1); :} | Assign:p_1 _SYMB_0 ListAssign:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; ListArgVar ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListArgVar(); :} | ArgVar:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListArgVar(); RESULT.addLast(p_1); :} | ArgVar:p_1 _SYMB_25 ListArgVar:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; ListLabelling ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListLabelling(); :} | Labelling:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListLabelling(); RESULT.addLast(p_1); :} | Labelling:p_1 _SYMB_0 ListLabelling:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; ListCase ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListCase(); :} | Case:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListCase(); RESULT.addLast(p_1); :} | Case:p_1 _SYMB_0 ListCase:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; ListTerm2 ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListTerm(); :} | ListTerm2:p_1 Term2:p_2 {: RESULT = p_1; p_1.addLast(p_2); :} ; ListString ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListString(); :} | ListString:p_1 _STRING_:p_2 {: RESULT = p_1; p_1.addLast(p_2); :} ; ListVariant ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListVariant(); :} | Variant:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListVariant(); RESULT.addLast(p_1); :} | Variant:p_1 _SYMB_0 ListVariant:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; ListPattAssign ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListPattAssign(); :} | PattAssign:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListPattAssign(); RESULT.addLast(p_1); :} | PattAssign:p_1 _SYMB_0 ListPattAssign:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ; ListPatt ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListPatt(); :} | ListPatt:p_1 Patt:p_2 {: RESULT = p_1; p_1.addLast(p_2); :} ; ListIdent ::= /* empty */ {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListIdent(); :} | _IDENT_:p_1 {: RESULT = new se.chalmers.cs.gf.GFC.Absyn.ListIdent(); RESULT.addLast(p_1); :} | _IDENT_:p_1 _SYMB_25 ListIdent:p_3 {: RESULT = p_3; p_3.addFirst(p_1); :} ;