ebnf 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +81 -36
- data/VERSION +1 -1
- data/bin/ebnf +34 -18
- data/etc/abnf-core.ebnf +52 -0
- data/etc/abnf.abnf +121 -0
- data/etc/abnf.ebnf +124 -0
- data/etc/abnf.sxp +45 -0
- data/etc/ebnf.ebnf +19 -25
- data/etc/ebnf.html +251 -206
- data/etc/ebnf.ll1.rb +27 -103
- data/etc/ebnf.ll1.sxp +105 -102
- data/etc/ebnf.peg.rb +54 -62
- data/etc/ebnf.peg.sxp +53 -62
- data/etc/ebnf.sxp +22 -19
- data/etc/iso-ebnf.ebnf +140 -0
- data/etc/iso-ebnf.isoebnf +138 -0
- data/etc/iso-ebnf.sxp +65 -0
- data/etc/sparql.ebnf +4 -4
- data/etc/sparql.sxp +8 -7
- data/etc/turtle.ebnf +3 -3
- data/etc/turtle.sxp +22 -20
- data/lib/ebnf.rb +3 -0
- data/lib/ebnf/abnf.rb +301 -0
- data/lib/ebnf/abnf/core.rb +23 -0
- data/lib/ebnf/abnf/meta.rb +111 -0
- data/lib/ebnf/base.rb +87 -44
- data/lib/ebnf/ebnf/meta.rb +90 -0
- data/lib/ebnf/isoebnf.rb +229 -0
- data/lib/ebnf/isoebnf/meta.rb +75 -0
- data/lib/ebnf/ll1.rb +4 -7
- data/lib/ebnf/ll1/parser.rb +12 -4
- data/lib/ebnf/native.rb +320 -0
- data/lib/ebnf/parser.rb +285 -302
- data/lib/ebnf/peg.rb +1 -1
- data/lib/ebnf/peg/parser.rb +24 -5
- data/lib/ebnf/peg/rule.rb +77 -58
- data/lib/ebnf/rule.rb +352 -121
- data/lib/ebnf/terminals.rb +13 -10
- data/lib/ebnf/writer.rb +550 -78
- metadata +48 -6
data/etc/abnf.ebnf
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
rulelist ::= ( rule | (c_wsp* c_nl) )+
|
2
|
+
|
3
|
+
rule ::= rulename defined_as elements c_nl
|
4
|
+
# continues if next line starts
|
5
|
+
# with white space
|
6
|
+
|
7
|
+
elements ::= alternation c_wsp*
|
8
|
+
|
9
|
+
alternation ::= concatenation
|
10
|
+
(c_wsp* "/" c_wsp* concatenation)*
|
11
|
+
|
12
|
+
concatenation::= repetition (c_wsp+ repetition)*
|
13
|
+
|
14
|
+
repetition ::= repeat? element
|
15
|
+
|
16
|
+
repeat ::= (DIGIT* "*" DIGIT*) | DIGIT+
|
17
|
+
|
18
|
+
element ::= rulename | group | option |
|
19
|
+
char_val | num_val | prose_val
|
20
|
+
|
21
|
+
group ::= "(" c_wsp* alternation c_wsp* ")"
|
22
|
+
|
23
|
+
option ::= "[" c_wsp* alternation c_wsp* "]"
|
24
|
+
|
25
|
+
char_val ::= case_insensitive_string |
|
26
|
+
case_sensitive_string
|
27
|
+
|
28
|
+
case_insensitive_string ::=
|
29
|
+
"%i"? quoted_string
|
30
|
+
|
31
|
+
case_sensitive_string ::=
|
32
|
+
"%s" quoted_string
|
33
|
+
|
34
|
+
num_val ::= "%" (bin_val | dec_val | hex_val)
|
35
|
+
|
36
|
+
@terminals
|
37
|
+
|
38
|
+
# Terminals used in ABNF, itself
|
39
|
+
rulename ::= ALPHA (ALPHA | DIGIT | "-")*
|
40
|
+
|
41
|
+
defined_as ::= c_wsp* ("=" | "=/") c_wsp*
|
42
|
+
# basic rules definition and
|
43
|
+
# incremental alternatives
|
44
|
+
|
45
|
+
c_wsp ::= WSP | (c_nl WSP)
|
46
|
+
|
47
|
+
c_nl ::= COMMENT | CRLF
|
48
|
+
# comment or newline
|
49
|
+
|
50
|
+
comment ::= ";" (WSP | VCHAR)* CRLF
|
51
|
+
|
52
|
+
quoted_string::= DQUOTE [#x20-#x21#x23-#x7E]* DQUOTE
|
53
|
+
# quoted string of SP and VCHAR
|
54
|
+
# without DQUOTE
|
55
|
+
|
56
|
+
bin_val ::= "b" BIT+
|
57
|
+
(("." BIT+)+ | ("-" BIT+))?
|
58
|
+
# series of concatenated bit values
|
59
|
+
# or single ONEOF range
|
60
|
+
|
61
|
+
dec_val ::= "d" DIGIT+
|
62
|
+
(("." DIGIT+)+ | ("-" DIGIT+))?
|
63
|
+
|
64
|
+
hex_val ::= "x" HEXDIG+
|
65
|
+
(("." HEXDIG+)+ | ("-" HEXDIG+))?
|
66
|
+
|
67
|
+
prose_val ::= "<" [#x20-#x3D#x3F-#x7E]* ">"
|
68
|
+
# bracketed string of SP and VCHAR
|
69
|
+
# without angles
|
70
|
+
# prose description, to be used as
|
71
|
+
# last resort
|
72
|
+
|
73
|
+
# Core terminals available in uses of ABNF
|
74
|
+
ALPHA ::= [#x41-#x5A#x61-#x7A] # A-Z | a-z
|
75
|
+
|
76
|
+
BIT ::= '0' | '1'
|
77
|
+
|
78
|
+
CHAR ::= [#x01-#x7F]
|
79
|
+
# any 7-bit US-ASCII character,
|
80
|
+
# excluding NUL
|
81
|
+
CR ::= #x0D
|
82
|
+
# carriage return
|
83
|
+
|
84
|
+
CRLF ::= CR? LF
|
85
|
+
# Internet standard newline
|
86
|
+
|
87
|
+
CTL ::= [#x00-#x1F] | #x7F
|
88
|
+
# controls
|
89
|
+
|
90
|
+
DIGIT ::= [#x30-#x39]
|
91
|
+
# 0-9
|
92
|
+
|
93
|
+
DQUOTE ::= #x22
|
94
|
+
# " (Double Quote)
|
95
|
+
|
96
|
+
HEXDIG ::= DIGIT | "A" | "B" | "C" | "D" | "E" | "F"
|
97
|
+
|
98
|
+
HTAB ::= #x09
|
99
|
+
# horizontal tab
|
100
|
+
|
101
|
+
LF ::= #x0A
|
102
|
+
# linefeed
|
103
|
+
|
104
|
+
LWSP ::= (WSP | CRLF WSP)*
|
105
|
+
# Use of this linear-white-space rule
|
106
|
+
# permits lines containing only white
|
107
|
+
# space that are no longer legal in
|
108
|
+
# mail headers and have caused
|
109
|
+
# interoperability problems in other
|
110
|
+
# contexts.
|
111
|
+
# Do not use when defining mail
|
112
|
+
# headers and use with caution in
|
113
|
+
# other contexts.
|
114
|
+
|
115
|
+
OCTET ::= [#x00-#xFF]
|
116
|
+
# 8 bits of data
|
117
|
+
|
118
|
+
SP ::= #x20
|
119
|
+
|
120
|
+
VCHAR ::= [#x21-#x7E]
|
121
|
+
# visible (printing) characters
|
122
|
+
|
123
|
+
WSP ::= SP | HTAB
|
124
|
+
# white space
|
data/etc/abnf.sxp
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
(
|
2
|
+
(rule rulelist (plus (alt rule (seq (star c_wsp) c_nl))))
|
3
|
+
(rule rule (seq rulename defined_as elements c_nl))
|
4
|
+
(rule elements (seq alternation (star c_wsp)))
|
5
|
+
(rule alternation
|
6
|
+
(seq concatenation (star (seq (star c_wsp) "/" (star c_wsp) concatenation))))
|
7
|
+
(rule concatenation (seq repetition (star (seq (plus c_wsp) repetition))))
|
8
|
+
(rule repetition (seq (opt repeat) element))
|
9
|
+
(rule repeat (alt (seq (star DIGIT) "*" (star DIGIT)) (plus DIGIT)))
|
10
|
+
(rule element (alt rulename group option char_val num_val prose_val))
|
11
|
+
(rule group (seq "(" (star c_wsp) alternation (star c_wsp) ")"))
|
12
|
+
(rule option (seq "[" (star c_wsp) alternation (star c_wsp) "]"))
|
13
|
+
(rule char_val (alt case_insensitive_string case_sensitive_string))
|
14
|
+
(rule case_insensitive_string (seq (opt "%i") quoted_string))
|
15
|
+
(rule case_sensitive_string (seq "%s" quoted_string))
|
16
|
+
(rule num_val (seq "%" (alt bin_val dec_val hex_val)))
|
17
|
+
(terminals _terminals (seq))
|
18
|
+
(terminal rulename (seq ALPHA (star (alt ALPHA DIGIT "-"))))
|
19
|
+
(terminal defined_as (seq (star c_wsp) (alt "=" "=/") (star c_wsp)))
|
20
|
+
(terminal c_wsp (alt WSP (seq c_nl WSP)))
|
21
|
+
(terminal c_nl (alt COMMENT CRLF))
|
22
|
+
(terminal comment (seq ";" (star (alt WSP VCHAR)) CRLF))
|
23
|
+
(terminal quoted_string (seq DQUOTE (star (range "#x20-#x21#x23-#x7E")) DQUOTE))
|
24
|
+
(terminal bin_val (seq "b" (plus BIT) (opt (alt (plus (seq "." (plus BIT))) (seq "-" (plus BIT))))))
|
25
|
+
(terminal dec_val
|
26
|
+
(seq "d" (plus DIGIT) (opt (alt (plus (seq "." (plus DIGIT))) (seq "-" (plus DIGIT))))))
|
27
|
+
(terminal hex_val
|
28
|
+
(seq "x" (plus HEXDIG) (opt (alt (plus (seq "." (plus HEXDIG))) (seq "-" (plus HEXDIG))))))
|
29
|
+
(terminal prose_val (seq "<" (star (range "#x20-#x3D#x3F-#x7E")) ">"))
|
30
|
+
(terminal ALPHA (range "#x41-#x5A#x61-#x7A"))
|
31
|
+
(terminal BIT (alt "0" "1"))
|
32
|
+
(terminal CHAR (range "#x01-#x7F"))
|
33
|
+
(terminal CR (hex "#x0D"))
|
34
|
+
(terminal CRLF (seq (opt CR) LF))
|
35
|
+
(terminal CTL (alt (range "#x00-#x1F") (hex "#x7F")))
|
36
|
+
(terminal DIGIT (range "#x30-#x39"))
|
37
|
+
(terminal DQUOTE (hex "#x22"))
|
38
|
+
(terminal HEXDIG (alt DIGIT "A" "B" "C" "D" "E" "F"))
|
39
|
+
(terminal HTAB (hex "#x09"))
|
40
|
+
(terminal LF (hex "#x0A"))
|
41
|
+
(terminal LWSP (star (alt WSP (seq CRLF WSP))))
|
42
|
+
(terminal OCTET (range "#x00-#xFF"))
|
43
|
+
(terminal SP (hex "#x20"))
|
44
|
+
(terminal VCHAR (range "#x21-#x7E"))
|
45
|
+
(terminal WSP (alt SP HTAB)))
|
data/etc/ebnf.ebnf
CHANGED
@@ -3,10 +3,12 @@
|
|
3
3
|
|
4
4
|
[2] declaration ::= '@terminals' | pass
|
5
5
|
|
6
|
-
[3] rule ::= LHS expression
|
7
|
-
|
8
6
|
# Use the LHS terminal to match the identifier, rule name and assignment due to
|
9
|
-
# confusion between the identifier and RANGE
|
7
|
+
# confusion between the identifier and RANGE.
|
8
|
+
# Note, for grammars not using identifiers, it is still possible to confuse
|
9
|
+
# a rule ending with a range the next rule, as it may be interpreted as an identifier.
|
10
|
+
# In such case, best to enclose the rule in '()'.
|
11
|
+
[3] rule ::= LHS expression
|
10
12
|
|
11
13
|
[4] expression ::= alt
|
12
14
|
|
@@ -20,10 +22,8 @@
|
|
20
22
|
|
21
23
|
[9] primary ::= HEX
|
22
24
|
| SYMBOL
|
23
|
-
| ENUM
|
24
|
-
| O_ENUM
|
25
|
-
| RANGE
|
26
25
|
| O_RANGE
|
26
|
+
| RANGE
|
27
27
|
| STRING1
|
28
28
|
| STRING2
|
29
29
|
| '(' expression ')'
|
@@ -32,37 +32,31 @@
|
|
32
32
|
|
33
33
|
@terminals
|
34
34
|
|
35
|
-
[11] LHS ::= ('[' SYMBOL
|
35
|
+
[11] LHS ::= ('[' SYMBOL ']' ' '+)? SYMBOL ' '* '::='
|
36
36
|
|
37
37
|
[12] SYMBOL ::= ([a-z] | [A-Z] | [0-9] | '_' | '.')+
|
38
38
|
|
39
39
|
[13] HEX ::= '#x' ([a-f] | [A-F] | [0-9])+
|
40
40
|
|
41
|
-
[14]
|
42
|
-
|
43
|
-
[15] O_ENUM ::= '[^' R_CHAR+ | HEX+ ']'
|
44
|
-
|
45
|
-
[16] RANGE ::= '[' (R_CHAR '-' R_CHAR) | (HEX - HEX) ']'
|
41
|
+
[14] RANGE ::= '[' ((R_CHAR '-' R_CHAR) | (HEX '-' HEX) | R_CHAR | HEX)+ '-'? ']' - LHS
|
46
42
|
|
47
|
-
[
|
43
|
+
[15] O_RANGE ::= '[^' ((R_CHAR '-' R_CHAR) | (HEX '-' HEX) | R_CHAR | HEX)+ '-'? ']'
|
48
44
|
|
49
45
|
# Strings are unescaped Unicode, excepting control characters and hash (#)
|
50
|
-
[
|
46
|
+
[16] STRING1 ::= '"' (CHAR - '"')* '"'
|
51
47
|
|
52
|
-
[
|
48
|
+
[17] STRING2 ::= "'" (CHAR - "'")* "'"
|
53
49
|
|
54
|
-
[
|
50
|
+
[18] CHAR ::= [#x9#xA#xD] | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
|
55
51
|
|
56
|
-
[
|
52
|
+
[19] R_CHAR ::= CHAR - (']' | '-' | HEX)
|
57
53
|
|
58
|
-
|
59
|
-
[22] POSTFIX ::= [?*+]
|
54
|
+
[20] POSTFIX ::= [?*+]
|
60
55
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
56
|
+
# Ignore all whitespace and comments between non-terminals
|
57
|
+
[21] PASS ::= [#x9#xA#xD#x20]
|
58
|
+
| ( ('#' - '#x') | '//' ) [^#xA#xD]*
|
59
|
+
| '/*' (( '*' [^/] )? | [^*] )* '*/'
|
60
|
+
| '(*' (( '*' [^)] )? | [^*] )* '*)'
|
66
61
|
|
67
|
-
# Should be able to do this inline, but not until terminal regular expressions are created automatically
|
68
62
|
@pass PASS
|
data/etc/ebnf.html
CHANGED
@@ -1,207 +1,252 @@
|
|
1
|
-
|
2
|
-
<
|
3
|
-
<
|
4
|
-
<
|
5
|
-
<td
|
6
|
-
<td
|
7
|
-
<td>
|
8
|
-
(declaration
|
9
|
-
</
|
10
|
-
|
11
|
-
<
|
12
|
-
<td>
|
13
|
-
<td
|
14
|
-
<td
|
15
|
-
|
16
|
-
"
|
17
|
-
</td>
|
18
|
-
</
|
19
|
-
<
|
20
|
-
<td>
|
21
|
-
|
22
|
-
<
|
23
|
-
<td>
|
24
|
-
|
25
|
-
|
26
|
-
</
|
27
|
-
|
28
|
-
<
|
29
|
-
<td
|
30
|
-
<td
|
31
|
-
<td>
|
32
|
-
|
33
|
-
</
|
34
|
-
|
35
|
-
<
|
36
|
-
<td>
|
37
|
-
<td
|
38
|
-
<td
|
39
|
-
|
40
|
-
|
41
|
-
</td>
|
42
|
-
</
|
43
|
-
<
|
44
|
-
<td>
|
45
|
-
|
46
|
-
<
|
47
|
-
<td>
|
48
|
-
|
49
|
-
|
50
|
-
</
|
51
|
-
|
52
|
-
<
|
53
|
-
<td
|
54
|
-
<td
|
55
|
-
<td>
|
56
|
-
|
57
|
-
</
|
58
|
-
|
59
|
-
<
|
60
|
-
<td
|
61
|
-
<td
|
62
|
-
<td
|
63
|
-
|
64
|
-
|
65
|
-
</td>
|
66
|
-
|
67
|
-
<
|
68
|
-
<td>
|
69
|
-
|
70
|
-
<
|
71
|
-
<td>
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
</
|
82
|
-
|
83
|
-
<
|
84
|
-
<td
|
85
|
-
<td
|
86
|
-
<td
|
87
|
-
|
88
|
-
|
89
|
-
</td>
|
90
|
-
|
91
|
-
<
|
92
|
-
<td>
|
93
|
-
|
94
|
-
<
|
95
|
-
<td>
|
96
|
-
|
97
|
-
|
98
|
-
</
|
99
|
-
|
100
|
-
<
|
101
|
-
<td
|
102
|
-
<td
|
103
|
-
<td>
|
104
|
-
|
105
|
-
</
|
106
|
-
|
107
|
-
<
|
108
|
-
<td>
|
109
|
-
<td
|
110
|
-
<td
|
111
|
-
|
112
|
-
"
|
113
|
-
</td>
|
114
|
-
</
|
115
|
-
<
|
116
|
-
<td>[
|
117
|
-
|
118
|
-
<
|
119
|
-
<td>
|
120
|
-
|
121
|
-
|
122
|
-
</
|
123
|
-
|
124
|
-
<
|
125
|
-
<td
|
126
|
-
<td
|
127
|
-
<td>
|
128
|
-
"
|
129
|
-
</
|
130
|
-
|
131
|
-
<
|
132
|
-
<td
|
133
|
-
<td
|
134
|
-
<td
|
135
|
-
|
136
|
-
|
137
|
-
</td>
|
138
|
-
|
139
|
-
<
|
140
|
-
<td>
|
141
|
-
|
142
|
-
<
|
143
|
-
<td>
|
144
|
-
|
145
|
-
|
146
|
-
</
|
147
|
-
|
148
|
-
<
|
149
|
-
<td
|
150
|
-
<td
|
151
|
-
<td>
|
152
|
-
|
153
|
-
</
|
154
|
-
|
155
|
-
<
|
156
|
-
<td
|
157
|
-
<td
|
158
|
-
<td
|
159
|
-
|
160
|
-
"
|
161
|
-
</td>
|
162
|
-
|
163
|
-
<
|
164
|
-
<td>
|
165
|
-
|
166
|
-
<
|
167
|
-
<td>
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
</
|
174
|
-
<
|
175
|
-
<td
|
176
|
-
<td
|
177
|
-
|
178
|
-
<
|
179
|
-
|
180
|
-
</td>
|
181
|
-
|
182
|
-
<
|
183
|
-
|
184
|
-
<
|
185
|
-
<td
|
186
|
-
<td>
|
187
|
-
|
188
|
-
</td>
|
189
|
-
</tr>
|
190
|
-
<tr
|
191
|
-
<td>[
|
192
|
-
<td><code
|
193
|
-
<td
|
194
|
-
<td>
|
195
|
-
|
196
|
-
|
197
|
-
</
|
198
|
-
<
|
199
|
-
<td
|
200
|
-
<code
|
201
|
-
</
|
202
|
-
<
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
</
|
1
|
+
|
2
|
+
<table class="grammar">
|
3
|
+
<tbody id="grammar-productions" class="ebnf">
|
4
|
+
<tr id="grammar-production-ebnf">
|
5
|
+
<td>[1]</td>
|
6
|
+
<td><code>ebnf</code></td>
|
7
|
+
<td>::=</td>
|
8
|
+
<td><code>(</code> <a href="#grammar-production-declaration">declaration</a> <code>|</code> <a href="#grammar-production-rule">rule</a><code>)</code> <code>*</code> </td>
|
9
|
+
</tr>
|
10
|
+
<tr id="grammar-production-declaration">
|
11
|
+
<td>[2]</td>
|
12
|
+
<td><code>declaration</code></td>
|
13
|
+
<td>::=</td>
|
14
|
+
<td>"@terminals" <code>|</code> <a href="#grammar-production-pass">pass</a></td>
|
15
|
+
</tr>
|
16
|
+
<tr id="grammar-production-rule">
|
17
|
+
<td>[3]</td>
|
18
|
+
<td><code>rule</code></td>
|
19
|
+
<td>::=</td>
|
20
|
+
<td><a href="#grammar-production-LHS">LHS</a> <a href="#grammar-production-expression">expression</a></td>
|
21
|
+
</tr>
|
22
|
+
<tr id="grammar-production-expression">
|
23
|
+
<td>[4]</td>
|
24
|
+
<td><code>expression</code></td>
|
25
|
+
<td>::=</td>
|
26
|
+
<td><a href="#grammar-production-alt">alt</a></td>
|
27
|
+
</tr>
|
28
|
+
<tr id="grammar-production-alt">
|
29
|
+
<td>[5]</td>
|
30
|
+
<td><code>alt</code></td>
|
31
|
+
<td>::=</td>
|
32
|
+
<td><a href="#grammar-production-seq">seq</a> <code>(</code> "<code class="grammar-literal">|</code>" <a href="#grammar-production-seq">seq</a><code>)</code> <code>*</code> </td>
|
33
|
+
</tr>
|
34
|
+
<tr id="grammar-production-seq">
|
35
|
+
<td>[6]</td>
|
36
|
+
<td><code>seq</code></td>
|
37
|
+
<td>::=</td>
|
38
|
+
<td><a href="#grammar-production-diff">diff</a><code>+</code> </td>
|
39
|
+
</tr>
|
40
|
+
<tr id="grammar-production-diff">
|
41
|
+
<td>[7]</td>
|
42
|
+
<td><code>diff</code></td>
|
43
|
+
<td>::=</td>
|
44
|
+
<td><a href="#grammar-production-postfix">postfix</a> <code>(</code> "<code class="grammar-literal">-</code>" <a href="#grammar-production-postfix">postfix</a><code>)</code> <code>?</code> </td>
|
45
|
+
</tr>
|
46
|
+
<tr id="grammar-production-postfix">
|
47
|
+
<td>[8]</td>
|
48
|
+
<td><code>postfix</code></td>
|
49
|
+
<td>::=</td>
|
50
|
+
<td><a href="#grammar-production-primary">primary</a> <a href="#grammar-production-POSTFIX">POSTFIX</a><code>?</code> </td>
|
51
|
+
</tr>
|
52
|
+
<tr id="grammar-production-primary">
|
53
|
+
<td>[9]</td>
|
54
|
+
<td><code>primary</code></td>
|
55
|
+
<td>::=</td>
|
56
|
+
<td><a href="#grammar-production-HEX">HEX</a></td>
|
57
|
+
</tr>
|
58
|
+
<tr>
|
59
|
+
<td>[9]</td>
|
60
|
+
<td><code></code></td>
|
61
|
+
<td>|</td>
|
62
|
+
<td><a href="#grammar-production-SYMBOL">SYMBOL</a></td>
|
63
|
+
</tr>
|
64
|
+
<tr>
|
65
|
+
<td>[9]</td>
|
66
|
+
<td><code></code></td>
|
67
|
+
<td>|</td>
|
68
|
+
<td><a href="#grammar-production-O_RANGE">O_RANGE</a></td>
|
69
|
+
</tr>
|
70
|
+
<tr>
|
71
|
+
<td>[9]</td>
|
72
|
+
<td><code></code></td>
|
73
|
+
<td>|</td>
|
74
|
+
<td><a href="#grammar-production-RANGE">RANGE</a></td>
|
75
|
+
</tr>
|
76
|
+
<tr>
|
77
|
+
<td>[9]</td>
|
78
|
+
<td><code></code></td>
|
79
|
+
<td>|</td>
|
80
|
+
<td><a href="#grammar-production-STRING1">STRING1</a></td>
|
81
|
+
</tr>
|
82
|
+
<tr>
|
83
|
+
<td>[9]</td>
|
84
|
+
<td><code></code></td>
|
85
|
+
<td>|</td>
|
86
|
+
<td><a href="#grammar-production-STRING2">STRING2</a></td>
|
87
|
+
</tr>
|
88
|
+
<tr>
|
89
|
+
<td>[9]</td>
|
90
|
+
<td><code></code></td>
|
91
|
+
<td>|</td>
|
92
|
+
<td><code>(</code> "<code class="grammar-literal">(</code>" <a href="#grammar-production-expression">expression</a> "<code class="grammar-literal">)</code>"<code>)</code> </td>
|
93
|
+
</tr>
|
94
|
+
<tr id="grammar-production-pass">
|
95
|
+
<td>[10]</td>
|
96
|
+
<td><code>pass</code></td>
|
97
|
+
<td>::=</td>
|
98
|
+
<td>"@pass" <a href="#grammar-production-expression">expression</a></td>
|
99
|
+
</tr>
|
100
|
+
<tr id="grammar-production-">
|
101
|
+
<td>@terminals</td>
|
102
|
+
<td><code></code></td>
|
103
|
+
<td></td>
|
104
|
+
<td><strong>Productions for terminals</strong></td>
|
105
|
+
</tr>
|
106
|
+
<tr id="grammar-production-LHS">
|
107
|
+
<td>[11]</td>
|
108
|
+
<td><code>LHS</code></td>
|
109
|
+
<td>::=</td>
|
110
|
+
<td><code>(</code> "<code class="grammar-literal">[</code>" <a href="#grammar-production-SYMBOL">SYMBOL</a> "<code class="grammar-literal">]</code>" <code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code>+</code> <code>)</code> <code>?</code> <a href="#grammar-production-SYMBOL">SYMBOL</a> <code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code>*</code> "::="</td>
|
111
|
+
</tr>
|
112
|
+
<tr id="grammar-production-SYMBOL">
|
113
|
+
<td>[12]</td>
|
114
|
+
<td><code>SYMBOL</code></td>
|
115
|
+
<td>::=</td>
|
116
|
+
<td><code>(</code> <code>[</code> <code class="grammar-literal">a-z</code><code>]</code> <code>|</code> <code>[</code> <code class="grammar-literal">A-Z</code><code>]</code> <code>|</code> <code>[</code> <code class="grammar-literal">0-9</code><code>]</code> <code>|</code> "<code class="grammar-literal">_</code>" <code>|</code> "<code class="grammar-literal">.</code>"<code>)</code> <code>+</code> </td>
|
117
|
+
</tr>
|
118
|
+
<tr id="grammar-production-HEX">
|
119
|
+
<td>[13]</td>
|
120
|
+
<td><code>HEX</code></td>
|
121
|
+
<td>::=</td>
|
122
|
+
<td>"#x" <code>(</code> <code>[</code> <code class="grammar-literal">a-f</code><code>]</code> <code>|</code> <code>[</code> <code class="grammar-literal">A-F</code><code>]</code> <code>|</code> <code>[</code> <code class="grammar-literal">0-9</code><code>]</code> <code>)</code> <code>+</code> </td>
|
123
|
+
</tr>
|
124
|
+
<tr id="grammar-production-RANGE">
|
125
|
+
<td>[14]</td>
|
126
|
+
<td><code>RANGE</code></td>
|
127
|
+
<td>::=</td>
|
128
|
+
<td>"<code class="grammar-literal">[</code>"</td>
|
129
|
+
</tr>
|
130
|
+
<tr id="grammar-production-">
|
131
|
+
<td>[14]</td>
|
132
|
+
<td><code></code></td>
|
133
|
+
<td></td>
|
134
|
+
<td><code>(</code> <code>(</code> <a href="#grammar-production-R_CHAR">R_CHAR</a> "<code class="grammar-literal">-</code>" <a href="#grammar-production-R_CHAR">R_CHAR</a><code>)</code><code>(</code> <a href="#grammar-production-HEX">HEX</a> "<code class="grammar-literal">-</code>" <a href="#grammar-production-HEX">HEX</a><code>)</code> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a> <code>|</code> <a href="#grammar-production-HEX">HEX</a><code>)</code> <code>+</code></td>
|
135
|
+
</tr>
|
136
|
+
<tr id="grammar-production-">
|
137
|
+
<td>[14]</td>
|
138
|
+
<td><code></code></td>
|
139
|
+
<td></td>
|
140
|
+
<td>"<code class="grammar-literal">-</code>"<code>?</code></td>
|
141
|
+
</tr>
|
142
|
+
<tr id="grammar-production-">
|
143
|
+
<td>[14]</td>
|
144
|
+
<td><code></code></td>
|
145
|
+
<td></td>
|
146
|
+
<td><code>(</code> "<code class="grammar-literal">]</code>" <code>-</code> <a href="#grammar-production-LHS">LHS</a><code>)</code> </td>
|
147
|
+
</tr>
|
148
|
+
<tr id="grammar-production-O_RANGE">
|
149
|
+
<td>[15]</td>
|
150
|
+
<td><code>O_RANGE</code></td>
|
151
|
+
<td>::=</td>
|
152
|
+
<td>"[^"</td>
|
153
|
+
</tr>
|
154
|
+
<tr id="grammar-production-">
|
155
|
+
<td>[15]</td>
|
156
|
+
<td><code></code></td>
|
157
|
+
<td></td>
|
158
|
+
<td><code>(</code> <code>(</code> <a href="#grammar-production-R_CHAR">R_CHAR</a> "<code class="grammar-literal">-</code>" <a href="#grammar-production-R_CHAR">R_CHAR</a><code>)</code><code>(</code> <a href="#grammar-production-HEX">HEX</a> "<code class="grammar-literal">-</code>" <a href="#grammar-production-HEX">HEX</a><code>)</code> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a> <code>|</code> <a href="#grammar-production-HEX">HEX</a><code>)</code> <code>+</code></td>
|
159
|
+
</tr>
|
160
|
+
<tr id="grammar-production-">
|
161
|
+
<td>[15]</td>
|
162
|
+
<td><code></code></td>
|
163
|
+
<td></td>
|
164
|
+
<td>"<code class="grammar-literal">-</code>"<code>?</code></td>
|
165
|
+
</tr>
|
166
|
+
<tr id="grammar-production-">
|
167
|
+
<td>[15]</td>
|
168
|
+
<td><code></code></td>
|
169
|
+
<td></td>
|
170
|
+
<td>"<code class="grammar-literal">]</code>"</td>
|
171
|
+
</tr>
|
172
|
+
<tr id="grammar-production-STRING1">
|
173
|
+
<td>[16]</td>
|
174
|
+
<td><code>STRING1</code></td>
|
175
|
+
<td>::=</td>
|
176
|
+
<td>'<code class="grammar-literal">"</code>' <code>(</code> <a href="#grammar-production-CHAR">CHAR</a> <code>-</code> '<code class="grammar-literal">"</code>'<code>)</code> <code>*</code> '<code class="grammar-literal">"</code>'</td>
|
177
|
+
</tr>
|
178
|
+
<tr id="grammar-production-STRING2">
|
179
|
+
<td>[17]</td>
|
180
|
+
<td><code>STRING2</code></td>
|
181
|
+
<td>::=</td>
|
182
|
+
<td>"<code class="grammar-literal">'</code>" <code>(</code> <a href="#grammar-production-CHAR">CHAR</a> <code>-</code> "<code class="grammar-literal">'</code>"<code>)</code> <code>*</code> "<code class="grammar-literal">'</code>"</td>
|
183
|
+
</tr>
|
184
|
+
<tr id="grammar-production-CHAR">
|
185
|
+
<td>[18]</td>
|
186
|
+
<td><code>CHAR</code></td>
|
187
|
+
<td>::=</td>
|
188
|
+
<td><code>[</code> <code class="grammar-char-escape"><abbr title="horizontal tab">#x09</abbr></code><code class="grammar-char-escape"><abbr title="new line">#x0A</abbr></code><code class="grammar-char-escape"><abbr title="carriage return">#x0D</abbr></code><code>]</code></td>
|
189
|
+
</tr>
|
190
|
+
<tr>
|
191
|
+
<td>[18]</td>
|
192
|
+
<td><code></code></td>
|
193
|
+
<td>|</td>
|
194
|
+
<td><code>[</code> <code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode ''">#xD7FF</abbr></code><code>]</code></td>
|
195
|
+
</tr>
|
196
|
+
<tr>
|
197
|
+
<td>[18]</td>
|
198
|
+
<td><code></code></td>
|
199
|
+
<td>|</td>
|
200
|
+
<td><code>[</code> <code class="grammar-char-escape"><abbr title="unicode ''">#xE000</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode '�'">#xFFFD</abbr></code><code>]</code></td>
|
201
|
+
</tr>
|
202
|
+
<tr>
|
203
|
+
<td>[18]</td>
|
204
|
+
<td><code></code></td>
|
205
|
+
<td>|</td>
|
206
|
+
<td><code>[</code> <code class="grammar-char-escape"><abbr title="unicode '𐀀'">#x00010000</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode ''">#x0010FFFF</abbr></code><code>]</code> </td>
|
207
|
+
</tr>
|
208
|
+
<tr id="grammar-production-R_CHAR">
|
209
|
+
<td>[19]</td>
|
210
|
+
<td><code>R_CHAR</code></td>
|
211
|
+
<td>::=</td>
|
212
|
+
<td><a href="#grammar-production-CHAR">CHAR</a> <code>-</code> <code>(</code> "<code class="grammar-literal">]</code>" <code>|</code> "<code class="grammar-literal">-</code>" <code>|</code> <a href="#grammar-production-HEX">HEX</a><code>)</code> </td>
|
213
|
+
</tr>
|
214
|
+
<tr id="grammar-production-POSTFIX">
|
215
|
+
<td>[20]</td>
|
216
|
+
<td><code>POSTFIX</code></td>
|
217
|
+
<td>::=</td>
|
218
|
+
<td><code>[</code> <code class="grammar-literal">?*+</code><code>]</code> </td>
|
219
|
+
</tr>
|
220
|
+
<tr id="grammar-production-PASS">
|
221
|
+
<td>[21]</td>
|
222
|
+
<td><code>PASS</code></td>
|
223
|
+
<td>::=</td>
|
224
|
+
<td><code>[</code> <code class="grammar-char-escape"><abbr title="horizontal tab">#x09</abbr></code><code class="grammar-char-escape"><abbr title="new line">#x0A</abbr></code><code class="grammar-char-escape"><abbr title="carriage return">#x0D</abbr></code><code class="grammar-char-escape"><abbr title="space">#x20</abbr></code><code>]</code></td>
|
225
|
+
</tr>
|
226
|
+
<tr>
|
227
|
+
<td>[21]</td>
|
228
|
+
<td><code></code></td>
|
229
|
+
<td>|</td>
|
230
|
+
<td><code>(</code> <code>(</code> <code>(</code> "<code class="grammar-literal">#</code>" <code>-</code> "#x"<code>)</code> <code>|</code> "//"<code>)</code> <code>[</code> <code class="grammar-literal">^</code><code class="grammar-char-escape"><abbr title="new line">#x0A</abbr></code><code class="grammar-char-escape"><abbr title="carriage return">#x0D</abbr></code><code>]</code> <code>*</code> <code>)</code></td>
|
231
|
+
</tr>
|
232
|
+
<tr>
|
233
|
+
<td>[21]</td>
|
234
|
+
<td><code></code></td>
|
235
|
+
<td>|</td>
|
236
|
+
<td><code>(</code> "/*" <code>(</code> <code>(</code> "<code class="grammar-literal">*</code>" <code>[</code> <code class="grammar-literal">^/</code><code>]</code> <code>)</code> <code>?</code> <code>|</code> <code>[</code> <code class="grammar-literal">^*</code><code>]</code> <code>)</code> <code>*</code> "*/"<code>)</code></td>
|
237
|
+
</tr>
|
238
|
+
<tr>
|
239
|
+
<td>[21]</td>
|
240
|
+
<td><code></code></td>
|
241
|
+
<td>|</td>
|
242
|
+
<td><code>(</code> "(*" <code>(</code> <code>(</code> "<code class="grammar-literal">*</code>" <code>[</code> <code class="grammar-literal">^)</code><code>]</code> <code>)</code> <code>?</code> <code>|</code> <code>[</code> <code class="grammar-literal">^*</code><code>]</code> <code>)</code> <code>*</code> "*)"<code>)</code> </td>
|
243
|
+
</tr>
|
244
|
+
<tr id="grammar-production-">
|
245
|
+
<td>@pass</td>
|
246
|
+
<td><code></code></td>
|
247
|
+
<td></td>
|
248
|
+
<td></td>
|
249
|
+
</tr>
|
250
|
+
</tbody>
|
207
251
|
</table>
|
252
|
+
|