Table of Contents

TDL

TDL is a Training Description Language for weightlifting schedules.
You write a simple .tdl file with your setup and the program computes the
concrete weights and sets for your training days. You can also let
the program print the needed plates for each weight.

Cut to the chase already

Take one of the example .tdl's, move it to the folder that TDL.exe is in and rename it to 'mySchedule.tdl'. Customize it - at least put your maxes in. It's a plain text file, so if you have no other options you can edit it with Notepad.

Double-click on 'TDL.exe'. You might have to by-pass Windows' so-called SmartScreen. There's an option to execute the program anyways under 'more details'.

Find your computed schedule in 'Schedule-TIMESTAMP.md'. When you open
the file, make sure that you are using a monospace font (e.g. Lucida Console)
or else the tables will not be aligned.

The more in-depth description follows.

Motivation

I lift weights on a regular basis and, like most serious lifters, I
do so according to a plan that is based around certain set templates and
weight percentages. Calculating that stuff manually is tedious and error-prone.
Using an Excel/LibreOffice spreadsheet would certainly be possible, but is
a) not necessarily readable, b) cumbersome to set up and c) not easily adaptable
in case your lifting plan changes.

I used a Python script with some clunky .yaml files for this purpose before,
but it was not exactly what I wanted. And it was certainly not usable for
other people (and by that I mean non-Computer-Science people). It took me
a while to realize that I'm dealing with a language problem here:
A language is needed to formally specify a lifting plan. And once that
lifting plan is formally specified, a program can generate the actual values.

Since my IQ tends to drop to zero when I'm lifting weights, I also need to
write down the plates for each set. So TDL contains an option for that as well.

Note for Developers

The Makefile(s) assume that you are running a Linux/Unix setup with Mono.
If you don't, you might have to change path separators (replace '/' with
'\') in the Makefiles and change the compiler to msbuild. The folder CocoR
contains a copy of the Coco/R compiler generator, the folder TDL contains
the attributed grammar (.atg) and the driver program (.cs)

Usage

If you don't pass in any command-line options (i.e. if you just double-click
the executable), the program will assume that
your .tdl file resides in 'mySchedule.tdl' and will put the generated values
in Schedule-TIMESTAMP.md

If you want to make the program use the console as output instead, use the
option '-stdout'.

If you want to use a different input file, just pass the filename.

You can run this program on either Windows or Linux. For Linux you need to
install Mono. On Windows everything should work out of the box.

EBNF

The language is formally specified as an attributed grammar for the Coco/R
compiler generator, which is basically a grammar in EBNF and some
corresponding C# actions. If you are not a computer scientist or linguist,
you might want to skip to the examples.

The core of the language resides in the lifts (that are specified as tuple of name, max and increment)
and the training days (which are specified as a sequence of lifts with sets). And then there are a lot
of constructs to make life way simpler.

Starting Strength

The Starting Strength program is not usually expressed in terms of percentages.
Rippetoe states that you should start with an empty bar and throw in three
warm-up sets. These warm-up sets should have their weight evenly spread between
the empty bar and the work sets. This is hard to express as percentages of the
total weight on the bar - but if you reformulate everything in terms of weight
added to the bar, you end up with 25%, 50% and 75% for the warm-up sets.
Easy-peasy.