diff options
author | Camil Staps | 2018-02-06 11:56:59 +0100 |
---|---|---|
committer | Camil Staps | 2018-02-06 11:56:59 +0100 |
commit | 5a0971b84e5af2a1be707fa7292ac7b19ba1790a (patch) | |
tree | caea90560b690746d0fa02655f4abd149a13bed2 /src/SPL/Syntax.hs |
Initial commit
Diffstat (limited to 'src/SPL/Syntax.hs')
-rw-r--r-- | src/SPL/Syntax.hs | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/SPL/Syntax.hs b/src/SPL/Syntax.hs new file mode 100644 index 0000000..4b0f670 --- /dev/null +++ b/src/SPL/Syntax.hs @@ -0,0 +1,72 @@ +-- vim: et ts=2 sw=2 ai: +module SPL.Syntax +where + +type Name = String + +data Program = Program + { funs :: [Function] + , vars :: [Variable] + } + +data Function = Function + { fname :: Name + , ftype :: Type + , fcode :: Statement + } + +data Variable = Variable + { vname :: Name + , vtype :: Type + } + +data Type + = Type -- TODO + +data Statement + = If Expression Statement (Maybe Statement) + | While Expression Statement + | Assign Name Expression + | Eval Expression + | Return (Maybe Expression) + | Seq Statement Statement + +data Expression + = Field Name Field + | Op2 Expression Op2 Expression + | Op1 Op1 Expression + | Literal Literal + | FunCall Name [Expression] + | Tuple Expression Expression + +data Field + = Hd + | Tl + | Fst + | Snd + +data Op2 + = Add + | Sub + | Mul + | Div + | Mod + | Eq + | Lt + | Gt + | Le + | Ge + | Ne + | And + | Or + | Cons + +data Op1 + = Not + | Neg + +data Literal + = LInt Int + | LChar Char + | LBool Bool + | LNil |