From 2cc5040a4650e924b956d5dd74fa8cc8984ccf3f Mon Sep 17 00:00:00 2001 From: Arianna Masciolini Date: Mon, 4 May 2026 13:09:20 +0200 Subject: [PATCH] lecture 6 code --- {foods => lectures/lecture06}/Foods.gf | 5 ++-- lectures/lecture06/Foods.pgf | Bin 0 -> 11354 bytes lectures/lecture06/FoodsEng.gf | 31 +++++++++++++++++++++++++ lectures/lecture06/FoodsIta.gf | 31 +++++++++++++++++++++++++ lectures/lecture06/comments.py | 19 +++++++++++++++ lectures/lecture06/data.csv | 4 ++++ 6 files changed, 87 insertions(+), 3 deletions(-) rename {foods => lectures/lecture06}/Foods.gf (86%) create mode 100644 lectures/lecture06/Foods.pgf create mode 100644 lectures/lecture06/FoodsEng.gf create mode 100644 lectures/lecture06/FoodsIta.gf create mode 100644 lectures/lecture06/comments.py create mode 100644 lectures/lecture06/data.csv diff --git a/foods/Foods.gf b/lectures/lecture06/Foods.gf similarity index 86% rename from foods/Foods.gf rename to lectures/lecture06/Foods.gf index 5b057d3..7388fd6 100644 --- a/foods/Foods.gf +++ b/lectures/lecture06/Foods.gf @@ -20,8 +20,7 @@ abstract Foods = { Mod : Quality -> Kind -> Kind ; -- (Italian) (pizza) Very : Quality -> Quality ; -- very (Italian) - Wine, Cheese, Fish, Pizza : Kind ; + Wine, SparklingWine, Cheese, Fish, Pizza : Kind ; - Fresh, Warm, Italian, - Expensive, Delicious, Boring : Quality ; + Fresh, Warm, Italian, Expensive, Delicious, Boring : Quality ; } diff --git a/lectures/lecture06/Foods.pgf b/lectures/lecture06/Foods.pgf new file mode 100644 index 0000000000000000000000000000000000000000..8383343963b8c2156fd96d83753e272049a652f5 GIT binary patch literal 11354 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 literal 0 HcmV?d00001 diff --git a/lectures/lecture06/FoodsEng.gf b/lectures/lecture06/FoodsEng.gf new file mode 100644 index 0000000..0cab403 --- /dev/null +++ b/lectures/lecture06/FoodsEng.gf @@ -0,0 +1,31 @@ +concrete FoodsEng of Foods = open ParadigmsEng, SyntaxEng, LexiconEng in { + lincat + Quality = AP; + Kind = CN; + Item = NP ; + Comment = S ; + + lin + Pred item quality = mkS presentTense positivePol (mkCl item quality); + PredNeg item quality = mkS presentTense negativePol (mkCl item quality); + That kind = mkNP that_Det kind ; + Those kind = mkNP those_Det kind ; + These kind = mkNP these_Det kind ; + This kind = mkNP this_Det kind ; + Mod quality kind = mkCN quality kind ; + Very quality = mkAP very_AdA quality ; + + Wine = mkCN wine_N; + SparklingWine = mkCN (mkA "sparkling") wine_N ; + Cheese = mkCN cheese_N ; + Fish = mkCN fish_N ; + Pizza = mkCN (mkN "pizza") ; + + Fresh = mkAP (mkA "fresh"); + Warm = mkAP warm_A; + Italian = mkAP (mkA "Italian"); + Expensive = mkAP (mkA "expensive"); + Delicious = mkAP (mkA "delicious"); + Boring = mkAP (mkA "boring"); + +} \ No newline at end of file diff --git a/lectures/lecture06/FoodsIta.gf b/lectures/lecture06/FoodsIta.gf new file mode 100644 index 0000000..1be7b22 --- /dev/null +++ b/lectures/lecture06/FoodsIta.gf @@ -0,0 +1,31 @@ +concrete FoodsIta of Foods = open ParadigmsIta, SyntaxIta, LexiconIta in { + lincat + Quality = AP; + Kind = CN; + Item = NP ; + Comment = S ; + + lin + Pred item quality = mkS presentTense positivePol (mkCl item quality); + PredNeg item quality = mkS presentTense negativePol (mkCl item quality); + That kind = mkNP that_Det kind ; + Those kind = mkNP those_Det kind ; + These kind = mkNP these_Det kind ; + This kind = mkNP this_Det kind ; + Mod quality kind = mkCN quality kind ; + Very quality = mkAP very_AdA quality ; + + Wine = mkCN wine_N; + SparklingWine = mkCN (mkA "effervescente") wine_N ; + Cheese = mkCN cheese_N ; + Fish = mkCN fish_N ; + Pizza = mkCN (mkN "pizza") ; + + Fresh = mkAP (mkA "fresco"); + Warm = mkAP warm_A; + Italian = mkAP (mkA "Italiano"); + Expensive = mkAP (mkA "caro"); + Delicious = mkAP (mkA "delizioso"); + Boring = mkAP (mkA "noioso"); + +} \ No newline at end of file diff --git a/lectures/lecture06/comments.py b/lectures/lecture06/comments.py new file mode 100644 index 0000000..a31d8a4 --- /dev/null +++ b/lectures/lecture06/comments.py @@ -0,0 +1,19 @@ +import pgf + +grammar = pgf.readPGF("Foods.pgf") +parse_lang = grammar.languages["FoodsEng"] + +with open("data.csv") as data: + lines = data.readlines() + +for line in lines: + [polarity, kind, quality] = line.split(",") + k = [e for (_,e) in parse_lang.parse(kind, cat=pgf.readType("Kind"))][0] + q = [e for (_,e) in parse_lang.parse(quality, cat=pgf.readType("Quality"))][0] + expr_string = "{} (This ({})) ({})".format("Pred" if polarity == "+" else "PredNeg", k, q) + print(expr_string) + expr = pgf.readExpr(expr_string) + + for lin_lang in grammar.languages.values(): + print(lin_lang.linearize(expr)) + print() \ No newline at end of file diff --git a/lectures/lecture06/data.csv b/lectures/lecture06/data.csv new file mode 100644 index 0000000..f4ab773 --- /dev/null +++ b/lectures/lecture06/data.csv @@ -0,0 +1,4 @@ ++,boring cheese,expensive ++,expensive wine,very boring +-,pizza,Italian ++,fish,delicious \ No newline at end of file