diff options
| author | aarne <aarne@cs.chalmers.se> | 2006-01-07 12:26:11 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2006-01-07 12:26:11 +0000 |
| commit | 4e42d73ee508715e83c8f1a160b7bc696b78571b (patch) | |
| tree | b5d4f72f694bb4c73075a6f9402444eb8085ae96 /src/GF/Source/ParGF.y | |
| parent | a641bf4004cc248a33904fa0ac8c11ce2460ea5e (diff) | |
regex patterns for tokens
Diffstat (limited to 'src/GF/Source/ParGF.y')
| -rw-r--r-- | src/GF/Source/ParGF.y | 112 |
1 files changed, 62 insertions, 50 deletions
diff --git a/src/GF/Source/ParGF.y b/src/GF/Source/ParGF.y index 5fb0194eb..3399c0862 100644 --- a/src/GF/Source/ParGF.y +++ b/src/GF/Source/ParGF.y @@ -1,10 +1,9 @@ -- This Happy file was machine-generated by the BNF converter { -module GF.Source.ParGF where -- H -import GF.Source.AbsGF -- H -import GF.Source.LexGF -- H -import GF.Infra.Ident -- H -import GF.Data.ErrM -- H +module ParGF where +import AbsGF +import LexGF +import ErrM } %name pGrammar Grammar @@ -29,6 +28,7 @@ import GF.Data.ErrM -- H ',' { PT _ (TS ",") } '[' { PT _ (TS "[") } ']' { PT _ (TS "]") } + '-' { PT _ (TS "-") } '.' { PT _ (TS ".") } '|' { PT _ (TS "|") } '%' { PT _ (TS "%") } @@ -38,14 +38,13 @@ import GF.Data.ErrM -- H '@' { PT _ (TS "@") } '!' { PT _ (TS "!") } '*' { PT _ (TS "*") } + '+' { PT _ (TS "+") } + '++' { PT _ (TS "++") } '\\' { PT _ (TS "\\") } '=>' { PT _ (TS "=>") } - '++' { PT _ (TS "++") } - '+' { PT _ (TS "+") } '_' { PT _ (TS "_") } '$' { PT _ (TS "$") } '/' { PT _ (TS "/") } - '-' { PT _ (TS "-") } 'Lin' { PT _ (TS "Lin") } 'PType' { PT _ (TS "PType") } 'Str' { PT _ (TS "Str") } @@ -96,15 +95,17 @@ import GF.Data.ErrM -- H L_ident { PT _ (TV $$) } L_integ { PT _ (TI $$) } L_quoted { PT _ (TL $$) } +L_doubl { PT _ (TD $$) } L_LString { PT _ (T_LString $$) } L_err { _ } %% -Ident :: { Ident } : L_ident { identC $1 } -- H +Ident :: { Ident } : L_ident { Ident $1 } Integer :: { Integer } : L_integ { (read $1) :: Integer } String :: { String } : L_quoted { $1 } +Double :: { Double } : L_doubl { (read $1) :: Double } LString :: { LString} : L_LString { LString ($1)} Grammar :: { Grammar } @@ -158,7 +159,7 @@ ModType : 'abstract' Ident { MTAbstract $2 } ModBody :: { ModBody } ModBody : Extend Opens '{' ListTopDef '}' { MBody $1 $2 (reverse $4) } | Ident 'with' ListOpen { MWith $1 $3 } - | ListIdent '**' Ident 'with' ListOpen { MWithE $1 $3 $5 } + | ListIncluded '**' Ident 'with' ListOpen { MWithE $1 $3 $5 } | 'reuse' Ident { MReuse $2 } | 'union' ListIncluded { MUnion $2 } @@ -169,7 +170,7 @@ ListTopDef : {- empty -} { [] } Extend :: { Extend } -Extend : ListIdent '**' { Ext $1 } +Extend : ListIncluded '**' { Ext $1 } | {- empty -} { NoExt } @@ -210,6 +211,7 @@ ListIncluded : {- empty -} { [] } Included :: { Included } Included : Ident { IAll $1 } | Ident '[' ListIdent ']' { ISome $1 $3 } + | Ident '-' '[' ListIdent ']' { IMinus $1 $4 } Def :: { Def } @@ -353,13 +355,14 @@ ListLocDef : {- empty -} { [] } | LocDef ';' ListLocDef { (:) $1 $3 } -Exp4 :: { Exp } -Exp4 : Ident { EIdent $1 } +Exp6 :: { Exp } +Exp6 : Ident { EIdent $1 } | '{' Ident '}' { EConstr $2 } | '%' Ident '%' { ECons $2 } | Sort { ESort $1 } | String { EString $1 } | Integer { EInt $1 } + | Double { EFloat $1 } | '?' { EMeta } | '[' ']' { EEmpty } | 'data' { EData } @@ -373,48 +376,57 @@ Exp4 : Ident { EIdent $1 } | LString { ELString $1 } -Exp3 :: { Exp } -Exp3 : Exp3 '.' Label { EProj $1 $3 } +Exp5 :: { Exp } +Exp5 : Exp5 '.' Label { EProj $1 $3 } | '{' Ident '.' Ident '}' { EQConstr $2 $4 } - | '%' Ident '.' Ident '%' { EQCons $2 $4 } - | Exp4 { $1 } + | '%' Ident '.' Ident { EQCons $2 $4 } + | Exp6 { $1 } -Exp2 :: { Exp } -Exp2 : Exp2 Exp3 { EApp $1 $2 } +Exp4 :: { Exp } +Exp4 : Exp4 Exp5 { EApp $1 $2 } | 'table' '{' ListCase '}' { ETable $3 } - | 'table' Exp4 '{' ListCase '}' { ETTable $2 $4 } - | 'table' Exp4 '[' ListExp ']' { EVTable $2 $4 } + | '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 } - | Ident '@' Exp4 { EConAt $1 $3 } - | Exp3 { $1 } + | Ident '@' Exp6 { EConAt $1 $3 } + | Exp5 { $1 } | 'Lin' Ident { 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 : Exp1 '!' Exp2 { ESelect $1 $3 } - | Exp1 '*' Exp2 { ETupTyp $1 $3 } - | Exp1 '**' Exp2 { EExtend $1 $3 } +Exp1 : Exp2 '+' Exp1 { EGlue $1 $3 } | Exp2 { $1 } Exp :: { Exp } -Exp : '\\' ListBind '->' Exp { EAbstr $2 $4 } +Exp : Exp1 '++' Exp { EConcat $1 $3 } + | '\\' ListBind '->' Exp { EAbstr $2 $4 } | '\\' '\\' ListBind '=>' Exp { ECTable $3 $5 } | Decl '->' Exp { EProd $1 $3 } - | Exp1 '=>' Exp { ETType $1 $3 } - | Exp1 '++' Exp { EConcat $1 $3 } - | Exp1 '+' Exp { EGlue $1 $3 } + | Exp3 '=>' Exp { ETType $1 $3 } | 'let' '{' ListLocDef '}' 'in' Exp { ELet $3 $6 } | 'let' ListLocDef 'in' Exp { ELetb $2 $4 } - | Exp1 'where' '{' ListLocDef '}' { EWhere $1 $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 } @@ -423,24 +435,33 @@ ListExp : {- empty -} { [] } Exps :: { Exps } Exps : {- empty -} { NilExp } - | Exp4 Exps { ConsExp $1 $2 } + | Exp6 Exps { ConsExp $1 $2 } -Patt1 :: { Patt } -Patt1 : '_' { PW } +Patt2 :: { Patt } +Patt2 : '_' { PW } | Ident { PV $1 } | '{' Ident '}' { PCon $2 } | Ident '.' Ident { PQ $1 $3 } | Integer { PInt $1 } + | Double { PFloat $1 } | String { PStr $1 } | '{' ListPattAss '}' { PR $2 } | '<' ListPattTupleComp '>' { PTup $2 } | '(' Patt ')' { $2 } -Patt :: { Patt } -Patt : Ident ListPatt { PC $1 $2 } +Patt1 :: { Patt } +Patt1 : Ident ListPatt { PC $1 $2 } | Ident '.' Ident ListPatt { PQC $1 $3 $4 } + | Patt2 '*' { PRep $1 } + | Ident '@' Patt2 { PAs $1 $3 } + | Patt2 { $1 } + + +Patt :: { Patt } +Patt : Patt '|' Patt1 { PDisj $1 $3 } + | Patt '+' Patt1 { PSeq $1 $3 } | Patt1 { $1 } @@ -467,18 +488,9 @@ ListPattAss : {- empty -} { [] } | PattAss ';' ListPattAss { (:) $1 $3 } -PattAlt :: { PattAlt } -PattAlt : Patt { AltP $1 } - - ListPatt :: { [Patt] } -ListPatt : Patt1 { (:[]) $1 } - | Patt1 ListPatt { (:) $1 $2 } - - -ListPattAlt :: { [PattAlt] } -ListPattAlt : PattAlt { (:[]) $1 } - | PattAlt '|' ListPattAlt { (:) $1 $3 } +ListPatt : Patt2 { (:[]) $1 } + | Patt2 ListPatt { (:) $1 $2 } Bind :: { Bind } @@ -494,7 +506,7 @@ ListBind : {- empty -} { [] } Decl :: { Decl } Decl : '(' ListBind ':' Exp ')' { DDec $2 $4 } - | Exp2 { DExp $1 } + | Exp4 { DExp $1 } TupleComp :: { TupleComp } @@ -518,7 +530,7 @@ ListPattTupleComp : {- empty -} { [] } Case :: { Case } -Case : ListPattAlt '=>' Exp { Case $1 $3 } +Case : Patt '=>' Exp { Case $1 $3 } ListCase :: { [Case] } @@ -548,7 +560,7 @@ ListAltern : {- empty -} { [] } DDecl :: { DDecl } DDecl : '(' ListBind ':' Exp ')' { DDDec $2 $4 } - | Exp4 { DDExp $1 } + | Exp6 { DDExp $1 } ListDDecl :: { [DDecl] } |
