Я пишу инструмент для генерации диаграммы последовательности из некоторого текста. Мне нужно поддержать этот два синтаксиса:
anInstance:AClass.DoSomething()
и
participant A -> participant B: Any character except for \r\n (<>{}?)etc.
.
Давайте назовем первый синтаксис strict
, а второй синтаксис free
. В anInstance:AClass.DoSomething()
мне нужно, чтобы оно совпадало с to
(ID ':' ID
), как в синтаксисе strict
. Тем не менее, :AClass.DoSomething()
будет сначала соответствовать CONTENT
. Я подумываю о том, чтобы посмотреть, есть ли ->
, но не в состоянии это выяснить.
Strict
синтаксис
message
: to '.' signature
;
signature
: methodName '()'
;
to
: ID ':' ID
;
methodName
: ID
;
ID
: [a-zA-Z_] [a-zA-Z_0-9]*
;
Free
синтаксис
asyncMessage
: source '->' target content
;
source
: ID+
;
target
: ID+
;
content
: CONTENT
;
ID
: [a-zA-Z_] [a-zA-Z_0-9]*
;
CONTENT
: ':' ~[\r\n]+
;
SPACE
: [ \t\r\n] -> channel(HIDDEN)
;