-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbnf.txt
113 lines (113 loc) · 2.31 KB
/
bnf.txt
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
topLevel ::=
decl* (pattern | grammarContent*)
decl ::=
("namespace" identifierOrKeyword "=" namespaceURILiteral)
| ("default" "namespace" [identifierOrKeyword] "=" namespaceURILiteral)
| ("datatypes" identifierOrKeyword "=" literal)
pattern ::=
("element" nameClass "{" pattern "}")
| ("attribute" nameClass "{" pattern "}")
| (pattern ("," pattern)+)
| (pattern ("&" pattern)+)
| (pattern ("|" pattern)+)
| (pattern "?")
| (pattern "*")
| (pattern "+")
| ("list" "{" pattern "}")
| ("mixed" "{" pattern "}")
| identifier
| ("parent" identifier)
| "empty"
| "text"
| ([datatypeName] datatypeValue)
| (datatypeName ["{" param* "}"] [exceptPattern])
| "notAllowed"
| ("external" anyURILiteral [inherit])
| ("grammar" "{" grammarContent* "}")
| ("(" pattern ")")
param ::=
identifierOrKeyword "=" literal
exceptPattern ::=
"-" pattern
grammarContent ::=
start
| define
| ("div" "{" grammarContent* "}")
| ("include" anyURILiteral [inherit] ["{" includeContent* "}"])
includeContent ::=
define
| start
| ("div" "{" includeContent* "}")
start ::=
"start" assignMethod pattern
define ::=
identifier assignMethod pattern
assignMethod ::=
"="
| "|="
| "&="
nameClass ::=
name
| (nsName [exceptNameClass])
| (anyName [exceptNameClass])
| (nameClass "|" nameClass)
| ("(" nameClass ")")
name ::=
identifierOrKeyword
| CName
exceptNameClass ::=
"-" nameClass
datatypeName ::=
CName
| "string"
| "token"
datatypeValue ::=
literal
anyURILiteral ::=
literal
namespaceURILiteral ::=
literal
| "inherit"
inherit ::=
"inherit" "=" identifierOrKeyword
identifierOrKeyword ::=
identifier
| keyword
identifier ::=
(NCName - keyword)
| quotedIdentifier
quotedIdentifier ::=
"\" NCName
CName ::=
NCName ":" NCName
nsName ::=
NCName ":*"
anyName ::=
"*"
literal ::=
literalSegment ("~" literalSegment)+
literalSegment ::=
('"' (Char - ('"' | newline))* '"')
| ("'" (Char - ("'" | newline))* "'")
| ('"""' (['"'] ['"'] (Char - '"'))* '"""')
| ("'''" (["'"] ["'"] (Char - "'"))* "'''")
keyword ::=
"attribute"
| "default"
| "datatypes"
| "div"
| "element"
| "empty"
| "external"
| "grammar"
| "include"
| "inherit"
| "list"
| "mixed"
| "namespace"
| "notAllowed"
| "parent"
| "start"
| "string"
| "text"
| "token"