-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpgs.ebnf
128 lines (126 loc) · 4.08 KB
/
pgs.ebnf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
pgs ::= SP? createType SP? ( ';'? SP? createType SP? )* ( ';' SP? SP? )? EOF
createType
::= createNodeType
| createEdgeType
| createGraphType
createNodeType
::= CREATE SP NODE SP TYPE SP ( ABSTRACT SP )? nodeType
createEdgeType
::= CREATE SP EDGE SP TYPE SP ( ABSTRACT SP )? edgeType
createGraphType
::= CREATE SP GRAPH SP TYPE SP graphType
graphType
::= typeName SP typeForm SP? graphTypeDefinition
typeForm ::= STRICT
| LOOSE
graphTypeDefinition
::= ( IMPORTS SP typeName )? SP? '{' SP? elementTypes? SP? '}'
elementTypes
::= elementType ( SP? ',' SP? elementType )*
elementType
::= typeName
| nodeType
| edgeType
nodeType ::= '(' SP? typeName labelPropertySpec SP? ')'
edgeType ::= endpointType SP? dash SP? middleType SP? dash rightArrowHead SP? endpointType
middleType
::= '[' SP? typeName SP? labelPropertySpec SP? ']'
endpointType
::= '(' SP? labelPropertySpec SP? ')'
labelPropertySpec
::= ( ':' SP? labelSpec )? SP? OPEN? SP? propertySpec?
labelSpec
::= '(' SP? labelSpec SP? ')'
| '[' SP? labelSpec SP? ']'
| labelSpec SP? ( ( '|' | '&' ) SP? labelSpec | '?' )
| labelName
| typeName
propertySpec
::= '{' SP? ( properties ( SP? ',' SP? OPEN )? | OPEN )? SP? '}'
properties
::= property ( SP? ',' SP? property )*
property ::= ( OPTIONAL SP )? key SP propertyType SP?
propertyType
::= StringLiteral
key ::= StringLiteral
labelName
::= StringLiteral
typeName ::= StringLiteral
dash ::= [-#xAD#x2010#x2011#x2012#x2013#x2014#x2015#x2212#xFE58#xFE63#xFF0D]
rightArrowHead
::= [>#x27E9#x3009#xFE65#xFF1E]
<?TOKENS?>
CREATE ::= ( 'c' | 'C' ) ( 'r' | 'R' ) ( 'e' | 'E' ) ( 'a' | 'A' ) ( 't' | 'T' ) ( 'e' | 'E' )
NODE ::= ( 'n' | 'N' ) ( 'o' | 'O' ) ( 'd' | 'D' ) ( 'e' | 'E' )
EDGE ::= ( 'e' | 'E' ) ( 'd' | 'D' ) ( 'g' | 'G' ) ( 'e' | 'E' )
OPEN ::= ( 'o' | 'O' ) ( 'p' | 'P' ) ( 'e' | 'E' ) ( 'n' | 'N' )
OPTIONAL ::= ( 'o' | 'O' ) ( 'p' | 'P' ) ( 't' | 'T' ) ( 'i' | 'I' ) ( 'o' | 'O' ) ( 'n' | 'N' ) ( 'a' | 'A' ) ( 'l' | 'L' )
TYPE ::= ( 't' | 'T' ) ( 'y' | 'Y' ) ( 'p' | 'P' ) ( 'e' | 'E' )
GRAPH ::= ( 'g' | 'G' ) ( 'r' | 'R' ) ( 'a' | 'A' ) ( 'p' | 'P' ) ( 'h' | 'H' )
STRICT ::= ( 's' | 'S' ) ( 't' | 'T' ) ( 'r' | 'R' ) ( 'i' | 'I' ) ( 'c' | 'C' ) ( 't' | 'T' )
LOOSE ::= ( 'l' | 'L' ) ( 'o' | 'O' ) ( 'o' | 'O' ) ( 's' | 'S' ) ( 'e' | 'E' )
ABSTRACT ::= ( 'a' | 'A' ) ( 'b' | 'B' ) ( 's' | 'S' ) ( 't' | 'T' ) ( 'r' | 'R' ) ( 'a' | 'A' ) ( 'c' | 'C' ) ( 't' | 'T' )
IMPORTS ::= ( 'i' | 'I' ) ( 'm' | 'M' ) ( 'p' | 'P' ) ( 'o' | 'O' ) ( 'r' | 'R' ) ( 't' | 'T' ) ( 's' | 'S' )
SP ::= WHITESPACE+
WHITESPACE
::= SPACE
| TAB
| LF
| VT
| FF
| CR
| FS
| GS
| RS
| US
| [#x1680#x180E#x2000#x2001#x2002#x2003#x2004#x2005#x2006#x2008#x2009#x200A#x2028#x2029#x205F#x3000#xA0#x2007#x202F]
FF ::= #xc
EscapedSymbolicName_0
::= [^`]
RS ::= #x001E
StringLiteral_1
::= [^'\]
GS ::= #x001D
FS ::= #x001C
CR ::= #xd
SPACE ::= ' '
TAB ::= #x9
StringLiteral_0
::= [^"\]
LF ::= #xa
VT ::= #x000B
US ::= #x001F
StringLiteral
::= [A-Za-z0-9_#x2D]+
EscapedChar
::= '\' ( '\' | "'" | '"' | 'B' | 'b' | 'F' | 'f' | 'N' | 'n' | 'R' | 'r' | 'T' | 't' | ( 'U' | 'u' ) HexDigit HexDigit HexDigit HexDigit ( HexDigit HexDigit HexDigit HexDigit )? )
HexDigit ::= Digit
| HexLetter
Digit ::= '0'
| NonZeroDigit
NonZeroDigit
::= NonZeroOctDigit
| '8'
| '9'
NonZeroOctDigit
::= '1'
| '2'
| '3'
| '4'
| '5'
| '6'
| '7'
HexLetter
::= 'A'
| 'a'
| 'B'
| 'b'
| 'C'
| 'c'
| 'D'
| 'd'
| 'E'
| 'e'
| 'F'
| 'f'
EOF ::= $