BNF for parser.jj

TOKENS

<DEFAULT> TOKEN : {
<LEFT_PARENTHESIS: "(">
| <RIGHT_PARENTHESIS: ")">
| <LEFT_CURLY_BRACE: "{">
| <RIGHT_CURLY_BRACE: "}">
| <K_OPERATOR: "#K">
| <EQUALITY: "=">
| <NOTEQUALITY: "!=">
| <COMMA: ",">
| <START_SEQUENCE: "<">
| <END_SEQUENCE: ">">
| <NOT: "NOT" (<SPACE>)+>
| <AND: (<SPACE>)+ "AND" (<SPACE>)+>
| <OR: (<SPACE>)+ "OR" (<SPACE>)+>
| <IMPL: (<SPACE>)+ "IMPL" (<SPACE>)+>
| <EQUIV: (<SPACE>)+ "EQUIV" (<SPACE>)+>
| <FORALL: "FORALL" (<SPACE>)+>
| <EXISTS: "EXISTS" (<SPACE>)+>
| <QUERY: "QUE">
| <PROVIDER_UPDATE: "PUP">
| <PROVIDER_UPDATE_TRAN: "PTR">
| <VIEW_UPDATE: "VUP">
| <VIEW_UPDATE_TRAN: "VTR">
| <SEQUENCE: "SEQ">
| <#DIGIT: ["0"-"9"]>
| <BOOLEAN: "TRUE" | "FALSE">
| <CQESTRING: "\"" (<BIG_CHAR> | <SMALL_CHAR> | <DIGIT> | <SPACE> | <UNDERLINE> | <SPECIAL_CHAR>)+ "\"">
| <NUMBER: ("+" | "-")? (<DIGIT>)+>
| <PREDICATE: <RELATIONNAME> <LEFT_PARENTHESIS>>
| <RELATIONNAME: <SMALL_CHAR> (<SMALL_CHAR> | <UNDERLINE>)*>
| <B_STRING: (<BIG_CHAR>)+>
| <#BIG_CHAR: ["A"-"Z"] | "\u00c4" | "\u00d6" | "\u00dc" | "\u00df">
| <#SMALL_CHAR: ["a"-"z"] | "\u00e4" | "\u00f6" | "\u00fc">
| <#UNDERLINE: "_">
| <#SPECIAL_CHAR: "*" | "%" | "$" | "!" | "?" | "@" | "." | "," | "\u00a7" | "$" | "#" | "\'" | "+" | "/" | ":" | ";" | "~">
| <SPACE: " ">
}

   

NON-TERMINALS

spaces ::= ( <SPACE> )+
optional_spaces ::= ( <SPACE> )*
predicate0 ::= <RELATIONNAME>
parameter ::= ( parameter_var | constant )
parameter_var ::= <B_STRING>
constant ::= <CQESTRING>
| <NUMBER>
| <BOOLEAN>
predicate ::= <PREDICATE> parameter optional_spaces ( <COMMA> optional_spaces parameter optional_spaces )* <RIGHT_PARENTHESIS>
equality ::= ( parameter_var | constant ) optional_spaces ( <EQUALITY> | <NOTEQUALITY> ) optional_spaces ( parameter_var | constant )
quantor_variables ::= <B_STRING> optional_spaces ( <COMMA> optional_spaces <B_STRING> optional_spaces )*
atom_pexp ::= ( predicate0 | predicate | equality )
term1 ::= term2 ( <EQUIV> term2 )*
term2 ::= term3 ( <IMPL> term3 )?
term3 ::= term4 ( <OR> term4 )*
term4 ::= term5 ( <AND> term5 )*
term5 ::= term6
| <NOT> term5
| <FORALL> quantor_variables term5
| <EXISTS> quantor_variables term5
term6 ::= atom_pexp
| <LEFT_PARENTHESIS> optional_spaces term1 optional_spaces <RIGHT_PARENTHESIS>
/**
 * Wurzel einer Praedikatenlogischen Formel.
 */
pexp ::= term1
kpredicate ::= <PREDICATE> constant optional_spaces ( "," optional_spaces constant optional_spaces )* <RIGHT_PARENTHESIS>
atom_kpexp ::= predicate0
| kpredicate
kterm1 ::= kterm2 ( <EQUIV> kterm2 )*
kterm2 ::= kterm3 ( <IMPL> kterm3 )?
kterm3 ::= kterm4 ( <OR> kterm4 )*
kterm4 ::= kterm5 ( <AND> kterm5 )*
kterm5 ::= kterm6
| <NOT> kterm6
kterm6 ::= atom_kpexp
| <LEFT_PARENTHESIS> optional_spaces kterm1 optional_spaces <RIGHT_PARENTHESIS>
kexp ::= kterm1
atom_wexp ::= <K_OPERATOR> "{" optional_spaces kexp optional_spaces "}"
wterm1 ::= wterm2 ( <EQUIV> wterm2 )*
wterm2 ::= wterm3 ( <IMPL> wterm3 )?
wterm3 ::= wterm4 ( <OR> wterm4 )*
wterm4 ::= wterm5 ( <AND> wterm5 )*
wterm5 ::= wterm6
| <NOT> wterm5
wterm6 ::= atom_wexp
| <LEFT_PARENTHESIS> optional_spaces wterm1 optional_spaces <RIGHT_PARENTHESIS>
wexp ::= wterm1
/**
 * Praedikatenlogische Anfrage.
 */
pquery ::= <QUERY> optional_spaces <LEFT_PARENTHESIS> optional_spaces pexp optional_spaces <RIGHT_PARENTHESIS>
provider_update ::= <PROVIDER_UPDATE> optional_spaces <LEFT_PARENTHESIS> optional_spaces kliteral optional_spaces <RIGHT_PARENTHESIS>
provider_update_transaction ::= <PROVIDER_UPDATE_TRAN> optional_spaces <LEFT_PARENTHESIS> optional_spaces kliteral ( <COMMA> optional_spaces kliteral optional_spaces )* <RIGHT_PARENTHESIS>
view_update ::= <VIEW_UPDATE> optional_spaces <LEFT_PARENTHESIS> optional_spaces kliteral optional_spaces <RIGHT_PARENTHESIS>
view_update_transaction ::= <VIEW_UPDATE_TRAN> optional_spaces <LEFT_PARENTHESIS> optional_spaces kliteral ( <COMMA> optional_spaces kliteral optional_spaces )* <RIGHT_PARENTHESIS>
kliteral ::= atom_kpexp
| <NOT> atom_kpexp
updateSet ::= <LEFT_CURLY_BRACE> optional_spaces atom_kpexp optional_spaces ( <COMMA> optional_spaces atom_kpexp optional_spaces )* <RIGHT_CURLY_BRACE>
// Parst eine beliebige Interatkion (Query, Update) ein.
parseInteraction ::= ( pquery | provider_update | provider_update_transaction | view_update | view_update_transaction | pexp )+ <EOF>