Skip to content

CRL Language (REMOVE ME)

Alexey O. Shigarov edited this page Dec 17, 2019 · 1 revision

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.

EBNF

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

Railroad diagrams

crl

importing* rule*

crl diagram

importing

'import static' java_identifier ('.' java_identifier)* '.*'? ';'? EOL

importing diagram

rule

'rule #' java_integer_literal EOL 'when' EOL condition* 'then' EOL action* 'end' EOL?

rule diagram

condition

'no'? query java_identifier? (':' (constraint (',' constraint)* (',' assignment)? | assignment))? EOL

condition diagram

query

'cell' | 'cells' | 'label' | 'labels' | 'entry' | 'entries' | 'category' | 'categories'

query diagram

constraint

java_boolean_expression

constraint diagram

assignment

java_identifier ':' java_string_expression

assignment diagram

action

merge | split | set_text | set_indent | set_tag | new_entry | new_label | add_label | set_parent | set_category | group

action diagram

merge

'merge' Identifier 'with' Identifier

merge diagram

split

'split' Identifier

split diagram

set_text

'set text' java_expression 'to' Identifier

set_text diagram

set_indent

'set indent' Int_literal 'to' Identifier

set_indent diagram

set_tag

'set tag' java_expression 'to' Identifier

set_tag diagram

new_entry

'new entry' Identifier ( 'as' java_expression )?

new_entry diagram

new_label

'new label' Identifier ( 'as' java_expression )?

new_label diagram

add_label

'add label' java_expression ( 'of' java_expression )? 'to' advanced_identifier

add_label diagram

set_parent

'set parent' advanced_identifier 'to' advanced_identifier

set_parent diagram

set_category

'set category' java_expression 'to' advanced_identifier

set_category diagram

group

'group' advanced_identifier 'with' advanced_identifier

group diagram

operand

java_expression

operand diagram

Resources