mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 04:59:31 -06:00
simple grammar for dates
This commit is contained in:
32
examples/dates/Dates.gf
Normal file
32
examples/dates/Dates.gf
Normal file
@@ -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 ;
|
||||
|
||||
}
|
||||
|
||||
66
examples/dates/DatesEng.gf
Normal file
66
examples/dates/DatesEng.gf
Normal file
@@ -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) ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
78
examples/dates/DatesFin.gf
Normal file
78
examples/dates/DatesFin.gf
Normal file
@@ -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) ;
|
||||
|
||||
}
|
||||
|
||||
73
examples/dates/DatesFre.gf
Normal file
73
examples/dates/DatesFre.gf
Normal file
@@ -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) ;
|
||||
|
||||
}
|
||||
|
||||
73
examples/dates/DatesSwe.gf
Normal file
73
examples/dates/DatesSwe.gf
Normal file
@@ -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) ;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user