Die folgenden Angaben stellen die in Hilfe:Personendaten#Datum skizzierten zulässigen Formen für GEBURTSDATUM und STERBEDATUM in den Personendaten genauer dar. Es wurde jedoch nicht Kürze, sondern Lesbarkeit angestrebt. 'specification' beschreibe die rechte Seite in den genannten PD-Angaben.

Einige Kontext- und Zusatzbedingungen – z. B. „getauft“ nur in GEBURTSDATUM, „begraben“ nur in STERBEDATUM, chronologische Reihenfolge der Alternativen – werden hier weggelassen.

Wie weitgehend üblich bedeutet […] ein optionales, {…} ein beliebig oft (incl. 0-mal) wiederholbares Element, „…“, dass die enthaltene Zeichenkette genau so anzugeben ist. „|“ steht zwischen verschiedenen Möglichkeiten. Angaben zwischen „//“ und Zeilenende sind Kommentar, gehören nicht zur Syntax.

„number“ ist jeweils eine dezimal angegebene Zahl kontextabhängig geeigneter Größe (bei Jahrhunderten bis zu dreistellig), die nicht mit 0 beginnt. (Auch die Zahl 0 selbst kommt nicht vor.)

Leerzeichen (vorzugsweise genau eines) sind nur dort möglich, dort aber auch notwendig, wo sie in der folgenden Syntax zwischen zwei benachbarten Elementen erscheinen – das heißt nicht links von „.“ und „:“, rechts und links von „–“ und „/“.

specification   = [["unsicher:"] alternatives]

alternatives    = annotated_date {"oder" annotated_date}

annotated_date  = ["getauft" | "begraben"] date
------
day             = number

month           = "Januar" | "Februar" | "März" | "April" | "Mai" | "Juni" | "Juli" | "August" | "September" | "Oktober" | "November" | "Dezember"
 
year_normal     = number ["v. Chr."]                        // 77; 77 v. Chr.
year_special    = number"/"number "v. Chr."                 // 77/76 v. Chr., die Jahre müssen aufeinander folgen
year            = year_normal
                | year_special

range           = number"–"number ["v. Chr."]               // 77–88; 77–66 v. Chr.
century         = number"." "Jahrhundert" ["v. Chr."]       // 3. Jahrhundert; 3. Jahrhundert v. Chr.
years           = century
                | range

daymonth        = [day"."] month                            // nur zusammen mit Jahres- oder Jahresspanne angebbar
------
um_clause       =          "um" year
                |          "um" daymonth year
                | daymonth "um" year
                |          "um" years
                | daymonth "um" years

dateframe       = [daymonth] year
                | [daymonth] century
                | um_clause
------
vor_clause      = [daymonth] "vor" dateframe
nach_clause     = [daymonth] "nach" dateframe
zwischen_clause = [daymonth] "zwischen" dateframe "und" dateframe
------
date            = [daymonth] year
                | [daymonth] century
                | um_clause
                | vor_clause
                | nach_clause
                | zwischen_clause

Dabei darf 'daymonth' in einer clause nicht sowohl vor, als auch nach dem Schlüsselwort 'um', 'vor', 'nach', 'zwischen' erscheinen.

Auf die Angabe der zwar unerwünschten, aber noch zulässigen Verlinkungen wurde dabei verzichtet, sie können durch folgende geänderte Regeln ausreichend erfasst werden:

daymonth      =    [day"."] month
              | "[["day"." month"]]"

year_normal   =     number ["v. Chr."]
              | "[["number"]]"