summaryrefslogtreecommitdiff
path: root/examples/dates/DatesFin.gf
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/dates/DatesFin.gf
parent390566b17e69da2045a49e3da1f8debc60d42ccd (diff)
simple grammar for dates
Diffstat (limited to 'examples/dates/DatesFin.gf')
-rw-r--r--examples/dates/DatesFin.gf78
1 files changed, 78 insertions, 0 deletions
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) ;
+
+}
+