Fix bug in dynamic parameter handling, compile FoodsBul successfully

This commit is contained in:
John J. Camilleri
2021-02-03 15:41:27 +01:00
parent 42b9e7036e
commit 34f0fc0ba7
6 changed files with 33 additions and 21 deletions

View File

@@ -1,7 +1,7 @@
-- (c) 2009 Krasimir Angelov under LGPL
concrete FoodsBul of Foods = {
flags
coding = utf8;
@@ -18,12 +18,12 @@ concrete FoodsBul of Foods = {
lin
Pred item qual = item.s ++ case item.a of {ASg _ => "е"; APl => "са"} ++ qual.s ! item.a ;
This kind = {s=case kind.g of {Masc=>"този"; Fem=>"тази"; Neutr=>"това" } ++ kind.s ! Sg; a=ASg kind.g} ;
That kind = {s=case kind.g of {Masc=>"онзи"; Fem=>"онази"; Neutr=>"онова"} ++ kind.s ! Sg; a=ASg kind.g} ;
These kind = {s="тези" ++ kind.s ! Pl; a=APl} ;
Those kind = {s="онези" ++ kind.s ! Pl; a=APl} ;
Mod qual kind = {s=\\n => qual.s ! (case n of {Sg => ASg kind.g; Pl => APl}) ++ kind.s ! n; g=kind.g} ;
Wine = {s = table {Sg => "вино"; Pl => "вина"}; g = Neutr};
@@ -35,9 +35,9 @@ concrete FoodsBul of Foods = {
Fresh = {s = table {ASg Masc => "свеж"; ASg Fem => "свежа"; ASg Neutr => "свежо"; APl => "свежи"}};
Warm = {s = table {ASg Masc => "горещ"; ASg Fem => "гореща"; ASg Neutr => "горещо"; APl => "горещи"}};
Italian = {s = table {ASg Masc => "италиански"; ASg Fem => "италианска"; ASg Neutr => "италианско"; APl => "италиански"}};
Italian = {s = table {ASg Masc => "италиански"; ASg Fem => "италианска"; ASg Neutr => "италианско"; APl => "италиански"}};
Expensive = {s = table {ASg Masc => "скъп"; ASg Fem => "скъпа"; ASg Neutr => "скъпо"; APl => "скъпи"}};
Delicious = {s = table {ASg Masc => "превъзходен"; ASg Fem => "превъзходна"; ASg Neutr => "превъзходно"; APl => "превъзходни"}};
Boring = {s = table {ASg Masc => "еднообразен"; ASg Fem => "еднообразна"; ASg Neutr => "еднообразно"; APl => "еднообразни"}};
}

View File

@@ -1,5 +1,5 @@
Params: FtoS f1
ParamsCnc: PR R1 Q2
ParamsCnc: PR R1 Q1
Params: FtoS f2
ParamsCnc: PR R2 _

View File

@@ -2,18 +2,19 @@ concrete ParamsCnc of Params = {
param
R = R1 | R2 ;
P = PR R Q | PP ;
Q = Q1 | Q2 ;
Q = Q3 | Q2 | Q1 ;
lincat
S = Str ;
F = { r : R } ;
lin
f1 = { r = R1 } ;
f2 = { r = R2 } ;
FtoS f = tbl ! PR f.r Q2 ;
FtoS f = tbl ! PR f.r Q1 ;
oper
tbl = table {
PR R1 Q1 => "PR R1 Q1" ;
PR R1 Q2 => "PR R1 Q2" ;
PR R1 Q1 => "PR R1 Q1" ;
PR R1 Q3 => "PR R1 Q3" ;
PR R2 _ => "PR R2 _" ;
PP => "PP"
} ;

View File

@@ -17,7 +17,7 @@ main :: IO ()
main = do
doGrammar "Params"
doGrammar "Walking"
-- doGrammar "Foods"
doGrammar "Foods"
doGrammar :: String -> IO ()
doGrammar gname = do