{ {-# OPTIONS -w #-} -- Haskell module generated by grm *** DO NOT EDIT *** module Language.Pec.Par where import Grm.Prims import Grm.Lex import Language.Pec.Abs } %tokentype { (Token Point) } %name grmParse %token "#" { TSymbol _ "#" } "(" { TSymbol _ "(" } ")" { TSymbol _ ")" } "," { TSymbol _ "," } "->" { TSymbol _ "->" } "." { TSymbol _ "." } ".." { TSymbol _ ".." } "::" { TSymbol _ "::" } ";" { TSymbol _ ";" } "<-" { TSymbol _ "<-" } "=" { TSymbol _ "=" } "=>" { TSymbol _ "=>" } "@" { TSymbol _ "@" } "Array" { TSymbol _ "Array" } "[" { TSymbol _ "[" } "\\" { TSymbol _ "\\" } "]" { TSymbol _ "]" } "as" { TSymbol _ "as" } "branch" { TSymbol _ "branch" } "case" { TSymbol _ "case" } "do" { TSymbol _ "do" } "exports" { TSymbol _ "exports" } "extern" { TSymbol _ "extern" } "imports" { TSymbol _ "imports" } "in" { TSymbol _ "in" } "instance" { TSymbol _ "instance" } "let" { TSymbol _ "let" } "module" { TSymbol _ "module" } "of" { TSymbol _ "of" } "switch" { TSymbol _ "switch" } "type" { TSymbol _ "type" } "where" { TSymbol _ "where" } "{" { TSymbol _ "{" } "|" { TSymbol _ "|" } "}" { TSymbol _ "}" } uident { TUident _ _ } usym { TUsym _ _ } lident { TLident _ _ } string { TString _ _ } char { TChar _ _ } number { TNumber _ _ } %% Module : "module" Modid ExportDecls ImportDecls "where" "{" TopDeclList "}" {Module (lrPoint [point $1 ,point $2 ,point $3 ,point $4 ,point $5 ,point $6 ,lrPointList $7 ,point $8]) $2 $3 $4 $7 } ExportDecls : "exports" "{" ExportList "}" {ExpListD (lrPoint [point $1 ,point $2 ,lrPointList $3 ,point $4]) $3 } | {ExpAllD noPoint} ImportDecls : "imports" "{" ImportList "}" {ImpListD (lrPoint [point $1 ,point $2 ,lrPointList $3 ,point $4]) $3 } | {ImpNoneD noPoint} Export : Con Spec {TypeEx (lrPoint [point $1 ,point $2]) $1 $2} | Var {VarEx (point $1) $1} Import : Modid AsSpec {Import (lrPoint [point $1 ,point $2]) $1 $2} AsSpec : "as" Modid {AsAS (lrPoint [point $1 ,point $2]) $2} | {EmptyAS noPoint} Spec : {Neither noPoint} | "(" "." ")" {Decon (lrPoint [point $1 ,point $2 ,point $3]) } | "(" ".." ")" {Both (lrPoint [point $1 ,point $2 ,point $3]) } TopDecl : "extern" ExtNm Var "::" Type {ExternD (lrPoint [point $1 ,point $2 ,point $3 ,point $4 ,point $5]) $2 $3 $5} | "type" Con VarList "=" TyDecl {TypeD (lrPoint [point $1 ,point $2 ,lrPointList $3 ,point $4 ,point $5]) $2 $3 $5} | "type" Con VarList {TypeD0 (lrPoint [point $1 ,point $2 ,lrPointList $3]) $2 $3} | Var "::" Type {AscribeD (lrPoint [point $1 ,point $2 ,point $3]) $1 $3} | Var DeclSym Exp {VarD (lrPoint [point $1 ,point $2 ,point $3]) $1 $2 $3} | Var Exp0List DeclSym Exp {ProcD (lrPoint [point $1 ,lrPointList $2 ,point $3 ,point $4]) $1 $2 $3 $4} | "instance" Con Type {InstD (lrPoint [point $1 ,point $2 ,point $3]) $2 $3} DeclSym : "=>" {Macro (point $1) } | "=" {Define (point $1) } ExtNm : string {SomeNm (point $1) (unTString $1)} | {NoneNm noPoint} Exp : "do" "{" Exp5List "}" {BlockE (lrPoint [point $1 ,point $2 ,lrPointList $3 ,point $4]) $3 } | Exp5 { $1 } Exp5 : Exp4 DeclSym Exp {LetS (lrPoint [point $1 ,point $2 ,point $3]) $1 $2 $3} | "let" Exp4 DeclSym Exp "in" Exp {LetE (lrPoint [point $1 ,point $2 ,point $3 ,point $4 ,point $5 ,point $6]) $2 $3 $4 $6} | "\\" Exp0List "->" Exp {LamE (lrPoint [point $1 ,lrPointList $2 ,point $3 ,point $4]) $2 $4} | Exp4 "<-" Exp {StoreE (lrPoint [point $1 ,point $2 ,point $3]) $1 $3} | "case" Exp "of" "{" CaseAltList DefaultAlt "}" {CaseE (lrPoint [point $1 ,point $2 ,point $3 ,point $4 ,lrPointList $5 ,point $6 ,point $7]) $2 $5 $6 } | "switch" Exp "of" "{" SwitchAltList DefaultAlt "}" {SwitchE (lrPoint [point $1 ,point $2 ,point $3 ,point $4 ,lrPointList $5 ,point $6 ,point $7]) $2 $5 $6 } | "branch" "{" BranchAltList "|" Exp ";" "}" {BranchE (lrPoint [point $1 ,point $2 ,lrPointList $3 ,point $4 ,point $5 ,point $6 ,point $7]) $3 $5 } | Exp4 { $1 } Exp4 : Exp3 usym Exp3 {BinOpE (lrPoint [point $1 ,point $2 ,point $3]) $1 (unTUsym $2) $3} | Exp3 { $1 } Exp3 : Exp3 Exp2 {AppE (lrPoint [point $1 ,point $2]) $1 $2} | Exp2 { $1 } Exp2 : UnOp Exp1 {UnOpE (lrPoint [point $1 ,point $2]) $1 $2} | Exp1 { $1 } Exp1 : Exp1 "[" Exp "]" {IdxE (lrPoint [point $1 ,point $2 ,point $3 ,point $4]) $1 $3 } | Exp1 "." Field {FldE (lrPoint [point $1 ,point $2 ,point $3]) $1 $3} | Exp0 { $1 } Exp0 : "Array" "[" ExpList "]" {ArrayE (lrPoint [point $1 ,point $2 ,lrPointList $3 ,point $4]) $3 } | "{" FieldDList "}" {RecordE (lrPoint [point $1 ,lrPointList $2 ,point $3]) $2 } | "(" ExpList ")" {TupleE (lrPoint [point $1 ,lrPointList $2 ,point $3]) $2 } | "(" Exp "::" Type ")" {AscribeE (lrPoint [point $1 ,point $2 ,point $3 ,point $4 ,point $5]) $2 $4 } | Count {CountE (point $1) $1} | Var {VarE (point $1) $1} | Lit {LitE (point $1) $1} UnOp : "@" {Load (point $1) } CaseAlt : Con VarList "->" Exp {CaseAlt (lrPoint [point $1 ,lrPointList $2 ,point $3 ,point $4]) $1 $2 $4} SwitchAlt : Lit "->" Exp {SwitchAlt (lrPoint [point $1 ,point $2 ,point $3]) $1 $3} DefaultAlt : Var "->" Exp ";" {DefaultAlt (lrPoint [point $1 ,point $2 ,point $3 ,point $4]) $1 $3 } | {DefaultNone noPoint} BranchAlt : Exp4 "->" Exp {BranchAlt (lrPoint [point $1 ,point $2 ,point $3]) $1 $3} Cxt : Con VarList {Cxt (lrPoint [point $1 ,lrPointList $2]) $1 $2} Type : "{" CxtList "}" "=>" Type3 {TyCxt (lrPoint [point $1 ,lrPointList $2 ,point $3 ,point $4 ,point $5]) $2 $5} | Type3 { $1 } Type3 : Type2 "->" Type3 {TyFun (lrPoint [point $1 ,point $2 ,point $3]) $1 $3} | Type2 { $1 } Type2 : "Array" Type1 Type1 {TyArray (lrPoint [point $1 ,point $2 ,point $3]) $2 $3} | Con Type1List {TyConstr (lrPoint [point $1 ,lrPointList $2]) $1 $2} | Type1 { $1 } Type1 : Type0 { $1 } Type0 : "(" TypeList ")" {TyTuple (lrPoint [point $1 ,lrPointList $2 ,point $3]) $2 } | Count {TyCount (point $1) $1} | TyVar {TyVarT (point $1) $1} | Con {TyConstr0 (point $1) $1} TyDecl : "{" FieldTList "}" {TyRecord (lrPoint [point $1 ,lrPointList $2 ,point $3]) $2 } | "|" ConCList {TyTagged (lrPoint [point $1 ,lrPointList $2]) $2} | Type {TySyn (point $1) $1} ConC : Con Type0List {ConC (lrPoint [point $1 ,lrPointList $2]) $1 $2} FieldT : Field "::" Type {FieldT (lrPoint [point $1 ,point $2 ,point $3]) $1 $3} Lit : char {CharL (point $1) (unTChar $1)} | string {StringL (point $1) (unTString $1)} | number {NmbrL (point $1) (unTNumber $1)} | Con {EnumL (point $1) $1} FieldD : Field "=" Exp {FieldD (lrPoint [point $1 ,point $2 ,point $3]) $1 $3} Count : "#" number {Count (lrPoint [point $1 ,point $2]) (unTNumber $2)} Var : lident {Var (point $1) (unTLident $1)} Con : uident {Con (point $1) (unTUident $1)} Modid : uident {Modid (point $1) (unTUident $1)} Field : lident {Field (point $1) (unTLident $1)} TyVar : lident {VarTV (point $1) (unTLident $1)} | "#" lident {CntTV (lrPoint [point $1 ,point $2]) (unTLident $2)} BranchAltList : REV_BranchAltList {reverse $1} | {- empty -} { [] } REV_BranchAltList : BranchAlt ";" {[$1]} | REV_BranchAltList BranchAlt ";" {$2 : $1} CaseAltList : REV_CaseAltList {reverse $1} | {- empty -} { [] } REV_CaseAltList : CaseAlt ";" {[$1]} | REV_CaseAltList CaseAlt ";" {$2 : $1} SwitchAltList : REV_SwitchAltList {reverse $1} | {- empty -} { [] } REV_SwitchAltList : SwitchAlt ";" {[$1]} | REV_SwitchAltList SwitchAlt ";" {$2 : $1} TopDeclList : REV_TopDeclList {reverse $1} | {- empty -} { [] } REV_TopDeclList : TopDecl ";" {[$1]} | REV_TopDeclList TopDecl ";" {$2 : $1} ImportList : REV_ImportList {reverse $1} REV_ImportList : Import ";" {[$1]} | REV_ImportList Import ";" {$2 : $1} Exp5List : REV_Exp5List {reverse $1} REV_Exp5List : Exp5 ";" {[$1]} | REV_Exp5List Exp5 ";" {$2 : $1} ExportList : REV_ExportList {reverse $1} REV_ExportList : Export ";" {[$1]} | REV_ExportList Export ";" {$2 : $1} ConCList : REV_ConCList {reverse $1} REV_ConCList : ConC {[$1]} | REV_ConCList "|" ConC {$3 : $1} Exp0List : REV_Exp0List {reverse $1} REV_Exp0List : Exp0 {[$1]} | REV_Exp0List Exp0 {$2 : $1} VarList : REV_VarList {reverse $1} | {- empty -} { [] } REV_VarList : Var {[$1]} | REV_VarList Var {$2 : $1} ExpList : REV_ExpList {reverse $1} | {- empty -} { [] } REV_ExpList : Exp {[$1]} | REV_ExpList "," Exp {$3 : $1} FieldDList : REV_FieldDList {reverse $1} REV_FieldDList : FieldD {[$1]} | REV_FieldDList "," FieldD {$3 : $1} FieldTList : REV_FieldTList {reverse $1} REV_FieldTList : FieldT {[$1]} | REV_FieldTList "," FieldT {$3 : $1} Type0List : REV_Type0List {reverse $1} | {- empty -} { [] } REV_Type0List : Type0 {[$1]} | REV_Type0List Type0 {$2 : $1} Type1List : REV_Type1List {reverse $1} REV_Type1List : Type1 {[$1]} | REV_Type1List Type1 {$2 : $1} TypeList : REV_TypeList {reverse $1} | {- empty -} { [] } REV_TypeList : Type3 {[$1]} | REV_TypeList "," Type3 {$3 : $1} CxtList : REV_CxtList {reverse $1} REV_CxtList : Cxt {[$1]} | REV_CxtList "," Cxt {$3 : $1}