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
Hello, under what license is this gist released under ? I would like to study it to learn from it. Thank you.