summaryrefslogtreecommitdiff
path: root/examples/sammie/SammieEng1.gf
diff options
context:
space:
mode:
authoraarne <aarne@chalmers.se>2009-10-08 12:40:47 +0000
committeraarne <aarne@chalmers.se>2009-10-08 12:40:47 +0000
commitffb5fdcd2580b00203456636be887adcc9759bda (patch)
tree2b9884e516a91034f43fb76de88b6d3575ba9bbf /examples/sammie/SammieEng1.gf
parentdf7f4ab34df6609d8af73d638832b735c2072937 (diff)
Sammie grammars added to examples
Diffstat (limited to 'examples/sammie/SammieEng1.gf')
-rw-r--r--examples/sammie/SammieEng1.gf235
1 files changed, 235 insertions, 0 deletions
diff --git a/examples/sammie/SammieEng1.gf b/examples/sammie/SammieEng1.gf
new file mode 100644
index 000000000..adc541e79
--- /dev/null
+++ b/examples/sammie/SammieEng1.gf
@@ -0,0 +1,235 @@
+
+concrete SammieEng1 of Sammie = {
+
+flags startcat=Action;
+
+param SetForm = Any | All;
+
+oper Set = { s : SetForm => Str } ;
+
+oper mkSet : Str -> Set = \x -> { s = table {
+ Any => variants { "a"; "some"; "any" } ++ x ;
+ All => variants { "all"; ["all the"] } ++ (x + "s")
+ } } ;
+
+oper mkSetAdj : Str -> Str -> Set = \x -> \adj -> { s = table {
+ Any => variants { "a"; "some"; "any" } ++ adj ++ x ;
+ All => variants { "all"; ["all the"] } ++ adj ++ (x + "s")
+ } } ;
+
+oper optional : Str -> Str = \s -> variants { []; s } ;
+
+oper song = variants {"song"; "track"} ;
+oper album = variants {"album";"record";"cd"} ;
+
+oper command : Str -> { s : Str } =
+ \s -> { s = variants {s; "please" ++ s; s ++ "please" } } ;
+
+
+lincat
+ PlaylistSet, ArtistSet, AlbumSet, SongSet = Set ;
+
+
+lin
+ -- Action
+
+ add_song_to_playlist l o =
+ command ("add" ++ o.s ++ "to" ++ l.s) ;
+
+ -- create a new playlist
+ create =
+ command ["create a new playlist"] ;
+
+ dialog_pause =
+ command (variants {
+ ["pause the dialog"];
+ ["be"] ++ variants { "quiet";"silent" };
+ ["shut"] ++ variants {[]; ["the hell"]; ["the fuck"]} ++ "up";
+ ["shut your mouth"];
+ ["put a sock in it"];
+ });
+
+ go_back_in_display_history =
+ command (variants { ["back"]; ["go back"] }) ;
+
+ help =
+ command (variants { ["help"]; ["help me"]; ["give me help"] }) ;
+
+ -- tell me
+ identify x =
+ command (optional ["tell me"] ++ x.s) ;
+
+-- identify_songlist_of_album x = command (x.s) ;
+
+ make_completion x = command (x.s) ;
+
+ pause =
+ command "pause" ;
+
+ play x =
+ command ("play" ++ x.s) ;
+
+ please_repeat =
+ command (variants {
+ ["repeat that"];
+ ["what"];
+ ["pardon"];
+ ["pardon me"];
+ ["what did you say"];
+ ["what was that"]
+ }) ;
+
+ -- I don't care
+ reject_any_constraint_determination =
+ command (variants {
+ ["whatever"];
+ variants {["do i look like i"];["i don't"]}
+ ++ variants {["give a"] ++ variants {"shit";"fuck";["rat's ass"]};
+ ["care"]}
+ ++ optional ["about that"];
+ ["i couldn't care less"];
+ ["see if i care"]
+ }) ;
+
+ remove l o =
+ command ("remove" ++ o.s ++ "from" ++ l.s) ;
+
+ resume =
+ command ("resume") ;
+
+ -- show me
+
+ show x =
+ command (["show me"] ++ x.s) ;
+
+ show_main_menu =
+ command (variants {
+ ["show me the main menu"];
+ ["go to the main menu"];
+ ["back to the main menu"];
+ }) ;
+
+ skip_backward =
+ command (variants {"play"; ["go to"]} ++ ["the previous"] ++ song) ;
+
+ skip_forward =
+ command (variants {"play"; ["go to"]} ++ ["the next"] ++ song) ;
+
+ stop = command (variants { "stop" }) ;
+
+ -- ToIdentify
+
+ artist_of_album album =
+ { s = "who" ++ variants {"made";"sings";"plays";"recorded"} ++ album.s } ;
+
+ artist_of_song song =
+ { s = "who" ++ variants {"made";"sings";"plays";"recorded"} ++ song.s } ;
+
+ currently_playing_object =
+ { s = variants {
+ ["what is this"] ++ optional song ++ ["called"];
+ ["what is the name of this"] ++ optional song;
+ } } ;
+
+ resource_by_type x = { s = x.s } ;
+
+ -- Object
+
+ one_song x = { s = x.s } ;
+ any_song x = { s = x.s ! Any} ;
+ all_songs x = { s = x.s ! All } ;
+
+ one_album x = { s = x.s } ;
+ any_album x = { s = x.s ! Any} ;
+ all_albums x = { s = x.s ! All } ;
+
+ one_playlist x = { s = x.s } ;
+ any_playlist x = { s = x.s ! Any} ;
+ all_playlists x = { s = x.s ! All } ;
+
+
+ -- PlaylistSet
+
+ playlists_all = mkSet "playlist" ;
+ playlists_by_genre genre = mkSetAdj "playlist" (genre.s) ;
+
+ -- Playlist
+
+ playlist_this = { s = ["this playlist"] } ;
+ playlist_number x = { s = "playlist" ++ x.s } ;
+ playlist_name x = { s = variants { ["the playlist"] ++ x.s; "the" ++ x.s ++ "playlist" }};
+
+ -- ArtistSet
+
+ artists_all = mkSet "artist" ;
+
+ -- Artist
+
+ artist_this = { s = ["this artist"] } ;
+ artist_name x = { s = optional ["the artist"] ++ x.s } ;
+
+ -- AlbumSet
+
+ albums_all = mkSet album ;
+ albums_by_artist artist = { s = \\n => (mkSet album).s ! n ++ "by" ++ artist.s };
+ albums_by_genre genre = mkSetAdj album (genre.s) ;
+ albums_by_artist_genre artist genre = { s = \\n => (mkSetAdj album (genre.s)).s ! n ++ "by" ++ artist.s };
+
+ -- Album
+
+ album_this = { s = ["this"] ++ album } ;
+ album_number n = { s = album ++ ["number"] ++ n.s } ;
+ album_name name = { s = optional (["the"] ++ album) ++ name.s } ;
+ album_name_artist name artist = { s = optional (["the"] ++ album) ++ name.s ++ "by" ++ artist.s } ;
+
+ -- SongSet
+
+ songs_all = mkSet song ;
+ songs_by_artist artist = { s = \\n => (mkSet song).s ! n ++ "by" ++ artist.s };
+ songs_by_genre genre = mkSetAdj song (genre.s) ;
+ songs_by_album album = { s = \\n => (mkSet song).s ! n ++ "from" ++ album.s } ;
+ songs_by_artist_genre artist genre = { s = \\n => (mkSetAdj song (genre.s)).s ! n ++ "by" ++ artist.s };
+
+ -- Song
+
+ song_this = { s = "this" ++ song } ;
+ song_name x = { s = optional ("the" ++ song) ++ x.s } ;
+ song_name_artist name artist = { s = optional ("the" ++ song) ++ name.s ++ "by" ++ artist.s } ;
+
+ -- Ordinal
+
+-- num_1 = { s = "one" } ;
+ num_2 = { s = "two" } ;
+-- num_3 = { s = "three" } ;
+
+
+
+ -- Music database
+
+ -- PlaylistName
+
+ CoolHits = { s = ["cool hits"] };
+-- Romantik = { s = ["romance"] };
+
+ -- Artist
+
+-- Falco = { s = ["Falco"] };
+-- TheBeatles = { s = ["The Beatles"] };
+ U2 = { s = "u2" } ;
+
+ -- Genre
+
+-- Pop = { s = ["pop"] };
+ Rock = { s = ["rock"] };
+
+ -- AlbumName
+
+ HowToDismantleAnAtomicBomb = { s = ["how to dismantle an atomic bomb"] };
+
+ -- SongName
+
+-- AHardDaysNight = { s = ["a hard day's night"] };
+-- LetItBe = { s = ["let it be"] };
+ Vertigo = { s = "vertigo" } ;
+
+} \ No newline at end of file