diff options
| author | aarne <aarne@cs.chalmers.se> | 2008-06-17 13:16:15 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2008-06-17 13:16:15 +0000 |
| commit | 23b8136af27b0baaa8fcb5272a613d5f2ee447fa (patch) | |
| tree | 2e7cd2930b7e8b6b0d911c00ec2d279b882f4893 /examples-3.0/tutorial/smart/SmartFre.gf | |
| parent | 7c097669d2c3934622c57f6e2f4ddee8826953d3 (diff) | |
started examples-3.0 with examples that are tested to work
Diffstat (limited to 'examples-3.0/tutorial/smart/SmartFre.gf')
| -rw-r--r-- | examples-3.0/tutorial/smart/SmartFre.gf | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/examples-3.0/tutorial/smart/SmartFre.gf b/examples-3.0/tutorial/smart/SmartFre.gf new file mode 100644 index 000000000..95b219b60 --- /dev/null +++ b/examples-3.0/tutorial/smart/SmartFre.gf @@ -0,0 +1,95 @@ +--# -path=.:prelude + +concrete SmartFre of Smart = open Prelude in { + +-- grammar Toy1 from the Regulus book + +flags startcat = Utterance ; + +param + Number = Sg | Pl ; + Gender = Masc | Fem ; + VForm = VInf | VPart Gender Number ; + +lincat + Utterance = SS ; + Command = SS ; + Question = SS ; + Kind = {s : Number => Str ; g : Gender} ; + Action = {s : VForm => Str} ; + Device = {s : Str ; g : Gender ; n : Number} ; + Location = {s : Number => Str ; g : Gender} ; + +lin + UCommand c = c ; + UQuestion q = q ; + + CAction _ act dev = ss (act.s ! VInf ++ dev.s) ; + QAction _ act st dev = + ss (dev.s ++ est dev.g dev.n ++ act.s ! VPart dev.g dev.n ++ st.s) ; + + DKindOne k = { + s = defArt k.g ++ k.s ! Sg ; + g = k.g ; + n = Sg + } ; + DKindMany k = { + s = "les" ++ k.s ! Pl ; + g = k.g ; + n = Pl + } ; + DLoc _ dev loc = { + s = dev.s ++ "dans" ++ defArt loc.g ++ loc.s ! Sg ; + g = dev.g ; + n = dev.n + } ; + + light = mkNoun "lampe" Fem ; + fan = mkNoun "ventilateur" Masc ; + + switchOn _ _ = mkVerb "allumer" "allumé" ; + switchOff _ _ = mkVerb "éteindre" "éteint" ; + + dim _ _ = mkVerb "baisser" "baissé" ; + + kitchen = mkNoun "cuisine" Fem ; + livingRoom = mkNoun "salon" Masc ; + +oper + mkNoun : Str -> Gender -> {s : Number => Str ; g : Gender} = \dog,g -> { + s = table { + Sg => dog ; + Pl => dog + "s" + } ; + g = g + } ; + + mkVerb : (_,_ : Str) -> {s : VForm => Str} = \venir,venu -> { + s = table { + VInf => venir ; + VPart Masc Sg => venu ; + VPart Masc Pl => venu + "s" ; + VPart Fem Sg => venu + "e" ; + VPart Fem Pl => venu + "es" + } + } ; + + est : Gender -> Number -> Str = \g,n -> case <g,n> of { + <Masc,Sg> => "est-il" ; + <Fem, Sg> => "est-elle" ; + <Masc,Pl> => "sont-ils" ; + <Fem, Pl> => "sont-elles" + } ; + + defArt : Gender -> Str = \g -> case g of {Masc => "le" ; Fem => "la"} ; + +lin + switchable_light = ss [] ; + switchable_fan = ss [] ; + dimmable_light = ss [] ; + + statelike_switchOn _ _ = ss [] ; + statelike_switchOff _ _ = ss [] ; + +} + |
