Hello! -------------- preliminary In this e-mail, I rename yearWithOneOrTwoUnspecifedDigits with the following yud for short. -------------- level one The BNF excludes dates such as 199u-uu at level one. At 102, such a date is not present in the "Examples" column, but it is not excluded as of the "Syntax/rules" column. In such a date, no "u" is "internal" and therefore, I consider that such a date is "level one". Therefore, I suggest to reformulate the productions defining monthUnspecified and dayAndMonthUnspecified as: monthUnspecified = ( year | yud ) "-uu' dayAndMonthUnspecified = ( year | yud ) "-uu-uu' Furthermore, the examples and the BNF exclude dates such as: 1uuu-uu with more than two unspecified digits in the year. Therefore, we could need to rewrite the production defining yud as: yud = "uuuu" | ( digit ( "uuu" | ( digit ( digit | "u" ) "u" ) ) ) It would also be useful to note in the "Syntax/rules" column of both 102 and 202, that months and days can not have ONE specified digit and ONE unspecified digit. Both digits should be either "specified" or "unspecified". -------------- level two > We have ensured that months and days match up for basic dates. > To ensure this for the whacky dates is going to impose extreme > complexity and I don't see why it's needed. I consider it is needed, because its absence annihilates the work achieved for basic dates when it comes to dates with matching months and days. Furthermore, I can not find where this "extreme complexity" resides. I suggest to concisely rewrite the four productions defining "Internal Unspecified" as the following unique production: internalUnspecified = ( year "-uu-" day ) | ( yud "-" ( monthDay | ( month "-uu" ) | ( "uu-" day ) ) ) Regards! SaaĊĦha,