English/英語 | Japanese/日本語
BPMNmlは、BPMNのマークアップ言語です。文法は当初Class Digramにインスパイアされました。 Mermaidへの対応を目指しています。
- 主要なBPMN仕様に対応
- Mermaidにマージ
- BPMN XMLのコード生成
---
title: BPMN デモ
---
bpmn-beta
event StartEvent <<start>>
task TaskA
gateway DecisionPoint <<exclusive>>
task TaskB
task TaskC
event EndEvent <<end>>
StartEvent --> TaskA
TaskA --> DecisionPoint
DecisionPoint --> TaskB : "yes"
DecisionPoint --> TaskC : "no"
TaskB --> EndEvent
TaskC --> EndEvent
pool fstPool {
lane fstLane {
event Start1 <<start>>
event End2 <<end>>
%% コネクションの設定がスコープ内に限定されるため要修正
Start1 --> End2
}
}
grammar BPMNml
// from https://github.com/mermaid-js/mermaid/blob/develop/packages/parser/src/language/common/common.langium
// import "../common/common";
interface Common {
accDescr?: string;
accTitle?: string;
title?: string;
}
fragment TitleAndAccessibilities:
((accDescr=ACC_DESCR | accTitle=ACC_TITLE | title=TITLE) EOL)+
;
fragment EOL returns string:
NEWLINE+ | EOF
;
terminal NEWLINE: /\r?\n/;
terminal ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/;
terminal ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/;
terminal TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/;
hidden terminal WHITESPACE: /[\t ]+/;
hidden terminal YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/;
hidden terminal DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/;
hidden terminal SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/;
// common
// エントリールール
entry BPMN:
NEWLINE*
"bpmn-beta"
(
NEWLINE* TitleAndAccessibilities BPMNModel*
| NEWLINE* BPMNModel
| NEWLINE*
)
;
// ターミナルルールの定義
terminal ID: /[a-zA-Z_][a-zA-Z0-9_]*/;
terminal STRING: /"([^"\r\n])*"/ | /'([^'\r\n])*'/;
terminal INT returns number: /[0-9]+/;
hidden terminal WS: /\s+/;
BPMNModel:
elements+=BPMNElement*;
// BPMN要素の定義
BPMNElement:
Node | Container | Connection;
// ノードの抽象定義
Node:
Event | Task | Gateway;
// イベントの定義
Event:
'event' name=ID ('<<' eventType=EventType '>>')?;
// イベントの種類の定義
EventType:
start = 'start' |
end = 'end' |
intermediate = 'intermediate';
// タスクの定義
Task:
'task' name=ID;
// ゲートウェイの定義
Gateway:
'gateway' name=ID ('<<' gatewayType=GatewayType '>>')?;
// ゲートウェイの種類の定義
GatewayType:
exclusive = 'exclusive' |
parallel = 'parallel' |
inclusive = 'inclusive';
// コンテナの抽象定義
Container:
Pool | Lane;
// プールの定義
Pool:
'pool' name=ID '{'
elements+=BPMNElement*
'}';
// レーンの定義
Lane:
'lane' name=ID '{'
elements+=BPMNElement*
'}';
// 接続の定義
Connection:
source=[Node:ID] ('-->' | '..>' | '--') target=[Node:ID] (':' label=STRING)?;