-
Notifications
You must be signed in to change notification settings - Fork 4
CRL Language (REMOVE ME)
CRL is a domain-specific language designed to express table analysis and interpretation rules (see CRL rules). Its simplified grammar in Extended Backus-Naur form (W3C's notation) and Railroad diagrams are demonstrated below.
crl ::= importing* rule*
importing ::= 'import static' java_identifier ('.' java_identifier)* '.*'? ';'? EOL
rule ::= 'rule #' java_integer_literal EOL 'when' EOL condition* 'then' EOL action* 'end' EOL?
condition ::= 'no'? query java_identifier? (':' (constraint (',' constraint)* (',' assignment)? | assignment))? EOL
query ::= 'cell' | 'cells' | 'label' | 'labels' | 'entry' | 'entries' | 'category' | 'categories'
constraint ::= java_boolean_expression
assignment ::= java_identifier ':' java_string_expression
action ::= merge | split | set_text | set_indent | set_tag | new_entry | new_label | add_label | set_parent | set_category | group
merge ::= 'merge' operand 'with' operand EOL
split ::= 'split' operand EOL
set_text ::= 'set text' operand 'to' operand EOL
set_indent ::= 'set indent' operand 'to' operand EOL
set_tag ::= 'set tag' operand 'to' operand EOL
new_entry ::= 'new entry' operand ('as' operand)? EOL
new_label ::= 'new label' operand ('as' operand)? EOL
add_label ::= 'add label' operand ('of' operand)? 'to' operand EOL
set_parent ::= 'set parent' operand 'to' operand EOL
set_category ::= 'set category' operand 'to' operand EOL
group ::= 'group' operand 'with' operand EOL
operand ::= java_expression
importing* rule*
'import static' java_identifier ('.' java_identifier)* '.*'? ';'? EOL
'rule #' java_integer_literal EOL 'when' EOL condition* 'then' EOL action* 'end' EOL?
'no'? query java_identifier? (':' (constraint (',' constraint)* (',' assignment)? | assignment))? EOL
'cell' | 'cells' | 'label' | 'labels' | 'entry' | 'entries' | 'category' | 'categories'
java_boolean_expression
java_identifier ':' java_string_expression
merge | split | set_text | set_indent | set_tag | new_entry | new_label | add_label | set_parent | set_category | group
'merge' Identifier 'with' Identifier
'split' Identifier
'set text' java_expression 'to' Identifier
'set indent' Int_literal 'to' Identifier
'set tag' java_expression 'to' Identifier
'new entry' Identifier ( 'as' java_expression )?
'new label' Identifier ( 'as' java_expression )?
'add label' java_expression ( 'of' java_expression )? 'to' advanced_identifier
'set parent' advanced_identifier 'to' advanced_identifier
'set category' java_expression 'to' advanced_identifier
'group' advanced_identifier 'with' advanced_identifier
java_expression