diff options
| author | bringert <bringert@cs.chalmers.se> | 2005-12-01 17:27:06 +0000 |
|---|---|---|
| committer | bringert <bringert@cs.chalmers.se> | 2005-12-01 17:27:06 +0000 |
| commit | 396cc63cfc3658a11bbc76c9b5c4bf32e21cef6a (patch) | |
| tree | 7c82ad66ee5183acf0966a2627991b95c3739ca6 /src/Transfer/Syntax/Par.y | |
| parent | 8de44f741e2452cbad73dd1fb467fca888235748 (diff) | |
Added list patterns. Added som simple prelude functions.
Diffstat (limited to 'src/Transfer/Syntax/Par.y')
| -rw-r--r-- | src/Transfer/Syntax/Par.y | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/src/Transfer/Syntax/Par.y b/src/Transfer/Syntax/Par.y index 48e9daa55..d850c8bd8 100644 --- a/src/Transfer/Syntax/Par.y +++ b/src/Transfer/Syntax/Par.y @@ -20,8 +20,12 @@ import Transfer.ErrM '}' { PT _ (TS "}") } '=' { PT _ (TS "=") } '||' { PT _ (TS "||") } + '::' { PT _ (TS "::") } '(' { PT _ (TS "(") } ')' { PT _ (TS ")") } + '[' { PT _ (TS "[") } + ']' { PT _ (TS "]") } + ',' { PT _ (TS ",") } '_' { PT _ (TS "_") } '->' { PT _ (TS "->") } '<-' { PT _ (TS "<-") } @@ -35,17 +39,13 @@ import Transfer.ErrM '<=' { 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 "?") } - ',' { PT _ (TS ",") } 'Type' { PT _ (TS "Type") } 'case' { PT _ (TS "case") } 'data' { PT _ (TS "data") } @@ -119,12 +119,18 @@ Pattern : Pattern1 '||' Pattern { POr $1 $3 } Pattern1 :: { Pattern } -Pattern1 : Ident Pattern2 ListPattern { PConsTop $1 $2 (reverse $3) } +Pattern1 : Pattern2 '::' Pattern1 { PListCons $1 $3 } | Pattern2 { $1 } Pattern2 :: { Pattern } -Pattern2 : 'rec' '{' ListFieldPattern '}' { PRec $3 } +Pattern2 : Ident Pattern3 ListPattern { PConsTop $1 $2 (reverse $3) } + | Pattern3 { $1 } + + +Pattern3 :: { Pattern } +Pattern3 : 'rec' '{' ListFieldPattern '}' { PRec $3 } + | '[' ListPListElem ']' { PList $2 } | 'Type' { PType } | String { PStr $1 } | Integer { PInt $1 } @@ -133,9 +139,19 @@ Pattern2 : 'rec' '{' ListFieldPattern '}' { PRec $3 } | '(' Pattern ')' { $2 } +PListElem :: { PListElem } +PListElem : Pattern { PListElem $1 } + + +ListPListElem :: { [PListElem] } +ListPListElem : {- empty -} { [] } + | PListElem { (:[]) $1 } + | PListElem ',' ListPListElem { (:) $1 $3 } + + ListPattern :: { [Pattern] } ListPattern : {- empty -} { [] } - | ListPattern Pattern2 { flip (:) $1 $2 } + | ListPattern Pattern3 { flip (:) $1 $2 } FieldPattern :: { FieldPattern } |
