mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 19:42:50 -06:00
bug fixed (?) in compilation
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
incomplete concrete NounScand of Noun =
|
incomplete concrete NounScand of Noun =
|
||||||
CatScand ** open CommonScand, ResScand, Prelude in {
|
CatScand ** open CommonScand, ResScand, Prelude in {
|
||||||
|
|
||||||
flags optimize=none_subs ; ---- all_subs
|
flags optimize=all_subs ;
|
||||||
|
|
||||||
-- The rule defines $Det Quant Num Ord CN$ where $Det$ is empty if
|
-- The rule defines $Det Quant Num Ord CN$ where $Det$ is empty if
|
||||||
-- it is the definite article ($DefSg$ or $DefPl$) and both $Num$ and
|
-- it is the definite article ($DefSg$ or $DefPl$) and both $Num$ and
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ lin n8 =
|
|||||||
lin n9 =
|
lin n9 =
|
||||||
{inh = conj ; s = table {{p1 = unit ; p2 = mod} => "nueve" ; {p1 = unit ; p2 = unmod} => "nueve" ; {p1 = unit ; p2 = conj} => "y" ++ "nueve" ; {p1 = teen ; p2 = mod} => "diecinueve" ; {p1 = teen ; p2 = unmod} => "diecinueve" ; {p1 = teen ; p2 = conj} => "diecinueve" ; {p1 = ten ; p2 = mod} => "noventa" ; {p1 = ten ; p2 = unmod} => "noventa" ; {p1 = ten ; p2 = conj} => "noventa" ; {p1 = hundred ; p2 = mod} => "novecientos" ; {p1 = hundred ; p2 = unmod} => "novecientos" ; {p1 = hundred ; p2 = conj} => "novecientos"}} ;
|
{inh = conj ; s = table {{p1 = unit ; p2 = mod} => "nueve" ; {p1 = unit ; p2 = unmod} => "nueve" ; {p1 = unit ; p2 = conj} => "y" ++ "nueve" ; {p1 = teen ; p2 = mod} => "diecinueve" ; {p1 = teen ; p2 = unmod} => "diecinueve" ; {p1 = teen ; p2 = conj} => "diecinueve" ; {p1 = ten ; p2 = mod} => "noventa" ; {p1 = ten ; p2 = unmod} => "noventa" ; {p1 = ten ; p2 = conj} => "noventa" ; {p1 = hundred ; p2 = mod} => "novecientos" ; {p1 = hundred ; p2 = unmod} => "novecientos" ; {p1 = hundred ; p2 = conj} => "novecientos"}} ;
|
||||||
lin pot01 =
|
lin pot01 =
|
||||||
|
let
|
||||||
|
uno : Gender => Str = table {Masc => "uno" ; Fem => "una"} ;
|
||||||
|
yuno : Gender => Str = \\g => "y" ++ uno ! g ;
|
||||||
|
in
|
||||||
{s = table {{p1 = unit ; p2 = mod} => uno ; {p1 = unit ; p2 = unmod}
|
{s = table {{p1 = unit ; p2 = mod} => uno ; {p1 = unit ; p2 = unmod}
|
||||||
=> uno ; {p1 = unit ; p2 = conj} => yuno ; {p1 = teen ; p2 = mod} =>
|
=> uno ; {p1 = unit ; p2 = conj} => yuno ; {p1 = teen ; p2 = mod} =>
|
||||||
uno ; {p1 = teen ; p2 = unmod} => uno ; {p1 = teen ; p2 = conj} =>
|
uno ; {p1 = teen ; p2 = unmod} => uno ; {p1 = teen ; p2 = conj} =>
|
||||||
@@ -74,7 +78,5 @@ param Modif = mod | unmod | conj ;
|
|||||||
oper spl : Str -> {s : Gender => Str ; n : Number} = \s -> {s = \\_ =>
|
oper spl : Str -> {s : Gender => Str ; n : Number} = \s -> {s = \\_ =>
|
||||||
s ; n = Pl} ;
|
s ; n = Pl} ;
|
||||||
|
|
||||||
uno : Gender => Str = table {Masc => "uno" ; Fem => "una"} ;
|
|
||||||
yuno : Gender => Str = \\g => "y" ++ uno ! g ;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import GF.Compile.Optimize
|
|||||||
import GF.Compile.GrammarToCanon
|
import GF.Compile.GrammarToCanon
|
||||||
import GF.Canon.Share
|
import GF.Canon.Share
|
||||||
import GF.Canon.Subexpressions (elimSubtermsMod,unSubelimModule)
|
import GF.Canon.Subexpressions (elimSubtermsMod,unSubelimModule)
|
||||||
|
import GF.UseGrammar.Linear (unoptimizeCanonMod) ----
|
||||||
|
|
||||||
import qualified GF.Canon.CanonToGrammar as CG
|
import qualified GF.Canon.CanonToGrammar as CG
|
||||||
|
|
||||||
@@ -165,7 +166,7 @@ extendCompileEnvCanon ((k,s,c),fts) cgr ft =
|
|||||||
type TimedCompileEnv = (CompileEnv,[(FilePath,ModTime)])
|
type TimedCompileEnv = (CompileEnv,[(FilePath,ModTime)])
|
||||||
|
|
||||||
compileOne :: Options -> TimedCompileEnv -> FullPath -> IOE TimedCompileEnv
|
compileOne :: Options -> TimedCompileEnv -> FullPath -> IOE TimedCompileEnv
|
||||||
compileOne opts env@((_,srcgr,_),_) file = do
|
compileOne opts env@((_,srcgr,cancgr0),_) file = do
|
||||||
|
|
||||||
let putp = putPointE opts
|
let putp = putPointE opts
|
||||||
let putpp = putPointEsil opts
|
let putpp = putPointEsil opts
|
||||||
@@ -189,7 +190,8 @@ compileOne opts env@((_,srcgr,_),_) file = do
|
|||||||
-- for canonical gf, read the file and update environment, also source env
|
-- for canonical gf, read the file and update environment, also source env
|
||||||
"gfc" -> do
|
"gfc" -> do
|
||||||
cm <- putp ("+ reading" +++ file) $ getCanonModule file
|
cm <- putp ("+ reading" +++ file) $ getCanonModule file
|
||||||
sm <- ioeErr $ CG.canon2sourceModule $ unSubelimModule cm
|
let cancgr = updateMGrammar (MGrammar [cm]) cancgr0
|
||||||
|
sm <- ioeErr $ CG.canon2sourceModule $ unoptimizeCanonMod cancgr $ unSubelimModule cm
|
||||||
ft <- getReadTimes file
|
ft <- getReadTimes file
|
||||||
extendCompileEnv env (sm, cm) ft
|
extendCompileEnv env (sm, cm) ft
|
||||||
|
|
||||||
|
|||||||
@@ -121,7 +121,10 @@ expandLinTables gr t = case t of
|
|||||||
-- Do this for an entire grammar:
|
-- Do this for an entire grammar:
|
||||||
|
|
||||||
unoptimizeCanon :: CanonGrammar -> CanonGrammar
|
unoptimizeCanon :: CanonGrammar -> CanonGrammar
|
||||||
unoptimizeCanon g@(M.MGrammar ms) = M.MGrammar $ map convMod ms where
|
unoptimizeCanon g@(M.MGrammar ms) = M.MGrammar $ map (unoptimizeCanonMod g) ms
|
||||||
|
|
||||||
|
unoptimizeCanonMod :: CanonGrammar -> CanonModule -> CanonModule
|
||||||
|
unoptimizeCanonMod g = convMod where
|
||||||
convMod (m, M.ModMod (M.Module (M.MTConcrete a) x flags me os defs)) =
|
convMod (m, M.ModMod (M.Module (M.MTConcrete a) x flags me os defs)) =
|
||||||
(m, M.ModMod (M.Module (M.MTConcrete a) x flags me os (mapTree convDef defs)))
|
(m, M.ModMod (M.Module (M.MTConcrete a) x flags me os (mapTree convDef defs)))
|
||||||
convMod mm = mm
|
convMod mm = mm
|
||||||
|
|||||||
Reference in New Issue
Block a user