diff options
| author | aarne <aarne@cs.chalmers.se> | 2009-01-30 16:52:38 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2009-01-30 16:52:38 +0000 |
| commit | 241e13247d4520fedabbc41fead3054d4d95114f (patch) | |
| tree | 9bfc38bb5a56d841b4f3964a2fb877d4c7443c44 | |
| parent | 92bb971ea3e13a69e74c078af7c16f0c95ee0a63 (diff) | |
metavariables made unique in type checking
| -rw-r--r-- | doc/gf-bibliography.txt | 2 | ||||
| -rw-r--r-- | src/PGF/Expr.hs | 14 | ||||
| -rw-r--r-- | src/PGF/TypeCheck.hs | 2 |
3 files changed, 14 insertions, 4 deletions
diff --git a/doc/gf-bibliography.txt b/doc/gf-bibliography.txt index 468a884c7..94f275bea 100644 --- a/doc/gf-bibliography.txt +++ b/doc/gf-bibliography.txt @@ -211,7 +211,7 @@ pp. 115-131, //A philosophical study of the medieval thesis that// //grammar is the same in all languages and the difference is only in words.// -J Khegai. +J. Khegai. GF parallel resource grammars and Russian. In proceedings of ACL2006 (The joint conference of the International Committee on Computational diff --git a/src/PGF/Expr.hs b/src/PGF/Expr.hs index c586aae8c..eee489100 100644 --- a/src/PGF/Expr.hs +++ b/src/PGF/Expr.hs @@ -10,7 +10,10 @@ module PGF.Expr(Tree(..), Literal(..), Value(..), Env, eval, apply,
-- helpers
- pStr,pFactor
+ pStr,pFactor,
+
+ -- refresh metavariables
+ newMetas
) where
import PGF.CId
@@ -250,4 +253,11 @@ apply :: Value -> Value -> Value apply (VClosure env (EAbs x e)) v = eval (Map.insert x v env) e
apply v0 v = VApp v0 v
-
+--- use composOp and state monad...
+newMetas :: Expr -> Expr
+newMetas = fst . metas 0 where
+ metas i exp = case exp of
+ EAbs x e -> let (f,j) = metas i e in (EAbs x f, j)
+ EApp f a -> let (g,j) = metas i f ; (b,k) = metas j a in (EApp g b,k)
+ EMeta _ -> (EMeta i, i+1)
+ _ -> (exp,i)
diff --git a/src/PGF/TypeCheck.hs b/src/PGF/TypeCheck.hs index 1c0d04fd4..1a2ba334a 100644 --- a/src/PGF/TypeCheck.hs +++ b/src/PGF/TypeCheck.hs @@ -28,7 +28,7 @@ import Data.List (partition,sort,groupBy) import Debug.Trace typecheck :: PGF -> Tree -> [Tree] -typecheck pgf t = case inferExpr pgf (tree2expr t) of +typecheck pgf t = case inferExpr pgf (newMetas (tree2expr t)) of Ok t -> [expr2tree t] Bad s -> trace s [] |
