repositories
/
cc1516.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
f5e1259
)
bla working on lists
author
pimjager
<pim@pimjager.nl>
Wed, 13 Apr 2016 09:36:46 +0000
(11:36 +0200)
committer
pimjager
<pim@pimjager.nl>
Wed, 13 Apr 2016 09:36:46 +0000
(11:36 +0200)
sem.icl
patch
|
blob
|
history
diff --git
a/sem.icl
b/sem.icl
index
8224a4f
..
f0241e1
100644
(file)
--- a/
sem.icl
+++ b/
sem.icl
@@
-35,7
+35,7
@@
get = gets id
getRandomStream :: Int -> [String]
getRandomStream i = genIdents $ filter (isAlpha o toChar) (genRandInt i)
where
getRandomStream :: Int -> [String]
getRandomStream i = genIdents $ filter (isAlpha o toChar) (genRandInt i)
where
- genIdents r = let (ic, r
) = splitAt 5 r in [toString ic: genIdents r
]
+ genIdents r = let (ic, r
2) = splitAt 5 r in [toString ic: genIdents r2
]
freshIdent :: Env String
freshIdent = get >>= \(st, [ident:rest])-> put (st, rest)
freshIdent :: Env String
freshIdent = get >>= \(st, [ident:rest])-> put (st, rest)
@@
-59,7
+59,7
@@
instance toString SemError where
toString t1, ". Given: ", toString t2]
sem :: AST -> SemOutput
toString t1, ". Given: ", toString t2]
sem :: AST -> SemOutput
-sem (AST vd fd) = case evalStateT m ('Map'.newMap, getRandomStream
0
) of
+sem (AST vd fd) = case evalStateT m ('Map'.newMap, getRandomStream
1
) of
Left e = Left [e]
Right (vds, fds) = Right (AST vds fds)
where
Left e = Left [e]
Right (vds, fds) = Right (AST vds fds)
where
@@
-105,9
+105,9
@@
typeExpr (Op2Expr p e1 BiOr e2) = unify BoolType e1 >>| unify BoolType e2
//a
typeExpr (Op2Expr p e1 BiCons e2) = typeExpr e1 >>= \t1-> typeExpr e2
>>= \t2-> unify (ListType t1) t2
//a
typeExpr (Op2Expr p e1 BiCons e2) = typeExpr e1 >>= \t1-> typeExpr e2
>>= \t2-> unify (ListType t1) t2
-//typeExpr (FunExpr p FunCall) = undef
-typeExpr (EmptyListExpr p) = freshIdent >>= \frsh-> let t = IdType frsh in
+typeExpr (EmptyListExpr p) = freshIdent >>= \frsh-> let t = IdType frsh in
putIdent frsh t >>| pure t
putIdent frsh t >>| pure t
+//typeExpr (FunExpr p FunCall) = undef
//typeExpr (VarExpr Pos VarDef) = undef //when checking var-expr, be sure to
//put the infered type in the context
//typeExpr (VarExpr Pos VarDef) = undef //when checking var-expr, be sure to
//put the infered type in the context
@@
-127,11
+127,15
@@
instance unify Expr where
Right t = Right t //note, t :: (Type, Gamma)
where m = typeExpr e >>= \tex-> unify t tex
Right t = Right t //note, t :: (Type, Gamma)
where m = typeExpr e >>= \tex-> unify t tex
+//unify e (IdType i) = unify (IdType i) e
+ //note, don't use putIdent as that will call unify again
+ //unify (IdType i) e=:(IdType j) = modify (\(st, r)->('Map'.put j e st, r))
+
instance unify Type where
unify IntType IntType = pure IntType
unify BoolType BoolType = pure BoolType
unify CharType CharType = pure CharType
instance unify Type where
unify IntType IntType = pure IntType
unify BoolType BoolType = pure BoolType
unify CharType CharType = pure CharType
- unify (ListType t1) (ListType t2) = unify t1 t2
+
//
unify (ListType t1) (ListType t2) = unify t1 t2
unify t1 t2 = liftT $ Left $ UnifyError zero t1 t2
instance zero Pos where
unify t1 t2 = liftT $ Left $ UnifyError zero t1 t2
instance zero Pos where