example | ||
test | ||
.gitignore | ||
generator.go | ||
go.mod | ||
lexer.go | ||
License.md | ||
parser.go | ||
plateSearch.go | ||
Readme.md | ||
TDL_test.go | ||
TDL.go | ||
types.go |
TDL
TDL is a language for weightlifting schedules and a corresponding generator. From a file with descriptions of sets and percentages the program computes concrete training days and plates needed.
You can find releases at releases.gutmet.org or build the program with 'go build'.
Usage
$ TDL yourSchedule.tdl
You find the output in yourSchedule-TIMESTAMP.txt
See the examples folder for inspiration to write your schedule file.
Grammar
For completeness' sake, the grammar in EBNF looks like this. You don't have to read this to use the program!
TDL = Lifts [Plates] [SetTemplates] TrainingDays EOI .
Lifts = "Lifts:" Lift {"," Lift} .
Lift = LiftIdent "Max:" Weight "Increment:" Weight [ "%" ] [ "Bar:" Weight ] .
Plates = "Plates:" Plate { "," Plate } .
Plate = Weight 'x' Amount .
SetTemplates = "SetTemplates:" "-" SetTemplate { "-" SetTemplate } .
SetTemplate = SetTemplateIdent SetTemplateItem { ',' SetTemplateItem } .
SetTemplateItem = SetTemplateIdent | Set [ 'x' Amount ] .
Set = Amount "reps" '@' Percentage '%' [ '+' Weight ] [ 'x' Amount ] [ Notice ] .
TrainingDays = "TrainingDays:" "-" TrainingDay { "-" TrainingDay } .
TrainingDay = TrainingDayItem { TrainingDayItem } .
TrainingDayItem = string | LiftSchedule.
LiftSchedule = LiftIdent ':' SetTemplateItem { ',' SetTemplateItem } [ "increase" [ Weight [ "%" ] ] ] .
Amount = integer .
Percentage = integer|float .
Weight = integer|float .
LiftIdent = ident .
SetTemplateIdent = ident .
Notice = '(' ANY ')' .
Comments can be enclosed in square brackets and are ignored.