BNF for LfgGrammarParser.jj

TOKENS

<DEFAULT,LFG> SKIP : {
" "
| "\t"
| "\n"
| "\r"
| "\f"
| <COMMENT: "#" (~["\n","\r"])* ("\n" | "\r" | "\r\n")?>
}

   
//TOKEN : { < EOL : "\n" | "\r" | "\r\n" > }
<DEFAULT,LFG> TOKEN : {
<Feature: "feature">
| <NonGovernableGF: "NonGovernableGF">
| <NonFunction: "NonFunction">
| <DiscourseFunction: "DiscourseFunction">
| <PRED: "PRED">
| <PLUS: "+">
| <MINUS: "-">
| <HOOK: "?">
}

   
<DEFAULT> TOKEN : {
<CFGSYMBOL: ~[" ","\t","\r","\n","\f","\'","&","(",")","*",",",":",";","<",">","=","[","]","{","}","|","\u00ac","\u21d2","\u2208","\u2261","-","\u2192"] (~[" ","\t","\r","\n","\f","&","(",")","*",",",":",";","<",">","=","[","]","{","}","|","\u00ac","\u21d2","\u2208","\u2261","-","\u2192"])*>
}

   
<LFG> TOKEN : {
<LFGSYMBOL: (<CHARACTER> | <PLUS> | <MINUS>) (<CHARACTER> | "_" | <HOOK> | <PLUS> | <MINUS>)*>
}

   
<DEFAULT,LFG> TOKEN : {
<#_ESCAPED_CHAR: "\\" ~[]>
| <AND: "&">
| <IDENTICALTO: "\u2261">
| <EQ: "==">
| <NE: "!=" | "\u2260">
| <NOT: "\u00ac">
| <ARROW: "\u2192" | "->">
| <LEFTARROW: "\u2190" | "<-">
| <UPARROW: "\u2191" | "^">
| <DOWNARROW: "\u2193" | "!">
| <DARROW: "\u21d2">
| <MEMBERSHIP: "\u2208">
| <SEMICOLON: ";">
| <COMMA: ",">
| <VBAR: "|">
| <ASSIGN: "=">
| <SINGLEQUOTE: "\'">
| <LBRACKET: "[">
| <RBRACKET: "]">
| <LT: "<">
| <GT: ">">
| <#CHARACTER: ["a"-"z","A"-"Z","\u0386"-"\u03ce","0"-"9"]>
| <LPAREN: "(">
| <RPAREN: ")">
| <LBRACE: "{">
| <RBRACE: "}">
| <STAR: "*">
}

   

NON-TERMINALS

/** Top level production. */
Grammar ::= ( FeatureDeclarator | NonGGF | MetaCategory | RuleDeclarator | LemmaDeclarator )* <EOF>
DF ::= "DiscourseFunction" <ASSIGN> <LBRACE> ( ( CFGSYMBOL ) ( <COMMA> ( CFGSYMBOL ) )* )? <RBRACE> <SEMICOLON>
NF ::= "NonFunction" <ASSIGN> <LBRACE> ( ( CFGSYMBOL ) ( <COMMA> ( CFGSYMBOL ) )* )? <RBRACE> <SEMICOLON>
NonGGF ::= <NonGovernableGF> <ASSIGN> <LBRACE> ( ( CFGSYMBOL ) ( <COMMA> ( CFGSYMBOL ) )* )? <RBRACE> <SEMICOLON>
FeatureDeclarator ::= <Feature> CFGSYMBOL <ASSIGN> <LBRACE> ( CFGSYMBOL ) ( <COMMA> ( CFGSYMBOL ) )* <RBRACE> <SEMICOLON>
MetaCategory ::= CFGSYMBOL ( <ASSIGN> | <IDENTICALTO> ) <LBRACE> ( CFGSYMBOL ) ( <VBAR> ( CFGSYMBOL ) )* <RBRACE> <SEMICOLON>
RuleDeclarator ::= CFGSYMBOL <ARROW> ( Constituent ( RuleBody )? )+ <SEMICOLON>
Constituent ::= "(" CFGSYMBOL ")" ( "+" )? ( "*" )? ( "?" )?
| CFGSYMBOL ( "+" )? ( "*" )? ( "?" )?
RuleBody ::= "{" ( fNotation <SEMICOLON> ( fNotation <SEMICOLON> )* )? "}"
fNotation ::= ( ( Designator ( ( assignfNotation ) | ( constrainfNotation ( <DARROW> fNotation )? ) ) ) | ( <NOT> Designator constrainfNotation ( <DARROW> fNotation )? ) )
constrainfNotation ::= ( _constrainfNotation ( <VBAR> Designator _constrainfNotation | <AND> Designator _constrainfNotation )* )
_constrainfNotation ::= ( ( <EQ> Designator | <NE> Designator )? )
assignfNotation ::= ( <ASSIGN> ( Designator ) | <MEMBERSHIP> ( Designator ) )
offPath ::= "(" Designator constrainfNotation ")"
Designator ::= ( arrowDesignator | symbolDesignator | "(" ( ( ( Designator ) ) ( ( Designator ) )* )? ")" )
arrowDesignator ::= ( <UPARROW> | <DOWNARROW> | <ARROW> | <LEFTARROW> )
symbolDesignator ::= ( ( LFGSYMBOL ( <STAR> )? ( ":" "(" Designator constrainfNotation ")" )? ) | ( <PRED> ) | ( PredicateValue ) | ( <LBRACE> LFGSYMBOL ( ( "," | "|" ) LFGSYMBOL )* <RBRACE> ( <STAR> )? ( ":" "(" Designator constrainfNotation ")" )? ) )
LemmaDeclarator ::= CFGSYMBOL CFGSYMBOL CFGSYMBOL ( FSBody )? ( RuleBody )? <SEMICOLON>
FSBody ::= "[" ( ( FS ) ( "," FS )* )? "]"
FS ::= LFGSYMBOL "=" ( LFGSYMBOL | FSBody )
| Predicate
Predicate ::= <PRED> "=" PredicateValue
PredicateValue ::= "\'" LFGSYMBOL ( "<" ( LFGSYMBOL ( "," LFGSYMBOL )* )? ">" ( LFGSYMBOL ( "," LFGSYMBOL )* )? )? "\'"
LFGSYMBOL ::= ( <LFGSYMBOL> | <PLUS> | <MINUS> | <HOOK> )
CFGSYMBOL ::= ( <CFGSYMBOL> )