Grammar Documentation
Grammar Reference
Generated April 26, 2026 · 15 rules · ANTLR · Generated by DevDiagrams

ebnf_grammar

entry point
syntax = syntax rule, { syntax rule } ;
ebnf_grammar
: rule_def+ EOF
;
rule_def EOF

rule_def

syntax rule = meta identifier, '=', definitions list, ';' ;
rule_def
: rule_name EQUALS definitions_list SEMICOLON
;
rule_name EQUALS definitions_list SEMICOLON

rule_name

meta identifier
rule_name
: META_IDENTIFIER
;
META_IDENTIFIER

definitions_list

definitions list = single definition, { '|', single definition } ;
definitions_list
: single_definition (PIPE single_definition)*
;
single_definition PIPE single_definition

single_definition

single definition = term, { ',', term } ;
single_definition
: term (COMMA term)*
| // empty sequence
;
term COMMA term

term

term = factor, [ '-', exclusion ] ;
term
: factor (MINUS exclusion)?
;
factor MINUS exclusion

exclusion

exclusion = factor ;
exclusion
: factor
;
factor

factor

factor = [ integer, '*' ], primary ;
factor
: (INTEGER ASTERISK)? primary
;
INTEGER ASTERISK primary

primary

primary = optional sequence
| repeated sequence
| special sequence
| grouped sequence
| meta identifier
| terminal string
| empty sequence ;
primary
: optional_sequence
| repeated_sequence
| special_sequence
| grouped_sequence
| meta_identifier
| terminal_string
;
optional_sequence repeated_sequence special_sequence grouped_sequence meta_identifier terminal_string

optional_sequence

optional sequence = '[', definitions list, ']' ;
optional_sequence
: LBRACKET definitions_list RBRACKET
;
LBRACKET definitions_list RBRACKET

repeated_sequence

repeated sequence = '{', definitions list, '}' ;
repeated_sequence
: LBRACE definitions_list RBRACE
;
LBRACE definitions_list RBRACE

grouped_sequence

grouped sequence = '(', definitions list, ')' ;
grouped_sequence
: LPAREN definitions_list RPAREN
;
LPAREN definitions_list RPAREN

special_sequence

special sequence = '?', { special sequence character }, '?' ;
special_sequence
: SPECIAL_SEQUENCE
;
SPECIAL_SEQUENCE

meta_identifier

meta identifier = letter, { letter | digit | ' ' } ;
meta_identifier
: META_IDENTIFIER
;
META_IDENTIFIER

terminal_string

terminal string = "'", { character }, "'"
| '"', { character }, '"' ;
terminal_string
: SINGLE_QUOTED_STRING
| DOUBLE_QUOTED_STRING
;
SINGLE_QUOTED_STRING DOUBLE_QUOTED_STRING