diff options
| author | bringert <bringert@cs.chalmers.se> | 2005-12-01 15:37:47 +0000 |
|---|---|---|
| committer | bringert <bringert@cs.chalmers.se> | 2005-12-01 15:37:47 +0000 |
| commit | 635845eed8acf476621bd0d01a85146fb19693a6 (patch) | |
| tree | 2c40fe3e2b32ec0fdc07b445a3c184f03d5ecc77 /src/Transfer/Syntax/Par.y | |
| parent | 30bb51372fa8fdb6d68d1fd1b15793940c8d4e3b (diff) | |
Transfer: added support for disjunctive patterns.
Diffstat (limited to 'src/Transfer/Syntax/Par.y')
| -rw-r--r-- | src/Transfer/Syntax/Par.y | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/Transfer/Syntax/Par.y b/src/Transfer/Syntax/Par.y index 313977c77..3ed2c3141 100644 --- a/src/Transfer/Syntax/Par.y +++ b/src/Transfer/Syntax/Par.y @@ -19,6 +19,7 @@ import Transfer.ErrM '{' { PT _ (TS "{") } '}' { PT _ (TS "}") } '=' { PT _ (TS "=") } + '||' { PT _ (TS "||") } '(' { PT _ (TS "(") } ')' { PT _ (TS ")") } '_' { PT _ (TS "_") } @@ -27,7 +28,6 @@ import Transfer.ErrM '\\' { PT _ (TS "\\") } '>>=' { PT _ (TS ">>=") } '>>' { PT _ (TS ">>") } - '||' { PT _ (TS "||") } '&&' { PT _ (TS "&&") } '==' { PT _ (TS "==") } '/=' { PT _ (TS "/=") } @@ -112,23 +112,28 @@ ListConsDecl : {- empty -} { [] } Pattern :: { Pattern } -Pattern : Ident Pattern1 ListPattern { PConsTop $1 $2 (reverse $3) } +Pattern : Pattern1 '||' Pattern { POr $1 $3 } | Pattern1 { $1 } Pattern1 :: { Pattern } -Pattern1 : '(' Ident ListPattern ')' { PCons $2 (reverse $3) } - | 'rec' '{' ListFieldPattern '}' { PRec $3 } +Pattern1 : Ident Pattern2 ListPattern { PConsTop $1 $2 (reverse $3) } + | Pattern2 { $1 } + + +Pattern2 :: { Pattern } +Pattern2 : 'rec' '{' ListFieldPattern '}' { PRec $3 } | 'Type' { PType } | String { PStr $1 } | Integer { PInt $1 } | Ident { PVar $1 } | '_' { PWild } + | '(' Pattern ')' { $2 } ListPattern :: { [Pattern] } ListPattern : {- empty -} { [] } - | ListPattern Pattern1 { flip (:) $1 $2 } + | ListPattern Pattern2 { flip (:) $1 $2 } FieldPattern :: { FieldPattern } |
