case expr rules
This commit is contained in:
@@ -34,7 +34,8 @@ import Data.Default.Class (def)
|
||||
letrec { Located _ _ _ TokenLetrec }
|
||||
module { Located _ _ _ TokenModule }
|
||||
where { Located _ _ _ TokenWhere }
|
||||
',' { Located _ _ _ TokenComma }
|
||||
case { Located _ _ _ TokenCase }
|
||||
of { Located _ _ _ TokenOf }
|
||||
in { Located _ _ _ TokenIn }
|
||||
litint { Located _ _ _ (TokenLitInt $$) }
|
||||
varname { Located _ _ _ (TokenVarName $$) }
|
||||
@@ -85,6 +86,7 @@ Expr :: { Expr }
|
||||
Expr : LetExpr { $1 }
|
||||
| 'λ' Binders '->' Expr { Lam $2 $4 }
|
||||
| Application { $1 }
|
||||
| CaseExpr { $1 }
|
||||
| Expr1 { $1 }
|
||||
|
||||
LetExpr :: { Expr }
|
||||
@@ -103,6 +105,17 @@ AppArgs :: { [Expr] }
|
||||
AppArgs : Expr1 AppArgs { $1 : $2 }
|
||||
| Expr1 { [$1] }
|
||||
|
||||
CaseExpr :: { Expr }
|
||||
CaseExpr : case Expr of '{' Alters '}' { Case $2 $5 }
|
||||
|
||||
Alters :: { [Alter] }
|
||||
Alters : Alter ';' Alters { $1 : $3 }
|
||||
| Alter ';' { [$1] }
|
||||
| Alter { [$1] }
|
||||
|
||||
Alter :: { Alter }
|
||||
Alter : litint ParList '->' Expr { Alter $1 $2 $4 }
|
||||
|
||||
Expr1 :: { Expr }
|
||||
Expr1 : litint { IntE $1 }
|
||||
| Id { Var $1 }
|
||||
|
||||
@@ -11,6 +11,7 @@ module Core.Syntax
|
||||
, Rec(..)
|
||||
, Alter(..)
|
||||
, Name
|
||||
, Tag
|
||||
, ScDef(..)
|
||||
, Module(..)
|
||||
, Program(..)
|
||||
@@ -31,7 +32,7 @@ import Language.Haskell.TH.Syntax (Lift)
|
||||
----------------------------------------------------------------------------------
|
||||
|
||||
data Expr = Var Name
|
||||
| Con Int Int -- Con Tag Arity
|
||||
| Con Tag Int -- Con Tag Arity
|
||||
| Let Rec [Binding] Expr
|
||||
| Case Expr [Alter]
|
||||
| Lam [Name] Expr
|
||||
@@ -56,10 +57,11 @@ data Rec = Rec
|
||||
| NonRec
|
||||
deriving (Show, Eq, Lift)
|
||||
|
||||
data Alter = Alter Int [Name] Expr
|
||||
data Alter = Alter Tag [Name] Expr
|
||||
deriving (Show, Lift, Eq)
|
||||
|
||||
type Name = String
|
||||
type Tag = Int
|
||||
|
||||
data ScDef = ScDef Name [Name] Expr
|
||||
deriving (Show, Lift, Eq)
|
||||
|
||||
Reference in New Issue
Block a user