| Input | ::= | Rules |
| Rules | ::= | Rule ( Rule )* |
| Rule | ::= | <IDENTIFIER> ( <SEPARATOR> | <DR_SEPARATOR> ) Conc <ARROW> toplevelCfsRhs ( <COMMA> <FNMARKER> Functions )? <DOT> |
| Functions | ::= | Function ( <COMMA> Function )* |
| Function | ::= | ( Coref <EQUALS> )? <IDENTIFIER> <LEFTROUND> ( FnArgs )? <RIGHTROUND> |
| FnArgs | ::= | embeddedCfs ( <COMMA> embeddedCfs )* |
| Seek | ::= | <SEEK> <LEFTROUND> <IDENTIFIER> <RIGHTROUND> |
| toplevelCfsLhs | ::= | toplevelTerm ( <UNIFICATION> toplevelTerm )* |
| toplevelCfsRhs | ::= | toplevelTermRhs ( <UNIFICATION> toplevelTermRhs )* |
| embeddedCfs | ::= | embeddedTerm ( <UNIFICATION> embeddedTerm )* |
| toplevelTermRhs | ::= | ( ( FeatureStructure | List | Type | Coref | Collect ) ) |
| toplevelTerm | ::= | ( ( <NEG> )? ( FeatureStructure | List | Type | Coref | Collect | Seek ) ) |
| embeddedTerm | ::= | ( FeatureStructure | List | Type | Coref | Collect | Set ) |
| Coref | ::= | <COREFMARKER> ( <IDENTIFIER> | <NUMBER> ) |
| Collect | ::= | ( <COLLECT> ( ( CoName ) | <LEFTCURLY> ( CoName <RIGHTCURLY> ) | <LEFTANGLE> ( CoName <RIGHTANGLE> ) ) ) |
| CoName | ::= | ( <IDENTIFIER> | <NUMBER> ) |
| Type | ::= | ( <IDENTIFIER> | <ETC> | <STRING> ) |
| FeatureStructure | ::= | <LEFTBRACKET> AttrValPair ( <COMMA> AttrValPair )* <RIGHTBRACKET> |
| AttrValPair | ::= | <IDENTIFIER> embeddedCfs |
| Set | ::= | ( <LEFTCURLY> embeddedCfs ( <COMMA> embeddedCfs )* <RIGHTCURLY> ) |
| List | ::= | <LEFTANGLE> ( embeddedCfs ( <COMMA> embeddedCfs )* ( <DOT> embeddedCfs )? )? <RIGHTANGLE> |
| Conc | ::= | Disj ( Disj )* |
| Disj | ::= | Kleene ( <DISJ> Kleene )* |
| Kleene | ::= | Element ( ( <PLUS> | <STAR> | <ZERO_ONE> | ( <LEFTCURLY> <NUMBER> ( <COMMA> <NUMBER> )? <RIGHTCURLY> ) ) )? |
| Element | ::= | ( toplevelCfsLhs | <LEFTROUND> Conc <RIGHTROUND> ) |
TOKEN :
{
< LEFTBRACKET: "[" >
| < RIGHTBRACKET: "]" >
| < LEFTROUND: "(" >
| < RIGHTROUND: ")" >
| < LEFTCURLY: "{" >
| < RIGHTCURLY: "}" >
| < LEFTANGLE: "<" >
| < RIGHTANGLE: ">" >
| < ARROW: "->" >
| < DOT: "." >
| < ETC: "..." >
| < SEPARATOR: ":>" >
| < DR_SEPARATOR: ":/" >
| < FNMARKER: ("where" | "WHERE" | "Where" ) >
| < COMMA: "," >
| < EQUALS: "=" >
| < COREFMARKER: "#" >
| < COLLECT: "%" >
| < UNIFICATION: "&" >
| < DISJ: "|" >
| < PLUS: "+" >
| < STAR: "*" >
| < ZERO_ONE: "?" >
| < NEG: "~" >
| < SEEK: ("@seek" | "@SEEK")>
| < NUMBER: (< DIGIT >)+>
| < STRING: "\"" (~["\""] | "\\\"" | "\\\\" )* "\"" >
| < IDENTIFIER:
< LETTER >|
((< LETTER >|< DIGIT >|< SPECIAL >)+ < SPECIAL > (< LETTER >|< DIGIT >|< SPECIAL >)*) |
((< LETTER >|< DIGIT >|< SPECIAL >)* < SPECIAL > (< LETTER >|< DIGIT >|< SPECIAL >)+) |
((< LETTER >|< SPECIAL >)+ < DIGIT > (< LETTER >|< DIGIT >|< SPECIAL >)*) |
((< LETTER >|< DIGIT >|< SPECIAL >)* < DIGIT > (< LETTER >|< SPECIAL >)+)
>
| < #LETTER: ["A" - "Z", "a" - "z", "\u0370" - "\uFFFF"]>
| < #DIGIT: ["0"-"9"] >
| < #SPECIAL: [ "_", "+", "-", "*", "?" ]>
}