diff --git a/grammars/timetable/Timetable.gf b/grammars/timetable/Timetable.gf new file mode 100644 index 000000000..8eab2600b --- /dev/null +++ b/grammars/timetable/Timetable.gf @@ -0,0 +1,31 @@ +abstract Timetable = { + cat + Table ; + TrainList CityList ; + City ; + CityList ; + Train CityList ; + Stop ; + Time ; + Number ; + + fun + MkTable : (cs : CityList) -> TrainList cs -> Table ; + NilTrain : (cs : CityList) -> TrainList cs ; + ConsTrain : + (cs : CityList) -> Number -> Train cs -> TrainList cs -> TrainList cs ; + OneCity : City -> CityList ; + ConsCity : City -> CityList -> CityList ; + + StopTime : Time -> Stop ; + NoStop : Stop ; + + LocTrain : (c : City) -> Stop -> Train (OneCity c) ; + CityTrain : + (c : City) -> Stop -> (cs : CityList) -> + Train cs -> Train (ConsCity c cs) ; + + T : Int -> Time ; + N : Int -> Number ; + C : String -> City ; +} diff --git a/grammars/timetable/TimetableEng.gf b/grammars/timetable/TimetableEng.gf new file mode 100644 index 000000000..2800ce010 --- /dev/null +++ b/grammars/timetable/TimetableEng.gf @@ -0,0 +1,22 @@ +--# -path=.:../prelude + +concrete TimetableEng of Timetable = open Prelude in { + + lin + MkTable cs ts = ss (["trains on the line from"] ++ cs.s ++ ":" ++ ts.s) ; + NilTrain _ = ss [] ; + ConsTrain cs n t ts = ss (n.s ++ ":" ++ t.s ++ ";") ; + OneCity c = c ; + ConsCity c cs = ss (c.s ++ "to" ++ cs.s) ; + + StopTime t = t ; + NoStop = ss ["no stop"] ; + + LocTrain c s = cc2 c s ; + CityTrain c s cs t = ss (c.s ++ s.s ++ "," ++ t.s) ; + + T i = prefixSS "at" i ; + N n = prefixSS "train" n ; + C s = s ; + +} diff --git a/grammars/timetable/TimetableHTML.gf b/grammars/timetable/TimetableHTML.gf new file mode 100644 index 000000000..41b7c39a0 --- /dev/null +++ b/grammars/timetable/TimetableHTML.gf @@ -0,0 +1,24 @@ +--# -path=.:../prelude + +concrete TimetableHTML of Timetable = open Prelude in { + + lin + MkTable cs ts = + ss ("
| "++ cs.s ++ |