ebnf 1.2.0 → 2.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +223 -199
- data/UNLICENSE +1 -1
- data/VERSION +1 -1
- data/bin/ebnf +38 -19
- 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/doap.ttl +23 -18
- data/etc/ebnf.ebnf +21 -33
- data/etc/ebnf.html +76 -160
- data/etc/{ebnf.rb → ebnf.ll1.rb} +30 -107
- data/etc/ebnf.ll1.sxp +182 -183
- data/etc/ebnf.peg.rb +90 -0
- data/etc/ebnf.peg.sxp +84 -0
- data/etc/ebnf.sxp +40 -41
- 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.html +1603 -1751
- data/etc/sparql.ll1.sxp +7372 -7372
- data/etc/sparql.peg.rb +532 -0
- data/etc/sparql.peg.sxp +597 -0
- data/etc/sparql.sxp +363 -362
- data/etc/turtle.ebnf +3 -3
- data/etc/turtle.html +465 -517
- data/etc/{turtle.rb → turtle.ll1.rb} +3 -4
- data/etc/turtle.ll1.sxp +425 -425
- data/etc/turtle.peg.rb +182 -0
- data/etc/turtle.peg.sxp +199 -0
- data/etc/turtle.sxp +103 -101
- data/lib/ebnf.rb +6 -1
- 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 +114 -69
- data/lib/ebnf/bnf.rb +1 -26
- 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 +131 -3
- data/lib/ebnf/ll1/lexer.rb +20 -22
- data/lib/ebnf/ll1/parser.rb +97 -64
- data/lib/ebnf/ll1/scanner.rb +82 -50
- data/lib/ebnf/native.rb +320 -0
- data/lib/ebnf/parser.rb +285 -302
- data/lib/ebnf/peg.rb +39 -0
- data/lib/ebnf/peg/parser.rb +561 -0
- data/lib/ebnf/peg/rule.rb +250 -0
- data/lib/ebnf/rule.rb +442 -148
- data/lib/ebnf/terminals.rb +21 -0
- data/lib/ebnf/writer.rb +587 -82
- metadata +125 -18
- data/etc/sparql.rb +0 -45773
data/etc/doap.ttl
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
@base <https://rubygems.org/gems/ebnf> .
|
1
2
|
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
2
3
|
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
3
4
|
@prefix dc: <http://purl.org/dc/terms/> .
|
@@ -7,26 +8,30 @@
|
|
7
8
|
@prefix ex: <http://example.org/> .
|
8
9
|
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
9
10
|
|
10
|
-
|
11
|
+
<> a doap:Project, earl:TestSubject, earl:Software ;
|
11
12
|
doap:name "ebnf" ;
|
12
|
-
doap:homepage <
|
13
|
-
doap:license <
|
14
|
-
doap:shortdesc "EBNF parser and parser generator"@en ;
|
15
|
-
doap:description "EBNF is a Ruby parser for W3C EBNF and a parser generator for
|
13
|
+
doap:homepage <https://github.com/dryruby/ebnf> ;
|
14
|
+
doap:license <https://unlicense.org/1.0/> ;
|
15
|
+
doap:shortdesc "EBNF parser and parser generator in Ruby."@en ;
|
16
|
+
doap:description "EBNF is a Ruby parser for W3C EBNF and a parser generator for PEG and LL(1). Also includes parsing modes for ISO EBNF and ABNF."@en ;
|
16
17
|
doap:created "2011-08-29"^^xsd:date ;
|
17
18
|
doap:programming-language "Ruby" ;
|
18
|
-
doap:implements <http://dbpedia.org/resource/Compiler-compiler
|
19
|
+
doap:implements <http://dbpedia.org/resource/Compiler-compiler>,
|
20
|
+
<https://en.wikipedia.org/wiki/LL_parser>,
|
21
|
+
<https://en.wikipedia.org/wiki/Parsing_expression_grammar>,
|
22
|
+
<https://pdos.csail.mit.edu/~baford/packrat/thesis/>,
|
23
|
+
<https://www.w3.org/TR/REC-xml/#sec-notation>,
|
24
|
+
<https://en.wikipedia.org/wiki/Backus–Naur_form>,
|
25
|
+
<https://www.iso.org/standard/26153.html>,
|
26
|
+
<https://www.rfc-editor.org/rfc/rfc5234>;
|
19
27
|
doap:category <http://dbpedia.org/resource/Resource_Description_Framework>,
|
20
28
|
<http://dbpedia.org/resource/Ruby_(programming_language)> ;
|
21
|
-
doap:download-page
|
22
|
-
doap:mailing-list <
|
23
|
-
doap:bug-database <
|
24
|
-
doap:blog <
|
25
|
-
doap:developer <
|
26
|
-
doap:maintainer <
|
27
|
-
doap:documenter <
|
28
|
-
foaf:maker <
|
29
|
-
dc:
|
30
|
-
dc:description "EBNF is a Ruby parser for W3C EBNF and a parser generator for compliant LL(1) grammars."@en ;
|
31
|
-
dc:date "2011-08-29"^^xsd:date ;
|
32
|
-
dc:creator <http://greggkellogg.net/foaf#me> .
|
29
|
+
doap:download-page <> ;
|
30
|
+
doap:mailing-list <https://lists.w3.org/Archives/Public/public-rdf-ruby/> ;
|
31
|
+
doap:bug-database <https://github.com/dryruby/ebnf/issues> ;
|
32
|
+
doap:blog <https://greggkellogg.net/> ;
|
33
|
+
doap:developer <https://greggkellogg.net/foaf#me> ;
|
34
|
+
doap:maintainer <https://greggkellogg.net/foaf#me> ;
|
35
|
+
doap:documenter <https://greggkellogg.net/foaf#me> ;
|
36
|
+
foaf:maker <https://greggkellogg.net/foaf#me> ;
|
37
|
+
dc:creator <https://greggkellogg.net/foaf#me> .
|
data/etc/ebnf.ebnf
CHANGED
@@ -3,11 +3,13 @@
|
|
3
3
|
|
4
4
|
[2] declaration ::= '@terminals' | pass
|
5
5
|
|
6
|
+
# Use the LHS terminal to match the identifier, rule name and assignment due to
|
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 '()'.
|
6
11
|
[3] rule ::= LHS expression
|
7
12
|
|
8
|
-
# Use a terminal to match the identifier, rule name and assignment due to
|
9
|
-
# confusion between the identifier RANGE
|
10
|
-
|
11
13
|
[4] expression ::= alt
|
12
14
|
|
13
15
|
[5] alt ::= seq ('|' seq)*
|
@@ -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,43 +32,31 @@
|
|
32
32
|
|
33
33
|
@terminals
|
34
34
|
|
35
|
-
[11] LHS ::= ('[' SYMBOL
|
35
|
+
[11] LHS ::= ('[' SYMBOL ']' ' '+)? SYMBOL ' '* '::='
|
36
36
|
|
37
|
-
[12] SYMBOL ::= ([a-z] | [A-Z] | [0-9] |
|
37
|
+
[12] SYMBOL ::= ([a-z] | [A-Z] | [0-9] | '_' | '.')+
|
38
38
|
|
39
|
-
[13] HEX ::= '#x' ([
|
39
|
+
[13] HEX ::= '#x' ([a-f] | [A-F] | [0-9])+
|
40
40
|
|
41
|
-
[14]
|
41
|
+
[14] RANGE ::= '[' ((R_CHAR '-' R_CHAR) | (HEX '-' HEX) | R_CHAR | HEX)+ '-'? ']' - LHS
|
42
42
|
|
43
|
-
[15]
|
44
|
-
|
45
|
-
# Range is any combination of R_CHAR '-' R_CHAR or R_CHAR+
|
46
|
-
[16] RANGE ::= '[' ((R_BEGIN (HEX | R_CHAR)) | (HEX | R_CHAR))+ ']'
|
47
|
-
|
48
|
-
# Range is any combination of R_CHAR '-' R_CHAR or R_CHAR+ preceded by ^
|
49
|
-
[17] O_RANGE ::= '[^' ((R_BEGIN (HEX | R_CHAR)) | (HEX | R_CHAR))+ ']'
|
43
|
+
[15] O_RANGE ::= '[^' ((R_CHAR '-' R_CHAR) | (HEX '-' HEX) | R_CHAR | HEX)+ '-'? ']'
|
50
44
|
|
51
45
|
# Strings are unescaped Unicode, excepting control characters and hash (#)
|
52
|
-
[
|
53
|
-
|
54
|
-
[19] STRING2 ::= "'" (CHAR - "'")* "'"
|
46
|
+
[16] STRING1 ::= '"' (CHAR - '"')* '"'
|
55
47
|
|
56
|
-
[
|
57
|
-
| [#x20#x21#x22]
|
58
|
-
| [#x24-#x00FFFFFF]
|
48
|
+
[17] STRING2 ::= "'" (CHAR - "'")* "'"
|
59
49
|
|
60
|
-
[
|
50
|
+
[18] CHAR ::= [#x9#xA#xD] | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
|
61
51
|
|
62
|
-
[
|
52
|
+
[19] R_CHAR ::= CHAR - (']' | '-' | HEX)
|
63
53
|
|
64
|
-
|
65
|
-
[23] POSTFIX ::= [?*+]
|
54
|
+
[20] POSTFIX ::= [?*+]
|
66
55
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
56
|
+
# Ignore all whitespace and comments between non-terminals
|
57
|
+
[21] PASS ::= [#x9#xA#xD#x20]
|
58
|
+
| ( ('#' - '#x') | '//' ) [^#xA#xD]*
|
59
|
+
| '/*' (( '*' [^/] )? | [^*] )* '*/'
|
60
|
+
| '(*' (( '*' [^)] )? | [^*] )* '*)'
|
72
61
|
|
73
|
-
# Should be able to do this inline, but not until terminal regular expressions are created automatically
|
74
62
|
@pass PASS
|
data/etc/ebnf.html
CHANGED
@@ -1,241 +1,157 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
|
2
|
+
<table class="grammar">
|
3
|
+
<tbody id="grammar-productions" class="ebnf">
|
4
|
+
<tr id="grammar-production-ebnf">
|
4
5
|
<td>[1]</td>
|
5
6
|
<td><code>ebnf</code></td>
|
6
7
|
<td>::=</td>
|
7
|
-
<td>
|
8
|
-
(<a href="#grammar-production-declaration">declaration</a> <code>|</code> <a href="#grammar-production-rule">rule</a>)<code>*</code>
|
9
|
-
</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>
|
10
9
|
</tr>
|
11
|
-
<tr id=
|
10
|
+
<tr id="grammar-production-declaration">
|
12
11
|
<td>[2]</td>
|
13
12
|
<td><code>declaration</code></td>
|
14
13
|
<td>::=</td>
|
15
|
-
<td>
|
16
|
-
"<code class="grammar-literal">@terminals</code>"
|
17
|
-
<code>|</code> <a href="#grammar-production-pass">pass</a>
|
18
|
-
</td>
|
14
|
+
<td>"@terminals" <code>|</code> <a href="#grammar-production-pass">pass</a></td>
|
19
15
|
</tr>
|
20
|
-
<tr id=
|
16
|
+
<tr id="grammar-production-rule">
|
21
17
|
<td>[3]</td>
|
22
18
|
<td><code>rule</code></td>
|
23
19
|
<td>::=</td>
|
24
|
-
<td>
|
25
|
-
<a href="#grammar-production-LHS">LHS</a>
|
26
|
-
<a href="#grammar-production-expression">expression</a>
|
27
|
-
</td>
|
20
|
+
<td><a href="#grammar-production-LHS">LHS</a> <a href="#grammar-production-expression">expression</a></td>
|
28
21
|
</tr>
|
29
|
-
<tr id=
|
22
|
+
<tr id="grammar-production-expression">
|
30
23
|
<td>[4]</td>
|
31
24
|
<td><code>expression</code></td>
|
32
25
|
<td>::=</td>
|
33
|
-
<td>
|
34
|
-
<a href="#grammar-production-alt">alt</a>
|
35
|
-
</td>
|
26
|
+
<td><a href="#grammar-production-alt">alt</a></td>
|
36
27
|
</tr>
|
37
|
-
<tr id=
|
28
|
+
<tr id="grammar-production-alt">
|
38
29
|
<td>[5]</td>
|
39
30
|
<td><code>alt</code></td>
|
40
31
|
<td>::=</td>
|
41
|
-
<td>
|
42
|
-
<a href="#grammar-production-seq">seq</a>
|
43
|
-
("<code class="grammar-literal">|</code>" <a href="#grammar-production-seq">seq</a>)<code>*</code>
|
44
|
-
</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>
|
45
33
|
</tr>
|
46
|
-
<tr id=
|
34
|
+
<tr id="grammar-production-seq">
|
47
35
|
<td>[6]</td>
|
48
36
|
<td><code>seq</code></td>
|
49
37
|
<td>::=</td>
|
50
|
-
<td>
|
51
|
-
<a href="#grammar-production-diff">diff</a><code>+</code>
|
52
|
-
</td>
|
38
|
+
<td><a href="#grammar-production-diff">diff</a><code>+</code> </td>
|
53
39
|
</tr>
|
54
|
-
<tr id=
|
40
|
+
<tr id="grammar-production-diff">
|
55
41
|
<td>[7]</td>
|
56
42
|
<td><code>diff</code></td>
|
57
43
|
<td>::=</td>
|
58
|
-
<td>
|
59
|
-
<a href="#grammar-production-postfix">postfix</a>
|
60
|
-
("<code class="grammar-literal">-</code>" <a href="#grammar-production-postfix">postfix</a>)<code>?</code>
|
61
|
-
</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>
|
62
45
|
</tr>
|
63
|
-
<tr id=
|
46
|
+
<tr id="grammar-production-postfix">
|
64
47
|
<td>[8]</td>
|
65
48
|
<td><code>postfix</code></td>
|
66
49
|
<td>::=</td>
|
67
|
-
<td>
|
68
|
-
<a href="#grammar-production-primary">primary</a>
|
69
|
-
<a href="#grammar-production-POSTFIX">POSTFIX</a><code>?</code>
|
70
|
-
</td>
|
50
|
+
<td><a href="#grammar-production-primary">primary</a> <a href="#grammar-production-POSTFIX">POSTFIX</a><code>?</code> </td>
|
71
51
|
</tr>
|
72
|
-
<tr id=
|
52
|
+
<tr id="grammar-production-primary">
|
73
53
|
<td>[9]</td>
|
74
54
|
<td><code>primary</code></td>
|
75
55
|
<td>::=</td>
|
76
|
-
<td>
|
77
|
-
|
78
|
-
|
79
|
-
<code>|</code> <a href="#grammar-production-ENUM">ENUM</a>
|
80
|
-
<code>|</code> <a href="#grammar-production-O_ENUM">O_ENUM</a>
|
81
|
-
<code>|</code> <a href="#grammar-production-RANGE">RANGE</a>
|
82
|
-
<code>|</code> <a href="#grammar-production-O_RANGE">O_RANGE</a>
|
83
|
-
<code>|</code> <a href="#grammar-production-STRING1">STRING1</a>
|
84
|
-
<code>|</code> <a href="#grammar-production-STRING2">STRING2</a>
|
85
|
-
<code>|</code> "<code class="grammar-literal">(</code>" <a href="#grammar-production-expression">expression</a> "<code class="grammar-literal">)</code>"
|
86
|
-
</td>
|
87
|
-
</tr>
|
88
|
-
<tr id='grammar-production-pass'>
|
56
|
+
<td><a href="#grammar-production-HEX">HEX</a> <code>|</code> <a href="#grammar-production-SYMBOL">SYMBOL</a> <code>|</code> <a href="#grammar-production-O_RANGE">O_RANGE</a> <code>|</code> <a href="#grammar-production-RANGE">RANGE</a> <code>|</code> <a href="#grammar-production-STRING1">STRING1</a> <code>|</code> <a href="#grammar-production-STRING2">STRING2</a> <code>|</code> <code>(</code> "<code class="grammar-literal">(</code>" <a href="#grammar-production-expression">expression</a> "<code class="grammar-literal">)</code>"<code>)</code> </td>
|
57
|
+
</tr>
|
58
|
+
<tr id="grammar-production-pass">
|
89
59
|
<td>[10]</td>
|
90
60
|
<td><code>pass</code></td>
|
91
61
|
<td>::=</td>
|
92
|
-
<td>
|
93
|
-
|
94
|
-
|
95
|
-
</td>
|
62
|
+
<td>"@pass" <a href="#grammar-production-expression">expression</a></td>
|
63
|
+
</tr>
|
64
|
+
<tr>
|
65
|
+
<td colspan=2>@terminals</td>
|
66
|
+
<td></td>
|
67
|
+
<td><strong># Productions for terminals</strong></td>
|
96
68
|
</tr>
|
97
|
-
<tr id=
|
69
|
+
<tr id="grammar-production-LHS">
|
98
70
|
<td>[11]</td>
|
99
71
|
<td><code>LHS</code></td>
|
100
72
|
<td>::=</td>
|
101
|
-
<td>
|
102
|
-
("<code class="grammar-literal">[</code>" <a href="#grammar-production-SYMBOL">SYMBOL</a><code>+</code> "<code class="grammar-literal">]</code>")<code>?</code>
|
103
|
-
<a href="#grammar-production-SYMBOL">SYMBOL</a>
|
104
|
-
"<code class="grammar-literal">::=</code>"
|
105
|
-
</td>
|
73
|
+
<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>
|
106
74
|
</tr>
|
107
|
-
<tr id=
|
75
|
+
<tr id="grammar-production-SYMBOL">
|
108
76
|
<td>[12]</td>
|
109
77
|
<td><code>SYMBOL</code></td>
|
110
78
|
<td>::=</td>
|
111
|
-
<td>
|
112
|
-
(<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>
|
113
|
-
</td>
|
79
|
+
<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>
|
114
80
|
</tr>
|
115
|
-
<tr id=
|
81
|
+
<tr id="grammar-production-HEX">
|
116
82
|
<td>[13]</td>
|
117
83
|
<td><code>HEX</code></td>
|
118
84
|
<td>::=</td>
|
119
|
-
<td>
|
120
|
-
"<code class="grammar-literal">#x</code>"
|
121
|
-
(<code>[</code> <code class="grammar-literal">0-9</code><code>]</code> <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>
|
122
|
-
</td>
|
85
|
+
<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
86
|
</tr>
|
124
|
-
<tr id=
|
87
|
+
<tr id="grammar-production-RANGE">
|
125
88
|
<td>[14]</td>
|
126
|
-
<td><code>
|
89
|
+
<td><code>RANGE</code></td>
|
127
90
|
<td>::=</td>
|
128
|
-
<td>
|
129
|
-
"<code class="grammar-literal">[</code>"
|
130
|
-
<code>(</code> <a href="#grammar-production-R_BEGIN">R_BEGIN</a> <code>(</code> <a href="#grammar-production-HEX">HEX</a> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a><code>)</code> <code>|</code> <a href="#grammar-production-HEX">HEX</a> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a><code>)</code>
|
131
|
-
"<code class="grammar-literal">-</code>"
|
132
|
-
<code>(</code> <a href="#grammar-production-R_BEGIN">R_BEGIN</a> <code>(</code> <a href="#grammar-production-HEX">HEX</a> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a><code>)</code> <code>|</code> <a href="#grammar-production-HEX">HEX</a> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a><code>)</code>
|
133
|
-
"<code class="grammar-literal">]</code>"
|
134
|
-
</td>
|
91
|
+
<td>"<code class="grammar-literal">[</code>" <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> <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> "<code class="grammar-literal">-</code>"<code>?</code> <code>(</code> "<code class="grammar-literal">]</code>" <code>-</code> <a href="#grammar-production-LHS">LHS</a><code>)</code> </td>
|
135
92
|
</tr>
|
136
|
-
<tr id=
|
93
|
+
<tr id="grammar-production-O_RANGE">
|
137
94
|
<td>[15]</td>
|
138
|
-
<td><code>
|
95
|
+
<td><code>O_RANGE</code></td>
|
139
96
|
<td>::=</td>
|
140
|
-
<td>
|
141
|
-
"<code class="grammar-literal">[^</code>"
|
142
|
-
<code>(</code> <a href="#grammar-production-R_BEGIN">R_BEGIN</a> <code>(</code> <a href="#grammar-production-HEX">HEX</a> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a><code>)</code> <code>|</code> <a href="#grammar-production-HEX">HEX</a> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a><code>)</code>
|
143
|
-
"<code class="grammar-literal">-</code>"
|
144
|
-
<code>(</code> <a href="#grammar-production-R_BEGIN">R_BEGIN</a> <code>(</code> <a href="#grammar-production-HEX">HEX</a> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a><code>)</code> <code>|</code> <a href="#grammar-production-HEX">HEX</a> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a><code>)</code>
|
145
|
-
"<code class="grammar-literal">]</code>"
|
146
|
-
</td>
|
97
|
+
<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> <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> "<code class="grammar-literal">-</code>"<code>?</code> "<code class="grammar-literal">]</code>"</td>
|
147
98
|
</tr>
|
148
|
-
<tr id=
|
99
|
+
<tr id="grammar-production-STRING1">
|
149
100
|
<td>[16]</td>
|
150
|
-
<td><code>
|
101
|
+
<td><code>STRING1</code></td>
|
151
102
|
<td>::=</td>
|
152
|
-
<td>
|
153
|
-
"<code class="grammar-literal">[</code>"
|
154
|
-
(<a href="#grammar-production-R_BEGIN">R_BEGIN</a> <code>(</code> <a href="#grammar-production-HEX">HEX</a> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a><code>)</code> <code>|</code> <a href="#grammar-production-HEX">HEX</a> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a>)<code>+</code>
|
155
|
-
"<code class="grammar-literal">]</code>"
|
156
|
-
</td>
|
103
|
+
<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>
|
157
104
|
</tr>
|
158
|
-
<tr id=
|
105
|
+
<tr id="grammar-production-STRING2">
|
159
106
|
<td>[17]</td>
|
160
|
-
<td><code>
|
107
|
+
<td><code>STRING2</code></td>
|
161
108
|
<td>::=</td>
|
162
|
-
<td>
|
163
|
-
"<code class="grammar-literal">[^</code>"
|
164
|
-
(<a href="#grammar-production-R_BEGIN">R_BEGIN</a> <code>(</code> <a href="#grammar-production-HEX">HEX</a> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a><code>)</code> <code>|</code> <a href="#grammar-production-HEX">HEX</a> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a>)<code>+</code>
|
165
|
-
"<code class="grammar-literal">]</code>"
|
166
|
-
</td>
|
109
|
+
<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>
|
167
110
|
</tr>
|
168
|
-
<tr id=
|
111
|
+
<tr id="grammar-production-CHAR">
|
169
112
|
<td>[18]</td>
|
170
|
-
<td><code>
|
113
|
+
<td><code>CHAR</code></td>
|
171
114
|
<td>::=</td>
|
172
|
-
<td>
|
173
|
-
'<code class="grammar-literal">"</code>'
|
174
|
-
(<a href="#grammar-production-CHAR">CHAR</a> <code>-</code> '<code class="grammar-literal">"</code>')<code>*</code>
|
175
|
-
'<code class="grammar-literal">"</code>'
|
176
|
-
</td>
|
115
|
+
<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> <code>|</code> <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 'Reserved'">#xD7FF</abbr></code><code>]</code> <code>|</code> <code>[</code> <code class="grammar-char-escape"><abbr title="unicode 'Private-use'">#xE000</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#xFFFD</abbr></code><code>]</code> <code>|</code> <code>[</code> <code class="grammar-char-escape"><abbr title="unicode 'Graphic'">#x00010000</abbr></code><code class="grammar-literal">-</code><code class="grammar-char-escape"><abbr title="unicode 'Noncharacter'">#x0010FFFF</abbr></code><code>]</code> </td>
|
177
116
|
</tr>
|
178
|
-
<tr id=
|
117
|
+
<tr id="grammar-production-R_CHAR">
|
179
118
|
<td>[19]</td>
|
180
|
-
<td><code>
|
119
|
+
<td><code>R_CHAR</code></td>
|
181
120
|
<td>::=</td>
|
182
|
-
<td>
|
183
|
-
"<code class="grammar-literal">'</code>"
|
184
|
-
(<a href="#grammar-production-CHAR">CHAR</a> <code>-</code> "<code class="grammar-literal">'</code>")<code>*</code>
|
185
|
-
"<code class="grammar-literal">'</code>"
|
186
|
-
</td>
|
121
|
+
<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>
|
187
122
|
</tr>
|
188
|
-
<tr id=
|
123
|
+
<tr id="grammar-production-POSTFIX">
|
189
124
|
<td>[20]</td>
|
190
|
-
<td><code>
|
125
|
+
<td><code>POSTFIX</code></td>
|
191
126
|
<td>::=</td>
|
192
|
-
<td>
|
193
|
-
<a href="#grammar-production-HEX">HEX</a>
|
194
|
-
<code>|</code> <code>[</code> <code class="grammar-char-escape">#x20</code><code class="grammar-char-escape">#x21</code><code class="grammar-char-escape">#x22</code><code>]</code>
|
195
|
-
<code>|</code> <code>[</code> <code class="grammar-char-escape">#x24</code><code class="grammar-literal">-</code><code class="grammar-char-escape">#x00FFFFFF</code><code>]</code>
|
196
|
-
</td>
|
127
|
+
<td><code>[</code> <code class="grammar-literal">?*+</code><code>]</code> </td>
|
197
128
|
</tr>
|
198
|
-
<tr id=
|
129
|
+
<tr id="grammar-production-PASS">
|
199
130
|
<td>[21]</td>
|
200
|
-
<td><code>
|
131
|
+
<td><code>PASS</code></td>
|
201
132
|
<td>::=</td>
|
202
|
-
<td>
|
203
|
-
<a href="#grammar-production-CHAR">CHAR</a>
|
204
|
-
<code>-</code> "<code class="grammar-literal">]</code>"
|
205
|
-
</td>
|
133
|
+
<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>
|
206
134
|
</tr>
|
207
|
-
<tr
|
208
|
-
<td
|
209
|
-
<td
|
210
|
-
<td
|
211
|
-
<td>
|
212
|
-
<code>(</code> <a href="#grammar-production-HEX">HEX</a> <code>|</code> <a href="#grammar-production-R_CHAR">R_CHAR</a><code>)</code>
|
213
|
-
"<code class="grammar-literal">-</code>"
|
214
|
-
</td>
|
135
|
+
<tr>
|
136
|
+
<td colspan=2></td>
|
137
|
+
<td>|</td>
|
138
|
+
<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>
|
215
139
|
</tr>
|
216
|
-
<tr
|
217
|
-
<td
|
218
|
-
<td
|
219
|
-
<td
|
220
|
-
<td>
|
221
|
-
<code>[</code> <code class="grammar-literal">?*+</code><code>]</code>
|
222
|
-
</td>
|
140
|
+
<tr>
|
141
|
+
<td colspan=2></td>
|
142
|
+
<td>|</td>
|
143
|
+
<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>
|
223
144
|
</tr>
|
224
|
-
<tr
|
225
|
-
<td
|
226
|
-
<td
|
227
|
-
<td
|
228
|
-
<td>
|
229
|
-
(<code>[</code> <code class="grammar-char-escape">#x00</code><code class="grammar-literal">-</code><code class="grammar-char-escape">#x20</code><code>]</code> <code>|</code> <code>(</code> "<code class="grammar-literal">#</code>" <code>|</code> "<code class="grammar-literal">//</code>"<code>)</code> (<code>[</code> <code class="grammar-literal">^</code><code class="grammar-char-escape">#x0A</code><code class="grammar-char-escape">#x0D</code><code>]</code> )<code>*</code> <code>|</code> "<code class="grammar-literal">/*</code>" ("<code class="grammar-literal">*</code>" <code>[</code> <code class="grammar-literal">^/</code><code>]</code> )<code>?</code> <code>|</code> <code>[</code> <code class="grammar-literal">^*</code><code>]</code> <code>*</code> "<code class="grammar-literal">*/</code>" <code>|</code> "<code class="grammar-literal">(*</code>" ("<code class="grammar-literal">*</code>" <code>[</code> <code class="grammar-literal">^)</code><code>]</code> )<code>?</code> <code>|</code> <code>[</code> <code class="grammar-literal">^*</code><code>]</code> <code>*</code> "<code class="grammar-literal">*)</code>")<code>+</code>
|
230
|
-
</td>
|
145
|
+
<tr>
|
146
|
+
<td colspan=2></td>
|
147
|
+
<td>|</td>
|
148
|
+
<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>
|
231
149
|
</tr>
|
232
|
-
<tr
|
233
|
-
<td colspan=
|
234
|
-
|
235
|
-
</td>
|
236
|
-
<td>
|
237
|
-
<a href="#grammar-production-PASS">PASS</a>
|
238
|
-
</td>
|
150
|
+
<tr>
|
151
|
+
<td colspan=2>@pass</td>
|
152
|
+
<td></td>
|
153
|
+
<td><a href="#grammar-production-PASS">PASS</a></td>
|
239
154
|
</tr>
|
240
155
|
</tbody>
|
241
156
|
</table>
|
157
|
+
|