Previous chapter is Chapter 1, "What Could We Have Done Without SGML?".
grammar ::= declaration*, production+; declaration ::= "#MARK-LENGTH", "::=", mark length | "#UC-MARKS", "::=", uc marks | "#WS", "::=", white-space set; mark length, uc marks ::= #TEXT; %white-space set ::= white-space indicator, ("|", white-space indicator)*; white-space indicator ::= literal | keyword; production ::= non-syntactic indicator?, syntactic name set, "::=", %regular expression, ";"; non-syntactic name indicator ::= "%"; %syntactic name set ::= syntactic name, (",", syntactic name)*; %regular expression ::= alternate set; alternate set ::= sequence, ("|", sequence)*; sequence ::= qualified syntactic item, (",", qualified syntactic item); qualified syntactic item ::= basic syntactic item, occurence indicator?; %occurence indicator ::= optional | repeatable | optional and repeatable | specific occurence indicator; optional ::= "?"; repeatable ::= "+"; optional and repeatable ::= "*"; %specific occurence indicator ::= "{", occurence count, "}", or more indicator?; or more indicator ::= "+"; %basic syntactic item ::= qualified mark | "(", regular expression, ")"; qualified mark ::= mark, ("=", mark replacement)?; mark replacement ::= asis indicator?, source indicator?, simple literal; asis indicator ::= "#ASIS"; source indicator ::= "#SOURCE"; mark ::= literal | keyword | "[", mark reqular expression, "]"; %mark regular experssion ::= mark alternate set; mark alternate set ::= mark sequence, ("|", mark sequence)*; mark sequence ::= mark item, (",", mark item); mark item ::= basic mark item, occurence indicator?; %basic mark item ::= literal | keyword | "(", mark regular expression, ")"; %literal ::= case specific literal | case independent literal case specific literal ::= ["#CASE", #WS?, '"'], literal text, '"' | ["#CASE", #WS?, "'"], literal text, "'"; case independent literal ::= simple literal; %simple literal ::= '"', literal text, '"' | "'", literal text, "'"; literal text ::= #TEXT; %keyword ::= "#", keyword name; syntactic name ::= name; keyword name ::= name; %name ::= {letter, (letter | digit)*}; %letter ::= #CASE "A" | #CASE "B" | #CASE "C" | #CASE "D" | #CASE "E" | #CASE "F" | #CASE "G" | #CASE "H" | #CASE "I" | #CASE "J" | #CASE "K" | #CASE "L" | #CASE "M" | #CASE "N" | #CASE "O" | #CASE "P" | #CASE "Q" | #CASE "R" | #CASE "S" | #CASE "T" | #CASE "U" | #CASE "V" | #CASE "W" | #CASE "X" | #CASE "Y" | #CASE "Z"; %digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
© 1993 OmniMark Technologies Corporation All rights reserved.
ETR09, release 2, 1993/04/26.