summaryrefslogtreecommitdiff
path: root/src/GF/Source/ParGF.y
diff options
context:
space:
mode:
authorbjorn <bjorn@bringert.net>2008-10-02 13:23:54 +0000
committerbjorn <bjorn@bringert.net>2008-10-02 13:23:54 +0000
commit86a30ef99213670b305934a4d0976d458db7db97 (patch)
tree63c2fa245672020e11fe2ee0363f5c180c7bd6a8 /src/GF/Source/ParGF.y
parent8fb068df6a4a9971f6c045744a16b07a895a5519 (diff)
Converted GF/Source/*.hs to Unix line endings, to be able to see what happens when I regenerated the files.
Diffstat (limited to 'src/GF/Source/ParGF.y')
-rw-r--r--src/GF/Source/ParGF.y1284
1 files changed, 642 insertions, 642 deletions
diff --git a/src/GF/Source/ParGF.y b/src/GF/Source/ParGF.y
index 22a15cd93..5d6cadb12 100644
--- a/src/GF/Source/ParGF.y
+++ b/src/GF/Source/ParGF.y
@@ -1,642 +1,642 @@
--- This Happy file was machine-generated by the BNF converter
-{
-{-# OPTIONS -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-}
-module GF.Source.ParGF where
-import GF.Source.AbsGF
-import GF.Source.LexGF
-import GF.Data.ErrM
-import qualified Data.ByteString.Char8 as BS
-}
-
-%name pGrammar Grammar
-%name pModDef ModDef
-%name pOldGrammar OldGrammar
-%partial pModHeader ModHeader
-%name pExp Exp
-
--- no lexer declaration
-%monad { Err } { thenM } { returnM }
-%tokentype { Token }
-
-%token
- '!' { PT _ (TS _ 1) }
- '#' { PT _ (TS _ 2) }
- '$' { PT _ (TS _ 3) }
- '%' { PT _ (TS _ 4) }
- '(' { PT _ (TS _ 5) }
- ')' { PT _ (TS _ 6) }
- '*' { PT _ (TS _ 7) }
- '**' { PT _ (TS _ 8) }
- '+' { PT _ (TS _ 9) }
- '++' { PT _ (TS _ 10) }
- ',' { PT _ (TS _ 11) }
- '-' { PT _ (TS _ 12) }
- '->' { PT _ (TS _ 13) }
- '.' { PT _ (TS _ 14) }
- '/' { PT _ (TS _ 15) }
- ':' { PT _ (TS _ 16) }
- ';' { PT _ (TS _ 17) }
- '<' { PT _ (TS _ 18) }
- '=' { PT _ (TS _ 19) }
- '=>' { PT _ (TS _ 20) }
- '>' { PT _ (TS _ 21) }
- '?' { PT _ (TS _ 22) }
- '@' { PT _ (TS _ 23) }
- 'Lin' { PT _ (TS _ 24) }
- 'PType' { PT _ (TS _ 25) }
- 'Str' { PT _ (TS _ 26) }
- 'Strs' { PT _ (TS _ 27) }
- 'Tok' { PT _ (TS _ 28) }
- 'Type' { PT _ (TS _ 29) }
- '[' { PT _ (TS _ 30) }
- '\\' { PT _ (TS _ 31) }
- ']' { PT _ (TS _ 32) }
- '_' { PT _ (TS _ 33) }
- 'abstract' { PT _ (TS _ 34) }
- 'case' { PT _ (TS _ 35) }
- 'cat' { PT _ (TS _ 36) }
- 'concrete' { PT _ (TS _ 37) }
- 'data' { PT _ (TS _ 38) }
- 'def' { PT _ (TS _ 39) }
- 'flags' { PT _ (TS _ 40) }
- 'fn' { PT _ (TS _ 41) }
- 'fun' { PT _ (TS _ 42) }
- 'grammar' { PT _ (TS _ 43) }
- 'in' { PT _ (TS _ 44) }
- 'include' { PT _ (TS _ 45) }
- 'incomplete' { PT _ (TS _ 46) }
- 'instance' { PT _ (TS _ 47) }
- 'interface' { PT _ (TS _ 48) }
- 'let' { PT _ (TS _ 49) }
- 'lin' { PT _ (TS _ 50) }
- 'lincat' { PT _ (TS _ 51) }
- 'lindef' { PT _ (TS _ 52) }
- 'lintype' { PT _ (TS _ 53) }
- 'of' { PT _ (TS _ 54) }
- 'open' { PT _ (TS _ 55) }
- 'oper' { PT _ (TS _ 56) }
- 'out' { PT _ (TS _ 57) }
- 'package' { PT _ (TS _ 58) }
- 'param' { PT _ (TS _ 59) }
- 'pattern' { PT _ (TS _ 60) }
- 'pre' { PT _ (TS _ 61) }
- 'printname' { PT _ (TS _ 62) }
- 'resource' { PT _ (TS _ 63) }
- 'reuse' { PT _ (TS _ 64) }
- 'strs' { PT _ (TS _ 65) }
- 'table' { PT _ (TS _ 66) }
- 'tokenizer' { PT _ (TS _ 67) }
- 'transfer' { PT _ (TS _ 68) }
- 'union' { PT _ (TS _ 69) }
- 'var' { PT _ (TS _ 70) }
- 'variants' { PT _ (TS _ 71) }
- 'where' { PT _ (TS _ 72) }
- 'with' { PT _ (TS _ 73) }
- '{' { PT _ (TS _ 74) }
- '|' { PT _ (TS _ 75) }
- '}' { PT _ (TS _ 76) }
-
-L_integ { PT _ (TI $$) }
-L_quoted { PT _ (TL $$) }
-L_doubl { PT _ (TD $$) }
-L_LString { PT _ (T_LString $$) }
-L_PIdent { PT _ (T_PIdent _) }
-L_err { _ }
-
-
-%%
-
-Integer :: { Integer } : L_integ { (read (BS.unpack $1)) :: Integer }
-String :: { String } : L_quoted { BS.unpack $1 }
-Double :: { Double } : L_doubl { (read (BS.unpack $1)) :: Double }
-LString :: { LString} : L_LString { LString ($1)}
-PIdent :: { PIdent} : L_PIdent { PIdent (mkPosToken $1)}
-
-Grammar :: { Grammar }
-Grammar : ListModDef { Gr (reverse $1) }
-
-
-ListModDef :: { [ModDef] }
-ListModDef : {- empty -} { [] }
- | ListModDef ModDef { flip (:) $1 $2 }
-
-
-ModDef :: { ModDef }
-ModDef : ModDef ';' { $1 }
- | 'grammar' PIdent '=' '{' 'abstract' '=' PIdent ';' ListConcSpec '}' { MMain $2 $7 $9 }
- | ComplMod ModType '=' ModBody { MModule $1 $2 $4 }
-
-
-ConcSpec :: { ConcSpec }
-ConcSpec : PIdent '=' ConcExp { ConcSpec $1 $3 }
-
-
-ListConcSpec :: { [ConcSpec] }
-ListConcSpec : {- empty -} { [] }
- | ConcSpec { (:[]) $1 }
- | ConcSpec ';' ListConcSpec { (:) $1 $3 }
-
-
-ConcExp :: { ConcExp }
-ConcExp : PIdent ListTransfer { ConcExp $1 (reverse $2) }
-
-
-ListTransfer :: { [Transfer] }
-ListTransfer : {- empty -} { [] }
- | ListTransfer Transfer { flip (:) $1 $2 }
-
-
-Transfer :: { Transfer }
-Transfer : '(' 'transfer' 'in' Open ')' { TransferIn $4 }
- | '(' 'transfer' 'out' Open ')' { TransferOut $4 }
-
-
-ModHeader :: { ModDef }
-ModHeader : ComplMod ModType '=' ModHeaderBody { MModule $1 $2 $4 }
-
-
-ModHeaderBody :: { ModBody }
-ModHeaderBody : Extend Opens { MBody $1 $2 [] }
- | ListIncluded { MNoBody $1 }
- | Included 'with' ListOpen { MWith $1 $3 }
- | Included 'with' ListOpen '**' Opens { MWithBody $1 $3 $5 [] }
- | ListIncluded '**' Included 'with' ListOpen { MWithE $1 $3 $5 }
- | ListIncluded '**' Included 'with' ListOpen '**' Opens { MWithEBody $1 $3 $5 $7 [] }
- | 'reuse' PIdent { MReuse $2 }
- | 'union' ListIncluded { MUnion $2 }
-
-
-ModType :: { ModType }
-ModType : 'abstract' PIdent { MTAbstract $2 }
- | 'resource' PIdent { MTResource $2 }
- | 'interface' PIdent { MTInterface $2 }
- | 'concrete' PIdent 'of' PIdent { MTConcrete $2 $4 }
- | 'instance' PIdent 'of' PIdent { MTInstance $2 $4 }
- | 'transfer' PIdent ':' Open '->' Open { MTTransfer $2 $4 $6 }
-
-
-ModBody :: { ModBody }
-ModBody : Extend Opens '{' ListTopDef '}' { MBody $1 $2 (reverse $4) }
- | ListIncluded { MNoBody $1 }
- | Included 'with' ListOpen { MWith $1 $3 }
- | Included 'with' ListOpen '**' Opens '{' ListTopDef '}' { MWithBody $1 $3 $5 (reverse $7) }
- | ListIncluded '**' Included 'with' ListOpen { MWithE $1 $3 $5 }
- | ListIncluded '**' Included 'with' ListOpen '**' Opens '{' ListTopDef '}' { MWithEBody $1 $3 $5 $7 (reverse $9) }
- | 'reuse' PIdent { MReuse $2 }
- | 'union' ListIncluded { MUnion $2 }
-
-
-ListTopDef :: { [TopDef] }
-ListTopDef : {- empty -} { [] }
- | ListTopDef TopDef { flip (:) $1 $2 }
-
-
-Extend :: { Extend }
-Extend : ListIncluded '**' { Ext $1 }
- | {- empty -} { NoExt }
-
-
-ListOpen :: { [Open] }
-ListOpen : {- empty -} { [] }
- | Open { (:[]) $1 }
- | Open ',' ListOpen { (:) $1 $3 }
-
-
-Opens :: { Opens }
-Opens : {- empty -} { NoOpens }
- | 'open' ListOpen 'in' { OpenIn $2 }
-
-
-Open :: { Open }
-Open : PIdent { OName $1 }
- | '(' QualOpen PIdent ')' { OQualQO $2 $3 }
- | '(' QualOpen PIdent '=' PIdent ')' { OQual $2 $3 $5 }
-
-
-ComplMod :: { ComplMod }
-ComplMod : {- empty -} { CMCompl }
- | 'incomplete' { CMIncompl }
-
-
-QualOpen :: { QualOpen }
-QualOpen : {- empty -} { QOCompl }
- | 'incomplete' { QOIncompl }
- | 'interface' { QOInterface }
-
-
-ListIncluded :: { [Included] }
-ListIncluded : {- empty -} { [] }
- | Included { (:[]) $1 }
- | Included ',' ListIncluded { (:) $1 $3 }
-
-
-Included :: { Included }
-Included : PIdent { IAll $1 }
- | PIdent '[' ListPIdent ']' { ISome $1 $3 }
- | PIdent '-' '[' ListPIdent ']' { IMinus $1 $4 }
-
-
-Def :: { Def }
-Def : ListName ':' Exp { DDecl $1 $3 }
- | ListName '=' Exp { DDef $1 $3 }
- | Name ListPatt '=' Exp { DPatt $1 $2 $4 }
- | ListName ':' Exp '=' Exp { DFull $1 $3 $5 }
-
-
-TopDef :: { TopDef }
-TopDef : 'cat' ListCatDef { DefCat $2 }
- | 'fun' ListFunDef { DefFun $2 }
- | 'data' ListFunDef { DefFunData $2 }
- | 'def' ListDef { DefDef $2 }
- | 'data' ListDataDef { DefData $2 }
- | 'transfer' ListDef { DefTrans $2 }
- | 'param' ListParDef { DefPar $2 }
- | 'oper' ListDef { DefOper $2 }
- | 'lincat' ListPrintDef { DefLincat $2 }
- | 'lindef' ListDef { DefLindef $2 }
- | 'lin' ListDef { DefLin $2 }
- | 'printname' 'cat' ListPrintDef { DefPrintCat $3 }
- | 'printname' 'fun' ListPrintDef { DefPrintFun $3 }
- | 'flags' ListFlagDef { DefFlag $2 }
- | 'printname' ListPrintDef { DefPrintOld $2 }
- | 'lintype' ListDef { DefLintype $2 }
- | 'pattern' ListDef { DefPattern $2 }
- | 'package' PIdent '=' '{' ListTopDef '}' ';' { DefPackage $2 (reverse $5) }
- | 'var' ListDef { DefVars $2 }
- | 'tokenizer' PIdent ';' { DefTokenizer $2 }
-
-
-CatDef :: { CatDef }
-CatDef : PIdent ListDDecl { SimpleCatDef $1 (reverse $2) }
- | '[' PIdent ListDDecl ']' { ListCatDef $2 (reverse $3) }
- | '[' PIdent ListDDecl ']' '{' Integer '}' { ListSizeCatDef $2 (reverse $3) $6 }
-
-
-FunDef :: { FunDef }
-FunDef : ListPIdent ':' Exp { FunDef $1 $3 }
-
-
-DataDef :: { DataDef }
-DataDef : PIdent '=' ListDataConstr { DataDef $1 $3 }
-
-
-DataConstr :: { DataConstr }
-DataConstr : PIdent { DataId $1 }
- | PIdent '.' PIdent { DataQId $1 $3 }
-
-
-ListDataConstr :: { [DataConstr] }
-ListDataConstr : {- empty -} { [] }
- | DataConstr { (:[]) $1 }
- | DataConstr '|' ListDataConstr { (:) $1 $3 }
-
-
-ParDef :: { ParDef }
-ParDef : PIdent '=' ListParConstr { ParDefDir $1 $3 }
- | PIdent '=' '(' 'in' PIdent ')' { ParDefIndir $1 $5 }
- | PIdent { ParDefAbs $1 }
-
-
-ParConstr :: { ParConstr }
-ParConstr : PIdent ListDDecl { ParConstr $1 (reverse $2) }
-
-
-PrintDef :: { PrintDef }
-PrintDef : ListName '=' Exp { PrintDef $1 $3 }
-
-
-FlagDef :: { FlagDef }
-FlagDef : PIdent '=' PIdent { FlagDef $1 $3 }
-
-
-ListDef :: { [Def] }
-ListDef : Def ';' { (:[]) $1 }
- | Def ';' ListDef { (:) $1 $3 }
-
-
-ListCatDef :: { [CatDef] }
-ListCatDef : CatDef ';' { (:[]) $1 }
- | CatDef ';' ListCatDef { (:) $1 $3 }
-
-
-ListFunDef :: { [FunDef] }
-ListFunDef : FunDef ';' { (:[]) $1 }
- | FunDef ';' ListFunDef { (:) $1 $3 }
-
-
-ListDataDef :: { [DataDef] }
-ListDataDef : DataDef ';' { (:[]) $1 }
- | DataDef ';' ListDataDef { (:) $1 $3 }
-
-
-ListParDef :: { [ParDef] }
-ListParDef : ParDef ';' { (:[]) $1 }
- | ParDef ';' ListParDef { (:) $1 $3 }
-
-
-ListPrintDef :: { [PrintDef] }
-ListPrintDef : PrintDef ';' { (:[]) $1 }
- | PrintDef ';' ListPrintDef { (:) $1 $3 }
-
-
-ListFlagDef :: { [FlagDef] }
-ListFlagDef : FlagDef ';' { (:[]) $1 }
- | FlagDef ';' ListFlagDef { (:) $1 $3 }
-
-
-ListParConstr :: { [ParConstr] }
-ListParConstr : {- empty -} { [] }
- | ParConstr { (:[]) $1 }
- | ParConstr '|' ListParConstr { (:) $1 $3 }
-
-
-ListPIdent :: { [PIdent] }
-ListPIdent : PIdent { (:[]) $1 }
- | PIdent ',' ListPIdent { (:) $1 $3 }
-
-
-Name :: { Name }
-Name : PIdent { IdentName $1 }
- | '[' PIdent ']' { ListName $2 }
-
-
-ListName :: { [Name] }
-ListName : Name { (:[]) $1 }
- | Name ',' ListName { (:) $1 $3 }
-
-
-LocDef :: { LocDef }
-LocDef : ListPIdent ':' Exp { LDDecl $1 $3 }
- | ListPIdent '=' Exp { LDDef $1 $3 }
- | ListPIdent ':' Exp '=' Exp { LDFull $1 $3 $5 }
-
-
-ListLocDef :: { [LocDef] }
-ListLocDef : {- empty -} { [] }
- | LocDef { (:[]) $1 }
- | LocDef ';' ListLocDef { (:) $1 $3 }
-
-
-Exp6 :: { Exp }
-Exp6 : PIdent { EIdent $1 }
- | '{' PIdent '}' { EConstr $2 }
- | '%' PIdent '%' { ECons $2 }
- | Sort { ESort $1 }
- | String { EString $1 }
- | Integer { EInt $1 }
- | Double { EFloat $1 }
- | '?' { EMeta }
- | '[' ']' { EEmpty }
- | 'data' { EData }
- | '[' PIdent Exps ']' { EList $2 $3 }
- | '[' String ']' { EStrings $2 }
- | '{' ListLocDef '}' { ERecord $2 }
- | '<' ListTupleComp '>' { ETuple $2 }
- | '(' 'in' PIdent ')' { EIndir $3 }
- | '<' Exp ':' Exp '>' { ETyped $2 $4 }
- | '(' Exp ')' { $2 }
- | LString { ELString $1 }
-
-
-Exp5 :: { Exp }
-Exp5 : Exp5 '.' Label { EProj $1 $3 }
- | '{' PIdent '.' PIdent '}' { EQConstr $2 $4 }
- | '%' PIdent '.' PIdent { EQCons $2 $4 }
- | Exp6 { $1 }
-
-
-Exp4 :: { Exp }
-Exp4 : Exp4 Exp5 { EApp $1 $2 }
- | 'table' '{' ListCase '}' { ETable $3 }
- | 'table' Exp6 '{' ListCase '}' { ETTable $2 $4 }
- | 'table' Exp6 '[' ListExp ']' { EVTable $2 $4 }
- | 'case' Exp 'of' '{' ListCase '}' { ECase $2 $5 }
- | 'variants' '{' ListExp '}' { EVariants $3 }
- | 'pre' '{' Exp ';' ListAltern '}' { EPre $3 $5 }
- | 'strs' '{' ListExp '}' { EStrs $3 }
- | PIdent '@' Exp6 { EConAt $1 $3 }
- | '#' Patt2 { EPatt $2 }
- | 'pattern' Exp5 { EPattType $2 }
- | Exp5 { $1 }
- | 'Lin' PIdent { ELin $2 }
-
-
-Exp3 :: { Exp }
-Exp3 : Exp3 '!' Exp4 { ESelect $1 $3 }
- | Exp3 '*' Exp4 { ETupTyp $1 $3 }
- | Exp3 '**' Exp4 { EExtend $1 $3 }
- | Exp4 { $1 }
-
-
-Exp1 :: { Exp }
-Exp1 : Exp2 '+' Exp1 { EGlue $1 $3 }
- | Exp2 { $1 }
-
-
-Exp :: { Exp }
-Exp : Exp1 '++' Exp { EConcat $1 $3 }
- | '\\' ListBind '->' Exp { EAbstr $2 $4 }
- | '\\' '\\' ListBind '=>' Exp { ECTable $3 $5 }
- | Decl '->' Exp { EProd $1 $3 }
- | Exp3 '=>' Exp { ETType $1 $3 }
- | 'let' '{' ListLocDef '}' 'in' Exp { ELet $3 $6 }
- | 'let' ListLocDef 'in' Exp { ELetb $2 $4 }
- | Exp3 'where' '{' ListLocDef '}' { EWhere $1 $4 }
- | 'fn' '{' ListEquation '}' { EEqs $3 }
- | 'in' Exp5 String { EExample $2 $3 }
- | Exp1 { $1 }
-
-
-Exp2 :: { Exp }
-Exp2 : Exp3 { $1 }
-
-
-ListExp :: { [Exp] }
-ListExp : {- empty -} { [] }
- | Exp { (:[]) $1 }
- | Exp ';' ListExp { (:) $1 $3 }
-
-
-Exps :: { Exps }
-Exps : {- empty -} { NilExp }
- | Exp6 Exps { ConsExp $1 $2 }
-
-
-Patt2 :: { Patt }
-Patt2 : '?' { PChar }
- | '[' String ']' { PChars $2 }
- | '#' PIdent { PMacro $2 }
- | '#' PIdent '.' PIdent { PM $2 $4 }
- | '_' { PW }
- | PIdent { PV $1 }
- | '{' PIdent '}' { PCon $2 }
- | PIdent '.' PIdent { PQ $1 $3 }
- | Integer { PInt $1 }
- | Double { PFloat $1 }
- | String { PStr $1 }
- | '{' ListPattAss '}' { PR $2 }
- | '<' ListPattTupleComp '>' { PTup $2 }
- | '(' Patt ')' { $2 }
-
-
-Patt1 :: { Patt }
-Patt1 : PIdent ListPatt { PC $1 $2 }
- | PIdent '.' PIdent ListPatt { PQC $1 $3 $4 }
- | Patt2 '*' { PRep $1 }
- | PIdent '@' Patt2 { PAs $1 $3 }
- | '-' Patt2 { PNeg $2 }
- | Patt2 { $1 }
-
-
-Patt :: { Patt }
-Patt : Patt '|' Patt1 { PDisj $1 $3 }
- | Patt '+' Patt1 { PSeq $1 $3 }
- | Patt1 { $1 }
-
-
-PattAss :: { PattAss }
-PattAss : ListPIdent '=' Patt { PA $1 $3 }
-
-
-Label :: { Label }
-Label : PIdent { LIdent $1 }
- | '$' Integer { LVar $2 }
-
-
-Sort :: { Sort }
-Sort : 'Type' { Sort_Type }
- | 'PType' { Sort_PType }
- | 'Tok' { Sort_Tok }
- | 'Str' { Sort_Str }
- | 'Strs' { Sort_Strs }
-
-
-ListPattAss :: { [PattAss] }
-ListPattAss : {- empty -} { [] }
- | PattAss { (:[]) $1 }
- | PattAss ';' ListPattAss { (:) $1 $3 }
-
-
-ListPatt :: { [Patt] }
-ListPatt : Patt2 { (:[]) $1 }
- | Patt2 ListPatt { (:) $1 $2 }
-
-
-Bind :: { Bind }
-Bind : PIdent { BIdent $1 }
- | '_' { BWild }
-
-
-ListBind :: { [Bind] }
-ListBind : {- empty -} { [] }
- | Bind { (:[]) $1 }
- | Bind ',' ListBind { (:) $1 $3 }
-
-
-Decl :: { Decl }
-Decl : '(' ListBind ':' Exp ')' { DDec $2 $4 }
- | Exp4 { DExp $1 }
-
-
-TupleComp :: { TupleComp }
-TupleComp : Exp { TComp $1 }
-
-
-PattTupleComp :: { PattTupleComp }
-PattTupleComp : Patt { PTComp $1 }
-
-
-ListTupleComp :: { [TupleComp] }
-ListTupleComp : {- empty -} { [] }
- | TupleComp { (:[]) $1 }
- | TupleComp ',' ListTupleComp { (:) $1 $3 }
-
-
-ListPattTupleComp :: { [PattTupleComp] }
-ListPattTupleComp : {- empty -} { [] }
- | PattTupleComp { (:[]) $1 }
- | PattTupleComp ',' ListPattTupleComp { (:) $1 $3 }
-
-
-Case :: { Case }
-Case : Patt '=>' Exp { Case $1 $3 }
-
-
-ListCase :: { [Case] }
-ListCase : Case { (:[]) $1 }
- | Case ';' ListCase { (:) $1 $3 }
-
-
-Equation :: { Equation }
-Equation : ListPatt '->' Exp { Equ $1 $3 }
-
-
-ListEquation :: { [Equation] }
-ListEquation : {- empty -} { [] }
- | Equation { (:[]) $1 }
- | Equation ';' ListEquation { (:) $1 $3 }
-
-
-Altern :: { Altern }
-Altern : Exp '/' Exp { Alt $1 $3 }
-
-
-ListAltern :: { [Altern] }
-ListAltern : {- empty -} { [] }
- | Altern { (:[]) $1 }
- | Altern ';' ListAltern { (:) $1 $3 }
-
-
-DDecl :: { DDecl }
-DDecl : '(' ListBind ':' Exp ')' { DDDec $2 $4 }
- | Exp6 { DDExp $1 }
-
-
-ListDDecl :: { [DDecl] }
-ListDDecl : {- empty -} { [] }
- | ListDDecl DDecl { flip (:) $1 $2 }
-
-
-OldGrammar :: { OldGrammar }
-OldGrammar : Include ListTopDef { OldGr $1 (reverse $2) }
-
-
-Include :: { Include }
-Include : {- empty -} { NoIncl }
- | 'include' ListFileName { Incl $2 }
-
-
-FileName :: { FileName }
-FileName : String { FString $1 }
- | PIdent { FIdent $1 }
- | '/' FileName { FSlash $2 }
- | '.' FileName { FDot $2 }
- | '-' FileName { FMinus $2 }
- | PIdent FileName { FAddId $1 $2 }
-
-
-ListFileName :: { [FileName] }
-ListFileName : FileName ';' { (:[]) $1 }
- | FileName ';' ListFileName { (:) $1 $3 }
-
-
-
-{
-
-returnM :: a -> Err a
-returnM = return
-
-thenM :: Err a -> (a -> Err b) -> Err b
-thenM = (>>=)
-
-happyError :: [Token] -> Err a
-happyError ts =
- Bad $ "syntax error at " ++ tokenPos ts ++
- case ts of
- [] -> []
- [Err _] -> " due to lexer error"
- _ -> " before " ++ unwords (map (BS.unpack . prToken) (take 4 ts))
-
-myLexer = tokens
-}
-
+-- This Happy file was machine-generated by the BNF converter
+{
+{-# OPTIONS -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-}
+module GF.Source.ParGF where
+import GF.Source.AbsGF
+import GF.Source.LexGF
+import GF.Data.ErrM
+import qualified Data.ByteString.Char8 as BS
+}
+
+%name pGrammar Grammar
+%name pModDef ModDef
+%name pOldGrammar OldGrammar
+%partial pModHeader ModHeader
+%name pExp Exp
+
+-- no lexer declaration
+%monad { Err } { thenM } { returnM }
+%tokentype { Token }
+
+%token
+ '!' { PT _ (TS _ 1) }
+ '#' { PT _ (TS _ 2) }
+ '$' { PT _ (TS _ 3) }
+ '%' { PT _ (TS _ 4) }
+ '(' { PT _ (TS _ 5) }
+ ')' { PT _ (TS _ 6) }
+ '*' { PT _ (TS _ 7) }
+ '**' { PT _ (TS _ 8) }
+ '+' { PT _ (TS _ 9) }
+ '++' { PT _ (TS _ 10) }
+ ',' { PT _ (TS _ 11) }
+ '-' { PT _ (TS _ 12) }
+ '->' { PT _ (TS _ 13) }
+ '.' { PT _ (TS _ 14) }
+ '/' { PT _ (TS _ 15) }
+ ':' { PT _ (TS _ 16) }
+ ';' { PT _ (TS _ 17) }
+ '<' { PT _ (TS _ 18) }
+ '=' { PT _ (TS _ 19) }
+ '=>' { PT _ (TS _ 20) }
+ '>' { PT _ (TS _ 21) }
+ '?' { PT _ (TS _ 22) }
+ '@' { PT _ (TS _ 23) }
+ 'Lin' { PT _ (TS _ 24) }
+ 'PType' { PT _ (TS _ 25) }
+ 'Str' { PT _ (TS _ 26) }
+ 'Strs' { PT _ (TS _ 27) }
+ 'Tok' { PT _ (TS _ 28) }
+ 'Type' { PT _ (TS _ 29) }
+ '[' { PT _ (TS _ 30) }
+ '\\' { PT _ (TS _ 31) }
+ ']' { PT _ (TS _ 32) }
+ '_' { PT _ (TS _ 33) }
+ 'abstract' { PT _ (TS _ 34) }
+ 'case' { PT _ (TS _ 35) }
+ 'cat' { PT _ (TS _ 36) }
+ 'concrete' { PT _ (TS _ 37) }
+ 'data' { PT _ (TS _ 38) }
+ 'def' { PT _ (TS _ 39) }
+ 'flags' { PT _ (TS _ 40) }
+ 'fn' { PT _ (TS _ 41) }
+ 'fun' { PT _ (TS _ 42) }
+ 'grammar' { PT _ (TS _ 43) }
+ 'in' { PT _ (TS _ 44) }
+ 'include' { PT _ (TS _ 45) }
+ 'incomplete' { PT _ (TS _ 46) }
+ 'instance' { PT _ (TS _ 47) }
+ 'interface' { PT _ (TS _ 48) }
+ 'let' { PT _ (TS _ 49) }
+ 'lin' { PT _ (TS _ 50) }
+ 'lincat' { PT _ (TS _ 51) }
+ 'lindef' { PT _ (TS _ 52) }
+ 'lintype' { PT _ (TS _ 53) }
+ 'of' { PT _ (TS _ 54) }
+ 'open' { PT _ (TS _ 55) }
+ 'oper' { PT _ (TS _ 56) }
+ 'out' { PT _ (TS _ 57) }
+ 'package' { PT _ (TS _ 58) }
+ 'param' { PT _ (TS _ 59) }
+ 'pattern' { PT _ (TS _ 60) }
+ 'pre' { PT _ (TS _ 61) }
+ 'printname' { PT _ (TS _ 62) }
+ 'resource' { PT _ (TS _ 63) }
+ 'reuse' { PT _ (TS _ 64) }
+ 'strs' { PT _ (TS _ 65) }
+ 'table' { PT _ (TS _ 66) }
+ 'tokenizer' { PT _ (TS _ 67) }
+ 'transfer' { PT _ (TS _ 68) }
+ 'union' { PT _ (TS _ 69) }
+ 'var' { PT _ (TS _ 70) }
+ 'variants' { PT _ (TS _ 71) }
+ 'where' { PT _ (TS _ 72) }
+ 'with' { PT _ (TS _ 73) }
+ '{' { PT _ (TS _ 74) }
+ '|' { PT _ (TS _ 75) }
+ '}' { PT _ (TS _ 76) }
+
+L_integ { PT _ (TI $$) }
+L_quoted { PT _ (TL $$) }
+L_doubl { PT _ (TD $$) }
+L_LString { PT _ (T_LString $$) }
+L_PIdent { PT _ (T_PIdent _) }
+L_err { _ }
+
+
+%%
+
+Integer :: { Integer } : L_integ { (read (BS.unpack $1)) :: Integer }
+String :: { String } : L_quoted { BS.unpack $1 }
+Double :: { Double } : L_doubl { (read (BS.unpack $1)) :: Double }
+LString :: { LString} : L_LString { LString ($1)}
+PIdent :: { PIdent} : L_PIdent { PIdent (mkPosToken $1)}
+
+Grammar :: { Grammar }
+Grammar : ListModDef { Gr (reverse $1) }
+
+
+ListModDef :: { [ModDef] }
+ListModDef : {- empty -} { [] }
+ | ListModDef ModDef { flip (:) $1 $2 }
+
+
+ModDef :: { ModDef }
+ModDef : ModDef ';' { $1 }
+ | 'grammar' PIdent '=' '{' 'abstract' '=' PIdent ';' ListConcSpec '}' { MMain $2 $7 $9 }
+ | ComplMod ModType '=' ModBody { MModule $1 $2 $4 }
+
+
+ConcSpec :: { ConcSpec }
+ConcSpec : PIdent '=' ConcExp { ConcSpec $1 $3 }
+
+
+ListConcSpec :: { [ConcSpec] }
+ListConcSpec : {- empty -} { [] }
+ | ConcSpec { (:[]) $1 }
+ | ConcSpec ';' ListConcSpec { (:) $1 $3 }
+
+
+ConcExp :: { ConcExp }
+ConcExp : PIdent ListTransfer { ConcExp $1 (reverse $2) }
+
+
+ListTransfer :: { [Transfer] }
+ListTransfer : {- empty -} { [] }
+ | ListTransfer Transfer { flip (:) $1 $2 }
+
+
+Transfer :: { Transfer }
+Transfer : '(' 'transfer' 'in' Open ')' { TransferIn $4 }
+ | '(' 'transfer' 'out' Open ')' { TransferOut $4 }
+
+
+ModHeader :: { ModDef }
+ModHeader : ComplMod ModType '=' ModHeaderBody { MModule $1 $2 $4 }
+
+
+ModHeaderBody :: { ModBody }
+ModHeaderBody : Extend Opens { MBody $1 $2 [] }
+ | ListIncluded { MNoBody $1 }
+ | Included 'with' ListOpen { MWith $1 $3 }
+ | Included 'with' ListOpen '**' Opens { MWithBody $1 $3 $5 [] }
+ | ListIncluded '**' Included 'with' ListOpen { MWithE $1 $3 $5 }
+ | ListIncluded '**' Included 'with' ListOpen '**' Opens { MWithEBody $1 $3 $5 $7 [] }
+ | 'reuse' PIdent { MReuse $2 }
+ | 'union' ListIncluded { MUnion $2 }
+
+
+ModType :: { ModType }
+ModType : 'abstract' PIdent { MTAbstract $2 }
+ | 'resource' PIdent { MTResource $2 }
+ | 'interface' PIdent { MTInterface $2 }
+ | 'concrete' PIdent 'of' PIdent { MTConcrete $2 $4 }
+ | 'instance' PIdent 'of' PIdent { MTInstance $2 $4 }
+ | 'transfer' PIdent ':' Open '->' Open { MTTransfer $2 $4 $6 }
+
+
+ModBody :: { ModBody }
+ModBody : Extend Opens '{' ListTopDef '}' { MBody $1 $2 (reverse $4) }
+ | ListIncluded { MNoBody $1 }
+ | Included 'with' ListOpen { MWith $1 $3 }
+ | Included 'with' ListOpen '**' Opens '{' ListTopDef '}' { MWithBody $1 $3 $5 (reverse $7) }
+ | ListIncluded '**' Included 'with' ListOpen { MWithE $1 $3 $5 }
+ | ListIncluded '**' Included 'with' ListOpen '**' Opens '{' ListTopDef '}' { MWithEBody $1 $3 $5 $7 (reverse $9) }
+ | 'reuse' PIdent { MReuse $2 }
+ | 'union' ListIncluded { MUnion $2 }
+
+
+ListTopDef :: { [TopDef] }
+ListTopDef : {- empty -} { [] }
+ | ListTopDef TopDef { flip (:) $1 $2 }
+
+
+Extend :: { Extend }
+Extend : ListIncluded '**' { Ext $1 }
+ | {- empty -} { NoExt }
+
+
+ListOpen :: { [Open] }
+ListOpen : {- empty -} { [] }
+ | Open { (:[]) $1 }
+ | Open ',' ListOpen { (:) $1 $3 }
+
+
+Opens :: { Opens }
+Opens : {- empty -} { NoOpens }
+ | 'open' ListOpen 'in' { OpenIn $2 }
+
+
+Open :: { Open }
+Open : PIdent { OName $1 }
+ | '(' QualOpen PIdent ')' { OQualQO $2 $3 }
+ | '(' QualOpen PIdent '=' PIdent ')' { OQual $2 $3 $5 }
+
+
+ComplMod :: { ComplMod }
+ComplMod : {- empty -} { CMCompl }
+ | 'incomplete' { CMIncompl }
+
+
+QualOpen :: { QualOpen }
+QualOpen : {- empty -} { QOCompl }
+ | 'incomplete' { QOIncompl }
+ | 'interface' { QOInterface }
+
+
+ListIncluded :: { [Included] }
+ListIncluded : {- empty -} { [] }
+ | Included { (:[]) $1 }
+ | Included ',' ListIncluded { (:) $1 $3 }
+
+
+Included :: { Included }
+Included : PIdent { IAll $1 }
+ | PIdent '[' ListPIdent ']' { ISome $1 $3 }
+ | PIdent '-' '[' ListPIdent ']' { IMinus $1 $4 }
+
+
+Def :: { Def }
+Def : ListName ':' Exp { DDecl $1 $3 }
+ | ListName '=' Exp { DDef $1 $3 }
+ | Name ListPatt '=' Exp { DPatt $1 $2 $4 }
+ | ListName ':' Exp '=' Exp { DFull $1 $3 $5 }
+
+
+TopDef :: { TopDef }
+TopDef : 'cat' ListCatDef { DefCat $2 }
+ | 'fun' ListFunDef { DefFun $2 }
+ | 'data' ListFunDef { DefFunData $2 }
+ | 'def' ListDef { DefDef $2 }
+ | 'data' ListDataDef { DefData $2 }
+ | 'transfer' ListDef { DefTrans $2 }
+ | 'param' ListParDef { DefPar $2 }
+ | 'oper' ListDef { DefOper $2 }
+ | 'lincat' ListPrintDef { DefLincat $2 }
+ | 'lindef' ListDef { DefLindef $2 }
+ | 'lin' ListDef { DefLin $2 }
+ | 'printname' 'cat' ListPrintDef { DefPrintCat $3 }
+ | 'printname' 'fun' ListPrintDef { DefPrintFun $3 }
+ | 'flags' ListFlagDef { DefFlag $2 }
+ | 'printname' ListPrintDef { DefPrintOld $2 }
+ | 'lintype' ListDef { DefLintype $2 }
+ | 'pattern' ListDef { DefPattern $2 }
+ | 'package' PIdent '=' '{' ListTopDef '}' ';' { DefPackage $2 (reverse $5) }
+ | 'var' ListDef { DefVars $2 }
+ | 'tokenizer' PIdent ';' { DefTokenizer $2 }
+
+
+CatDef :: { CatDef }
+CatDef : PIdent ListDDecl { SimpleCatDef $1 (reverse $2) }
+ | '[' PIdent ListDDecl ']' { ListCatDef $2 (reverse $3) }
+ | '[' PIdent ListDDecl ']' '{' Integer '}' { ListSizeCatDef $2 (reverse $3) $6 }
+
+
+FunDef :: { FunDef }
+FunDef : ListPIdent ':' Exp { FunDef $1 $3 }
+
+
+DataDef :: { DataDef }
+DataDef : PIdent '=' ListDataConstr { DataDef $1 $3 }
+
+
+DataConstr :: { DataConstr }
+DataConstr : PIdent { DataId $1 }
+ | PIdent '.' PIdent { DataQId $1 $3 }
+
+
+ListDataConstr :: { [DataConstr] }
+ListDataConstr : {- empty -} { [] }
+ | DataConstr { (:[]) $1 }
+ | DataConstr '|' ListDataConstr { (:) $1 $3 }
+
+
+ParDef :: { ParDef }
+ParDef : PIdent '=' ListParConstr { ParDefDir $1 $3 }
+ | PIdent '=' '(' 'in' PIdent ')' { ParDefIndir $1 $5 }
+ | PIdent { ParDefAbs $1 }
+
+
+ParConstr :: { ParConstr }
+ParConstr : PIdent ListDDecl { ParConstr $1 (reverse $2) }
+
+
+PrintDef :: { PrintDef }
+PrintDef : ListName '=' Exp { PrintDef $1 $3 }
+
+
+FlagDef :: { FlagDef }
+FlagDef : PIdent '=' PIdent { FlagDef $1 $3 }
+
+
+ListDef :: { [Def] }
+ListDef : Def ';' { (:[]) $1 }
+ | Def ';' ListDef { (:) $1 $3 }
+
+
+ListCatDef :: { [CatDef] }
+ListCatDef : CatDef ';' { (:[]) $1 }
+ | CatDef ';' ListCatDef { (:) $1 $3 }
+
+
+ListFunDef :: { [FunDef] }
+ListFunDef : FunDef ';' { (:[]) $1 }
+ | FunDef ';' ListFunDef { (:) $1 $3 }
+
+
+ListDataDef :: { [DataDef] }
+ListDataDef : DataDef ';' { (:[]) $1 }
+ | DataDef ';' ListDataDef { (:) $1 $3 }
+
+
+ListParDef :: { [ParDef] }
+ListParDef : ParDef ';' { (:[]) $1 }
+ | ParDef ';' ListParDef { (:) $1 $3 }
+
+
+ListPrintDef :: { [PrintDef] }
+ListPrintDef : PrintDef ';' { (:[]) $1 }
+ | PrintDef ';' ListPrintDef { (:) $1 $3 }
+
+
+ListFlagDef :: { [FlagDef] }
+ListFlagDef : FlagDef ';' { (:[]) $1 }
+ | FlagDef ';' ListFlagDef { (:) $1 $3 }
+
+
+ListParConstr :: { [ParConstr] }
+ListParConstr : {- empty -} { [] }
+ | ParConstr { (:[]) $1 }
+ | ParConstr '|' ListParConstr { (:) $1 $3 }
+
+
+ListPIdent :: { [PIdent] }
+ListPIdent : PIdent { (:[]) $1 }
+ | PIdent ',' ListPIdent { (:) $1 $3 }
+
+
+Name :: { Name }
+Name : PIdent { IdentName $1 }
+ | '[' PIdent ']' { ListName $2 }
+
+
+ListName :: { [Name] }
+ListName : Name { (:[]) $1 }
+ | Name ',' ListName { (:) $1 $3 }
+
+
+LocDef :: { LocDef }
+LocDef : ListPIdent ':' Exp { LDDecl $1 $3 }
+ | ListPIdent '=' Exp { LDDef $1 $3 }
+ | ListPIdent ':' Exp '=' Exp { LDFull $1 $3 $5 }
+
+
+ListLocDef :: { [LocDef] }
+ListLocDef : {- empty -} { [] }
+ | LocDef { (:[]) $1 }
+ | LocDef ';' ListLocDef { (:) $1 $3 }
+
+
+Exp6 :: { Exp }
+Exp6 : PIdent { EIdent $1 }
+ | '{' PIdent '}' { EConstr $2 }
+ | '%' PIdent '%' { ECons $2 }
+ | Sort { ESort $1 }
+ | String { EString $1 }
+ | Integer { EInt $1 }
+ | Double { EFloat $1 }
+ | '?' { EMeta }
+ | '[' ']' { EEmpty }
+ | 'data' { EData }
+ | '[' PIdent Exps ']' { EList $2 $3 }
+ | '[' String ']' { EStrings $2 }
+ | '{' ListLocDef '}' { ERecord $2 }
+ | '<' ListTupleComp '>' { ETuple $2 }
+ | '(' 'in' PIdent ')' { EIndir $3 }
+ | '<' Exp ':' Exp '>' { ETyped $2 $4 }
+ | '(' Exp ')' { $2 }
+ | LString { ELString $1 }
+
+
+Exp5 :: { Exp }
+Exp5 : Exp5 '.' Label { EProj $1 $3 }
+ | '{' PIdent '.' PIdent '}' { EQConstr $2 $4 }
+ | '%' PIdent '.' PIdent { EQCons $2 $4 }
+ | Exp6 { $1 }
+
+
+Exp4 :: { Exp }
+Exp4 : Exp4 Exp5 { EApp $1 $2 }
+ | 'table' '{' ListCase '}' { ETable $3 }
+ | 'table' Exp6 '{' ListCase '}' { ETTable $2 $4 }
+ | 'table' Exp6 '[' ListExp ']' { EVTable $2 $4 }
+ | 'case' Exp 'of' '{' ListCase '}' { ECase $2 $5 }
+ | 'variants' '{' ListExp '}' { EVariants $3 }
+ | 'pre' '{' Exp ';' ListAltern '}' { EPre $3 $5 }
+ | 'strs' '{' ListExp '}' { EStrs $3 }
+ | PIdent '@' Exp6 { EConAt $1 $3 }
+ | '#' Patt2 { EPatt $2 }
+ | 'pattern' Exp5 { EPattType $2 }
+ | Exp5 { $1 }
+ | 'Lin' PIdent { ELin $2 }
+
+
+Exp3 :: { Exp }
+Exp3 : Exp3 '!' Exp4 { ESelect $1 $3 }
+ | Exp3 '*' Exp4 { ETupTyp $1 $3 }
+ | Exp3 '**' Exp4 { EExtend $1 $3 }
+ | Exp4 { $1 }
+
+
+Exp1 :: { Exp }
+Exp1 : Exp2 '+' Exp1 { EGlue $1 $3 }
+ | Exp2 { $1 }
+
+
+Exp :: { Exp }
+Exp : Exp1 '++' Exp { EConcat $1 $3 }
+ | '\\' ListBind '->' Exp { EAbstr $2 $4 }
+ | '\\' '\\' ListBind '=>' Exp { ECTable $3 $5 }
+ | Decl '->' Exp { EProd $1 $3 }
+ | Exp3 '=>' Exp { ETType $1 $3 }
+ | 'let' '{' ListLocDef '}' 'in' Exp { ELet $3 $6 }
+ | 'let' ListLocDef 'in' Exp { ELetb $2 $4 }
+ | Exp3 'where' '{' ListLocDef '}' { EWhere $1 $4 }
+ | 'fn' '{' ListEquation '}' { EEqs $3 }
+ | 'in' Exp5 String { EExample $2 $3 }
+ | Exp1 { $1 }
+
+
+Exp2 :: { Exp }
+Exp2 : Exp3 { $1 }
+
+
+ListExp :: { [Exp] }
+ListExp : {- empty -} { [] }
+ | Exp { (:[]) $1 }
+ | Exp ';' ListExp { (:) $1 $3 }
+
+
+Exps :: { Exps }
+Exps : {- empty -} { NilExp }
+ | Exp6 Exps { ConsExp $1 $2 }
+
+
+Patt2 :: { Patt }
+Patt2 : '?' { PChar }
+ | '[' String ']' { PChars $2 }
+ | '#' PIdent { PMacro $2 }
+ | '#' PIdent '.' PIdent { PM $2 $4 }
+ | '_' { PW }
+ | PIdent { PV $1 }
+ | '{' PIdent '}' { PCon $2 }
+ | PIdent '.' PIdent { PQ $1 $3 }
+ | Integer { PInt $1 }
+ | Double { PFloat $1 }
+ | String { PStr $1 }
+ | '{' ListPattAss '}' { PR $2 }
+ | '<' ListPattTupleComp '>' { PTup $2 }
+ | '(' Patt ')' { $2 }
+
+
+Patt1 :: { Patt }
+Patt1 : PIdent ListPatt { PC $1 $2 }
+ | PIdent '.' PIdent ListPatt { PQC $1 $3 $4 }
+ | Patt2 '*' { PRep $1 }
+ | PIdent '@' Patt2 { PAs $1 $3 }
+ | '-' Patt2 { PNeg $2 }
+ | Patt2 { $1 }
+
+
+Patt :: { Patt }
+Patt : Patt '|' Patt1 { PDisj $1 $3 }
+ | Patt '+' Patt1 { PSeq $1 $3 }
+ | Patt1 { $1 }
+
+
+PattAss :: { PattAss }
+PattAss : ListPIdent '=' Patt { PA $1 $3 }
+
+
+Label :: { Label }
+Label : PIdent { LIdent $1 }
+ | '$' Integer { LVar $2 }
+
+
+Sort :: { Sort }
+Sort : 'Type' { Sort_Type }
+ | 'PType' { Sort_PType }
+ | 'Tok' { Sort_Tok }
+ | 'Str' { Sort_Str }
+ | 'Strs' { Sort_Strs }
+
+
+ListPattAss :: { [PattAss] }
+ListPattAss : {- empty -} { [] }
+ | PattAss { (:[]) $1 }
+ | PattAss ';' ListPattAss { (:) $1 $3 }
+
+
+ListPatt :: { [Patt] }
+ListPatt : Patt2 { (:[]) $1 }
+ | Patt2 ListPatt { (:) $1 $2 }
+
+
+Bind :: { Bind }
+Bind : PIdent { BIdent $1 }
+ | '_' { BWild }
+
+
+ListBind :: { [Bind] }
+ListBind : {- empty -} { [] }
+ | Bind { (:[]) $1 }
+ | Bind ',' ListBind { (:) $1 $3 }
+
+
+Decl :: { Decl }
+Decl : '(' ListBind ':' Exp ')' { DDec $2 $4 }
+ | Exp4 { DExp $1 }
+
+
+TupleComp :: { TupleComp }
+TupleComp : Exp { TComp $1 }
+
+
+PattTupleComp :: { PattTupleComp }
+PattTupleComp : Patt { PTComp $1 }
+
+
+ListTupleComp :: { [TupleComp] }
+ListTupleComp : {- empty -} { [] }
+ | TupleComp { (:[]) $1 }
+ | TupleComp ',' ListTupleComp { (:) $1 $3 }
+
+
+ListPattTupleComp :: { [PattTupleComp] }
+ListPattTupleComp : {- empty -} { [] }
+ | PattTupleComp { (:[]) $1 }
+ | PattTupleComp ',' ListPattTupleComp { (:) $1 $3 }
+
+
+Case :: { Case }
+Case : Patt '=>' Exp { Case $1 $3 }
+
+
+ListCase :: { [Case] }
+ListCase : Case { (:[]) $1 }
+ | Case ';' ListCase { (:) $1 $3 }
+
+
+Equation :: { Equation }
+Equation : ListPatt '->' Exp { Equ $1 $3 }
+
+
+ListEquation :: { [Equation] }
+ListEquation : {- empty -} { [] }
+ | Equation { (:[]) $1 }
+ | Equation ';' ListEquation { (:) $1 $3 }
+
+
+Altern :: { Altern }
+Altern : Exp '/' Exp { Alt $1 $3 }
+
+
+ListAltern :: { [Altern] }
+ListAltern : {- empty -} { [] }
+ | Altern { (:[]) $1 }
+ | Altern ';' ListAltern { (:) $1 $3 }
+
+
+DDecl :: { DDecl }
+DDecl : '(' ListBind ':' Exp ')' { DDDec $2 $4 }
+ | Exp6 { DDExp $1 }
+
+
+ListDDecl :: { [DDecl] }
+ListDDecl : {- empty -} { [] }
+ | ListDDecl DDecl { flip (:) $1 $2 }
+
+
+OldGrammar :: { OldGrammar }
+OldGrammar : Include ListTopDef { OldGr $1 (reverse $2) }
+
+
+Include :: { Include }
+Include : {- empty -} { NoIncl }
+ | 'include' ListFileName { Incl $2 }
+
+
+FileName :: { FileName }
+FileName : String { FString $1 }
+ | PIdent { FIdent $1 }
+ | '/' FileName { FSlash $2 }
+ | '.' FileName { FDot $2 }
+ | '-' FileName { FMinus $2 }
+ | PIdent FileName { FAddId $1 $2 }
+
+
+ListFileName :: { [FileName] }
+ListFileName : FileName ';' { (:[]) $1 }
+ | FileName ';' ListFileName { (:) $1 $3 }
+
+
+
+{
+
+returnM :: a -> Err a
+returnM = return
+
+thenM :: Err a -> (a -> Err b) -> Err b
+thenM = (>>=)
+
+happyError :: [Token] -> Err a
+happyError ts =
+ Bad $ "syntax error at " ++ tokenPos ts ++
+ case ts of
+ [] -> []
+ [Err _] -> " due to lexer error"
+ _ -> " before " ++ unwords (map (BS.unpack . prToken) (take 4 ts))
+
+myLexer = tokens
+}
+