| 1 | grammar ArchitectureGrammar |
| 2 | import "../common/common"; |
| 3 | import "arch"; |
| 4 | |
| 5 | entry Architecture: |
| 6 | NEWLINE* |
| 7 | "architecture-beta" |
| 8 | ( |
| 9 | NEWLINE |
| 10 | | TitleAndAccessibilities |
| 11 | | Statement |
| 12 | )* |
| 13 | ; |
| 14 | |
| 15 | fragment Statement: |
| 16 | groups+=Group |
| 17 | | services+=Service |
| 18 | | junctions+=Junction |
| 19 | | edges+=Edge |
| 20 | ; |
| 21 | |
| 22 | fragment LeftPort: |
| 23 | ':'lhsDir=ARROW_DIRECTION |
| 24 | ; |
| 25 | |
| 26 | fragment RightPort: |
| 27 | rhsDir=ARROW_DIRECTION':' |
| 28 | ; |
| 29 | |
| 30 | fragment Arrow: |
| 31 | LeftPort lhsInto?=ARROW_INTO? ('--' | '-' title=ARCH_TITLE '-') rhsInto?=ARROW_INTO? RightPort |
| 32 | ; |
| 33 | |
| 34 | Group: |
| 35 | 'group' id=ID icon=ARCH_ICON? title=ARCH_TITLE? ('in' in=ID)? EOL |
| 36 | ; |
| 37 | |
| 38 | Service: |
| 39 | 'service' id=ID (iconText=STRING | icon=ARCH_ICON)? title=ARCH_TITLE? ('in' in=ID)? EOL |
| 40 | ; |
| 41 | |
| 42 | Junction: |
| 43 | 'junction' id=ID ('in' in=ID)? EOL |
| 44 | ; |
| 45 | |
| 46 | Edge: |
| 47 | lhsId=ID lhsGroup?=ARROW_GROUP? Arrow rhsId=ID rhsGroup?=ARROW_GROUP? EOL |
| 48 | ; |
| 49 | |
| 50 | terminal ARROW_DIRECTION: 'L' | 'R' | 'T' | 'B'; |
| 51 | terminal ARROW_GROUP: /\{group\}/; |
| 52 | terminal ARROW_INTO: /<|>/; |
| 53 | |