The language
In the following grammar definition terminals are in bold while non terminals are in italic. The ( and ) parenthesis are used to indicate a sequence of tokens while the characters ?, * and + after a token indicate that the token can be optional, it can match zero or more times and can match one or more times respectively. The vertical character | indicate possible alternatives. Strings inside single quotes indicate literal matches while single quotes preceded by r indicate regex matches.diagram | : | 'diagram' identifier attrList? elements |
elements | : | '{' element* '}' |
element | : | node |
| | edge | |
| | group | |
node | : | provider '.' id identifier attrList? ';' |
edge | : | identifier (link identifier)+ attrList? ';' |
group | : | 'group' identifier attrList? elements |
attrList | : | '[' attribute (',' attribute)* ']' |
attribute | : | id '=' identifier |
link | : | '->' | '<->' | '=>' | '<=>' |
identifier | : | id | quotedId |
id | : | r'([a-zA-Z][a-zA-Z0-9_\-]*|[-]?[0-9]+(\.[0-9]*)?)' |
quotedId | : | r'"[a-zA-Z0-9_\- ,().]*"' |