Lark uses Extended Backus-Naur form (EBNF) to define grammars.
Key syntax rules:
rule_name : items defines a rule.TERMINAL: "text" defines a terminal (string or regex).rule* matches zero or more instances.rule+ matches one or more instances.[rule] matches an optional rule (zero or one).rule? is an alternative way to denote an optional rule.(rule1 | rule2) groups rules together.-> alias creates an alias for a specific part of a rule, which is useful for naming branches in the resulting parse tree.%import common.NAME imports predefined terminals from Lark's common library.%ignore WS tells the parser to ignore whitespace.
Note: Terminals are typically written in UPPER-CASE, while rules are written in lower-case.
value: dict
| list
| STRING
| NUMBER
| "true" | "false" | "null"
list : "[" [value ("," value)*] "]"
dict : "{" [pair ("," pair)*] "}"
pair : STRING ":" value
%import common.ESCAPED_STRING -> STRING
%import common.SIGNED_NUMBER -> NUMBER
%import common.WS
%ignore WS