mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 04:59:31 -06:00
metavariables made unique in type checking
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user