parsing overloaded constructors as result

This commit is contained in:
aarne
2007-07-02 13:58:02 +00:00
parent e2b6f56d17
commit e465bd5b93
10 changed files with 1293 additions and 1 deletions

View File

@@ -0,0 +1,36 @@
import Monad
main = do
ss <- readFile src >>= return . map words . lines
writeFile abstr "abstract OverGrammar = Structural,Numeral,Conjunction[ListS,ListNP,ListAP,ListAdv] ** {\n"
appendFile abstr "cat ImpForm ; Punct ;\n"
writeFile concr "concrete OverGrammarEng of OverGrammar = StructuralEng,NumeralEng,ConjunctionEng[ListS,ListNP,ListAP,ListAdv] ** open GrammarEng in {\n"
foldM process ("",0) ss
appendFile abstr "}\n"
appendFile concr "}\n"
return ()
src = "constr.gf"
abstr = "OverGrammar.gf"
concr = "OverGrammarEng.gf"
process env@(mk,count) line = case line of
('-':'-':_) : _ -> return env
_:rest | elem "=" rest && notElem "overload" rest -> do
let (fun,lin) = span (/="=") line
env2 <- process env fun
process env2 lin
mk1 : ":" : typ -> do
let mk2 = withCount count mk1
put abstr $ "fun" : mk2 : ":" : takeWhile (/="--") typ ++ [";\n"]
return $ (mk2,count)
"=" : trm -> do
put concr $ "lin" : mk : "=" : takeWhile (/=";") trm ++ [";\n"]
return $ (mk,count + 1)
_ -> return env
put file ws = appendFile file $ unwords ws
withCount count mk = "ovrld" ++ show count ++ "_" ++ mk