summaryrefslogtreecommitdiff
path: root/src/Transfer/Syntax/Par.y
diff options
context:
space:
mode:
authorbringert <bringert@cs.chalmers.se>2005-12-01 15:37:47 +0000
committerbringert <bringert@cs.chalmers.se>2005-12-01 15:37:47 +0000
commit635845eed8acf476621bd0d01a85146fb19693a6 (patch)
tree2c40fe3e2b32ec0fdc07b445a3c184f03d5ecc77 /src/Transfer/Syntax/Par.y
parent30bb51372fa8fdb6d68d1fd1b15793940c8d4e3b (diff)
Transfer: added support for disjunctive patterns.
Diffstat (limited to 'src/Transfer/Syntax/Par.y')
-rw-r--r--src/Transfer/Syntax/Par.y15
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 }