summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authoraarne <aarne@chalmers.se>2011-02-25 15:44:25 +0000
committeraarne <aarne@chalmers.se>2011-02-25 15:44:25 +0000
commit77b02544fb91a658346f25019cbf2a21b79f9081 (patch)
tree9f54c2af27a0ee5e328c6984abdaa6ae967009d6 /examples
parent390566b17e69da2045a49e3da1f8debc60d42ccd (diff)
simple grammar for dates
Diffstat (limited to 'examples')
-rw-r--r--examples/dates/Dates.gf32
-rw-r--r--examples/dates/DatesEng.gf66
-rw-r--r--examples/dates/DatesFin.gf78
-rw-r--r--examples/dates/DatesFre.gf73
-rw-r--r--examples/dates/DatesSwe.gf73
5 files changed, 322 insertions, 0 deletions
diff --git a/examples/dates/Dates.gf b/examples/dates/Dates.gf
new file mode 100644
index 000000000..9ac664a1c
--- /dev/null
+++ b/examples/dates/Dates.gf
@@ -0,0 +1,32 @@
+abstract Dates = {
+
+flags startcat = Date ;
+
+cat
+ Date ; Year ; Month ; Day ; Time ; Hour ; Minute ; Weekday ; Ampm ;
+
+fun
+ DFull : Year -> Month -> Day -> Weekday -> Time -> Date ;
+
+ MkYear : Int -> Year ;
+
+ MJan, MFeb, MMar, MApr, MMay, MJun, MJul, MAug, MSep, MOct, MNov, MDec : Month ;
+
+ MkDay : Int -> Day ;
+
+ MkTime : Ampm -> Hour -> Minute -> Time ;
+
+ H01, H02, H03, H04, H05, H06, H07, H08, H09, H10, H11, H12 : Hour ;
+
+ MkMinute : Int -> Minute ;
+
+ WSun, WMon, WTue, WWed, WThu, WFri, WSat : Weekday ;
+
+ AM, PM : Ampm ;
+
+-- noncanonical ways
+
+ DToday, DYesterday, DTomorrow : Time -> Date ;
+
+}
+
diff --git a/examples/dates/DatesEng.gf b/examples/dates/DatesEng.gf
new file mode 100644
index 000000000..2113c11dd
--- /dev/null
+++ b/examples/dates/DatesEng.gf
@@ -0,0 +1,66 @@
+concrete DatesEng of Dates = open Prelude in {
+
+lincat
+ Date, Year, Month, Day, Time, Hour, Minute, Weekday, Ampm = Str ;
+
+lin
+ DFull y m d w t = opts (opts "on" ++ w ++ comma) ++ opts (bothWays m d ++ opts comma) ++ opts (y ++ opts comma) ++ opts ("at" ++ t) ;
+
+ MkYear i = i.s ;
+
+ MJan = "January" ;
+ MFeb = "February" ;
+ MMar = "March" ;
+ MApr = "April" ;
+ MMay = "May" ;
+ MJun = "June" ;
+ MJul = "July" ;
+ MAug = "August" ;
+ MSep = "September" ;
+ MOct = "October" ;
+ MNov = "November" ;
+ MDec = "December" ;
+
+ MkDay i = i.s ;
+
+ MkTime ap h m = h ++ opts (dot ++ m) ++ opts ap ;
+
+ H01 = "1" ;
+ H02 = "2" ;
+ H03 = "3" ;
+ H04 = "4" ;
+ H05 = "5" ;
+ H06 = "6" ;
+ H07 = "7" ;
+ H08 = "8" ;
+ H09 = "9" ;
+ H10 = "10" ;
+ H11 = "11" ;
+ H12 = "12" ;
+
+ MkMinute i = i.s ;
+
+ WSun = "Sunday" ;
+ WMon = "Monday" ;
+ WTue = "Tuesday" ;
+ WWed = "Wednesday" ;
+ WThu = "Thursday" ;
+ WFri = "Friday" ;
+ WSat = "Saturday" ;
+
+ AM = "a.m." ;
+ PM = "p.m." ;
+
+oper
+ opts = optStr ;
+ dot = "." ;
+ comma = "," ;
+
+lin
+ DToday t = "today" ++ opts ("at" ++ t) ;
+ DTomorrow t = "tomorrow" ++ opts ("at" ++ t) ;
+ DYesterday t = "yesterday" ++ opts ("at" ++ t) ;
+
+
+}
+
diff --git a/examples/dates/DatesFin.gf b/examples/dates/DatesFin.gf
new file mode 100644
index 000000000..ce37e577a
--- /dev/null
+++ b/examples/dates/DatesFin.gf
@@ -0,0 +1,78 @@
+concrete DatesFin of Dates = open Prelude in {
+
+flags coding = utf8 ;
+
+lincat
+ Date, Year, Day, Time, Minute = Str ;
+ Month, Weekday = Case => Str ;
+ Hour = PAMPM => Str ;
+ Ampm = {s : Str ; p : PAMPM} ;
+
+lin
+ DFull y m d w t = (opts (w ! Nom) | (w ! Ess)) ++ opts (d ++ dot ++ (m ! Part)) ++ opts (opts "vuonna" ++ y) ++ opts (klo ++ t) ;
+
+ MkYear i = i.s ;
+
+ MJan = mkNoun "tammikuu" ;
+ MFeb = mkNoun "helmikuu" ;
+ MMar = mkNoun "maaliskuu" ;
+ MApr = mkNoun "huhtikuu" ;
+ MMay = mkNoun "toukokuu" ;
+ MJun = mkNoun "kesäkuu" ;
+ MJul = mkNoun "heinäkuu" ;
+ MAug = mkNoun "elokuu" ;
+ MSep = mkNoun "syyskuu" ;
+ MOct = mkNoun "lokakuu" ;
+ MNov = mkNoun "marraskuu" ;
+ MDec = mkNoun "joulukuu" ;
+
+ MkDay i = i.s ;
+
+ MkTime ap h m = h ! ap.p ++ opts (dot ++ m) ++ ap.s ;
+
+ H01 = ampm "1" "13" ;
+ H02 = ampm "2" "14" ;
+ H03 = ampm "3" "15" ;
+ H04 = ampm "4" "16" ;
+ H05 = ampm "5" "17" ;
+ H06 = ampm "6" "18" ;
+ H07 = ampm "7" "19" ;
+ H08 = ampm "8" "20" ;
+ H09 = ampm "9" "21" ;
+ H10 = ampm "10" "22" ;
+ H11 = ampm "11" "23" ;
+ H12 = ampm "0" "12" ; -- 12.01 a.m. = 0.01 ; 12.01 p.m. = 13.01
+
+ MkMinute i = i.s ;
+
+ WSun = mkNoun "sunnuntai" ;
+ WMon = mkNoun "maanantai" ;
+ WTue = mkNoun "tiistai" ;
+ WWed = mkNoun "keskiviikko" ;
+ WThu = mkNoun "torstai" ;
+ WFri = mkNoun "perjantai" ;
+ WSat = mkNoun "lauantai" ;
+
+ AM = {s = [] ; p = PAM} ;
+ PM = {s = [] ; p = PPM} ;
+
+oper
+ opts = optStr ;
+ dot = "." ;
+ comma = "," ;
+ klo = "klo" | "kello" ;
+
+ ampm : Str -> Str -> PAMPM => Str = \a,p -> table {PAM => a ; PPM => p} ;
+ mkNoun : Str -> Case => Str = \w -> table {Nom => w ; Part => w + "ta" ; Ess => w ++ "na"} ;
+
+param
+ PAMPM = PAM | PPM ;
+ Case = Nom | Part | Ess ;
+
+lin
+ DToday t = "tänään" ++ opts (klo ++ t) ;
+ DTomorrow t = "huomenna" ++ opts (klo ++ t) ;
+ DYesterday t = "eilen" ++ opts (klo ++ t) ;
+
+}
+
diff --git a/examples/dates/DatesFre.gf b/examples/dates/DatesFre.gf
new file mode 100644
index 000000000..7adad70db
--- /dev/null
+++ b/examples/dates/DatesFre.gf
@@ -0,0 +1,73 @@
+concrete DatesFre of Dates = open Prelude in {
+
+flags coding = utf8 ;
+
+lincat
+ Date, Year, Month, Day, Time, Minute, Weekday = Str ; Hour = PAMPM => Str ; Ampm = {s : Str ; p : PAMPM} ;
+
+lin
+ DFull y m d w t = opts w ++ opts ("le" ++ d ++ m) ++ opts (opts "en" ++ y) ++ opts (klo ++ t) ;
+
+ MkYear i = i.s ;
+
+ MJan = "janvier" ;
+ MFeb = "février" ;
+ MMar = "mars" ;
+ MApr = "avril" ;
+ MMay = "mai" ;
+ MJun = "juin" ;
+ MJul = "juillet" ;
+ MAug = "août" ;
+ MSep = "septembre" ;
+ MOct = "octobre" ;
+ MNov = "novembre" ;
+ MDec = "décembre" ;
+
+ MkDay i = i.s ;
+
+ MkTime ap h m = h ! ap.p ++ opts ("h" ++ m) ++ ap.s ;
+
+ H01 = ampm "1" "13" ;
+ H02 = ampm "2" "14" ;
+ H03 = ampm "3" "15" ;
+ H04 = ampm "4" "16" ;
+ H05 = ampm "5" "17" ;
+ H06 = ampm "6" "18" ;
+ H07 = ampm "7" "19" ;
+ H08 = ampm "8" "20" ;
+ H09 = ampm "9" "21" ;
+ H10 = ampm "10" "22" ;
+ H11 = ampm "11" "23" ;
+ H12 = ampm "0" "12" ; -- 12.01 a.m. = 0.01 ; 12.01 p.m. = 13.01
+
+ MkMinute i = i.s ;
+
+ WSun = "dimanche" ;
+ WMon = "lundi" ;
+ WTue = "mardi" ;
+ WWed = "mercredi" ;
+ WThu = "jeudi" ;
+ WFri = "vendredi" ;
+ WSat = "samedi" ;
+
+ AM = {s = [] ; p = PAM} ;
+ PM = {s = [] ; p = PPM} ;
+
+oper
+ opts = optStr ;
+ dot = "." ;
+ comma = "," ;
+ klo = "à" ;
+
+ ampm : Str -> Str -> PAMPM => Str = \a,p -> table {PAM => a ; PPM => p} ;
+
+param
+ PAMPM = PAM | PPM ;
+
+lin
+ DToday t = "aujourd'hui" ++ opts (klo ++ t) ;
+ DTomorrow t = "demain" ++ opts (klo ++ t) ;
+ DYesterday t = "hier" ++ opts (klo ++ t) ;
+
+}
+
diff --git a/examples/dates/DatesSwe.gf b/examples/dates/DatesSwe.gf
new file mode 100644
index 000000000..d40ca201d
--- /dev/null
+++ b/examples/dates/DatesSwe.gf
@@ -0,0 +1,73 @@
+concrete DatesSwe of Dates = open Prelude in {
+
+flags coding = utf8 ;
+
+lincat
+ Date, Year, Month, Day, Time, Minute, Weekday = Str ; Hour = PAMPM => Str ; Ampm = {s : Str ; p : PAMPM} ;
+
+lin
+ DFull y m d w t = opts (opts "på" ++ w) ++ opts ("den" ++ d ++ m) ++ opts (opts "år" ++ y) ++ opts (klo ++ t) ;
+
+ MkYear i = i.s ;
+
+ MJan = "januari" ;
+ MFeb = "februari" ;
+ MMar = "mars" ;
+ MApr = "april" ;
+ MMay = "maj" ;
+ MJun = "juni" ;
+ MJul = "juli" ;
+ MAug = "augusti" ;
+ MSep = "september" ;
+ MOct = "oktober" ;
+ MNov = "november" ;
+ MDec = "december" ;
+
+ MkDay i = i.s ;
+
+ MkTime ap h m = h ! ap.p ++ opts (dot ++ m) ++ ap.s ;
+
+ H01 = ampm "1" "13" ;
+ H02 = ampm "2" "14" ;
+ H03 = ampm "3" "15" ;
+ H04 = ampm "4" "16" ;
+ H05 = ampm "5" "17" ;
+ H06 = ampm "6" "18" ;
+ H07 = ampm "7" "19" ;
+ H08 = ampm "8" "20" ;
+ H09 = ampm "9" "21" ;
+ H10 = ampm "10" "22" ;
+ H11 = ampm "11" "23" ;
+ H12 = ampm "0" "12" ; -- 12.01 a.m. = 0.01 ; 12.01 p.m. = 13.01
+
+ MkMinute i = i.s ;
+
+ WSun = "söndag" ;
+ WMon = "måndag" ;
+ WTue = "tisdag" ;
+ WWed = "onsdag" ;
+ WThu = "torsdag" ;
+ WFri = "fredag" ;
+ WSat = "lördag" ;
+
+ AM = {s = [] ; p = PAM} ;
+ PM = {s = [] ; p = PPM} ;
+
+oper
+ opts = optStr ;
+ dot = "." ;
+ comma = "," ;
+ klo = "kl." | "klockan" ;
+
+ ampm : Str -> Str -> PAMPM => Str = \a,p -> table {PAM => a ; PPM => p} ;
+
+param
+ PAMPM = PAM | PPM ;
+
+lin
+ DToday t = "idag" ++ opts (klo ++ t) ;
+ DTomorrow t = "imorgon" ++ opts (klo ++ t) ;
+ DYesterday t = "igår" ++ opts (klo ++ t) ;
+
+}
+