aboutsummaryrefslogblamecommitdiff
path: root/src/Syntax.hs
blob: 065f91ddd93a186d7d5cd8e239a26c7b5cd1c265 (plain) (tree)
1
2
3
4
5
6
7
8
9




                  

                            
                   
                                 
                            



                                 
                                 



                          
                                                                         
                           
                          
                                 





                             
                              
                         
                                          
                                                                             
                                 
         
                                                                                                                               
                                 


                                  

                                                    
 
module Syntax
  where

type Idnt = String
data Typ = TInt
         | TRecord  TypeDict
         | TVariant TypeDict
         | TPtr Typ
           deriving(Eq,Show,Read)
type TypeDict = [(Idnt,Typ)]

data Expr = Var Idnt
          | IntLit Int
          | Record [(Idnt, Expr)]
          | Variant Typ Idnt Expr
          | Add Expr Expr
          | Mult Expr Expr
          | Neg Expr
          | Deref Expr
          | Match Expr [(Idnt, Idnt, Expr)] -- Variant,Binder, Expression
          | Proj Idnt Expr 
          | Annot Expr Typ
           deriving(Eq,Show,Read)
data Com = Skip
         | Seq Com Com
         | If Expr Com Com
         | While Expr Com
         | Asgn Idnt Expr
         | Decl Idnt Expr Com
         | Alloc Idnt Expr Com
         | Save Idnt Expr
         | SMatch Expr [(Idnt, Idnt, Com)]
         | FunctionCall Idnt Idnt [Expr] -- variable function_name parameters
           deriving(Eq,Show,Read)
         
data FuncDecl = Func Idnt [(Idnt, Typ)] [(Idnt,Expr)] Com Expr -- function_name [parameters]  [local variables] body return_val
           deriving(Eq,Show,Read)
data FuncSign = FuncSign [Typ] Typ
                deriving(Eq,Show)
type FuncEnv = [(Idnt,FuncSign)]
data Program = Program [FuncDecl] [(Idnt, Expr)] Com
           deriving(Eq,Show,Read)