# Last edited on 2004-11-06 20:37:44 by stolfi The input to the grammar preprocessor consists of four parts: PREDICATES zero or more {PREDDEF}s Predicate definitions: PREDDEF => PRED "(" MARKVAR ,.. ")" "=" "{" { "\n" MARKTUPLE }.. "\n" "}" MARKTUPLE => "(" MARKVAL ,.. ")" The marker values in the tuples must agree with the types of the marker variables in the predicate's argument list. RULE => NTSYMBOL "{" RTAG "}" {"(" MARKER,.. ")"}? "->" FACTOR .. {COND}? PRED => [a-z][a-z0-9_]+ COND => "!" PRED "(" MARKVAR,.. ")" In a {RULE} with a {COND}, the only valid {MARKVAR} assignments are those which, when substituted into the {COND}, yield one of the {PREDDEF}s listed in the preamble.