statement -> element_expr:* {% id %}
| null {% id %}
element_expr -> actor_expr {% id %}
| boundary_expr {% id %}
| call_expr {% id %}
| participant_expr {% id %}
actor_expr -> ACTOR {% d => d[0] %}
| ACTOR _ ELEMENT_COLOR {% d => [ d[0][0], d[0][1], d[2] ] %}
| ACTOR _ ELEMENT_ORDER {% d => [ d[0][0], d[0][1], d[2] ] %}
| ACTOR _ ELEMENT_COLOR _ ELEMENT_ORDER
| ACTOR _ ELEMENT_ORDER _ ELEMENT_COLOR
boundary_expr -> BOUNDARY {% d => d[0] %}
| BOUNDARY _ ELEMENT_COLOR {% d => [ d[0][0], d[0][1], d[2] ] %}
| BOUNDARY _ ELEMENT_ORDER {% d => [ d[0][0], d[0][1], d[2] ] %}
| BOUNDARY _ ELEMENT_COLOR _ ELEMENT_ORDER
| BOUNDARY _ ELEMENT_ORDER _ ELEMENT_COLOR
participant_expr -> PARTICIPANT {% d => d[0] %}
| PARTICIPANT _ ELEMENT_COLOR {% d => [ d[0][0], d[0][1], d[2] ] %}
| PARTICIPANT _ ELEMENT_ORDER {% d => [ d[0][0], d[0][1], d[2] ] %}
| PARTICIPANT _ ELEMENT_COLOR _ ELEMENT_ORDER
| PARTICIPANT _ ELEMENT_ORDER _ ELEMENT_COLOR
call_expr -> CALL {% d => d[0] %}
id -> STRING {% d => ["IDENTIFIER", d[0][1] ] %}
| dqstring {% d => ["IDENTIFIER", d[0] ] %}
integer -> INT {% id %}
CALL_ARROW -> CALL_ARROW_BODY CALL_ARROW_HEAD CALL_ARROW_HEAD_MODIFIER
| CALL_ARROW_BODY CALL_ARROW_HEAD
| CALL_ARROW_HEAD_MODIFIER CALL_ARROW_HEAD CALL_ARROW_BODY
CALL_ARROW_BODY -> "-"
| "--"
| "->"
| "<-"
CALL_ARROW_HEAD -> ">"
| "<"
| "\\"
| "\\\\"
| "/"
CALL_ARROW_HEAD_MODIFIER -> "x"
| ">"
| "<"
| "\\"
| "/"
| "o"
CALL -> id _ CALL_ARROW _ id _ ":" _ MESSAGE_NAME _ {% d => ["CALL", d[0], d[4], d[7]] %}
ACTOR -> "actor" _ id _ {% d => ["ACTOR", d[2] ] %}
BOUNDARY -> "boundary" _ id _ {% d => ["BOUNDARY", d[2] ] %}
PARTICIPANT -> "participant" _ id _ {% d => ["PARTICIPANT", d[2] ] %}
ELEMENT_ORDER -> "order" _ INT _ {% d => ["ELEMENT_ORDER", d[2] ] %}
MESSAGE_NAME -> dstrchar:* {% d => ["MESSAGE_NAME", d[0].join('')] %}
ELEMENT_COLOR -> "#" STRING _ {% d => ["ELEMENT_COLOR", d[1][1] ] %}
INT -> [0-9]:+ {% d => ["INT", d[0][0]] %}
STRING -> [a-zA-Z]:+ {% d => ["STRING", d[0].join('')] %}
STRINGW -> [a-zA-Z ]:+ {% d => ["STRING", d[0].join('')] %}
WHITESPACE -> _
_ -> wschar:* {% function(d) {return null;} %}
__ -> wschar:+ {% function(d) {return null;} %}
wschar -> [ \t\n\v\f] {% id %}
# Matches various kinds of string literals
# Double-quoted string
dqstring -> "\"" dstrchar:* "\"" {% function(d) {return d[1].join(""); } %}
sqstring -> "'" sstrchar:* "'" {% function(d) {return d[1].join(""); } %}
btstring -> "`" [^`]:* "`" {% function(d) {return d[1].join(""); } %}
dstrchar -> [^\\"\n] {% id %}
| "\\" strescape {%
function(d) {
return JSON.parse("\""+d.join("")+"\"");
}
%}
sstrchar -> [^\\'\n] {% id %}
| "\\" strescape
{% function(d) { return JSON.parse("\""+d.join("")+"\""); } %}
| "\\'"
{% function(d) {return "'"; } %}
strescape -> ["\\/bfnrt] {% id %}
| "u" [a-fA-F0-9] [a-fA-F0-9] [a-fA-F0-9] [a-fA-F0-9] {%
function(d) {
return d.join("");
}
%}
Last active
November 14, 2021 10:20
-
-
Save irwansyahwii/bd73992820fca52af9c9ed8ade3d9a53 to your computer and use it in GitHub Desktop.
PlantUML Grammar
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@suprafun feel free to use it in your project