shex 0.6.3 → 0.6.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +98 -87
- data/VERSION +1 -1
- data/lib/shex/algebra/and.rb +3 -12
- data/lib/shex/algebra/each_of.rb +2 -12
- data/lib/shex/algebra/import.rb +6 -0
- data/lib/shex/algebra/not.rb +3 -10
- data/lib/shex/algebra/one_of.rb +2 -12
- data/lib/shex/algebra/operator.rb +26 -13
- data/lib/shex/algebra/or.rb +3 -12
- data/lib/shex/algebra/schema.rb +2 -9
- data/lib/shex/algebra/shape.rb +4 -2
- data/lib/shex/algebra/shape_expression.rb +29 -0
- data/lib/shex/algebra/start.rb +2 -10
- data/lib/shex/algebra/stem.rb +5 -1
- data/lib/shex/algebra/stem_range.rb +3 -1
- data/lib/shex/algebra/triple_constraint.rb +1 -1
- data/lib/shex/algebra/triple_expression.rb +18 -0
- data/lib/shex/algebra.rb +0 -1
- data/lib/shex/meta.rb +25 -38
- data/lib/shex/parser.rb +112 -128
- data/lib/shex/terminals.rb +5 -25
- data/lib/shex.rb +4 -2
- metadata +4 -3
data/lib/shex/meta.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# This file is automatically generated by ebnf version 2.1
|
1
|
+
# This file is automatically generated by ebnf version 2.2.1
|
2
2
|
# Derived from etc/shex.ebnf
|
3
3
|
module ShEx::Meta
|
4
4
|
RULES = [
|
@@ -8,34 +8,21 @@ module ShEx::Meta
|
|
8
8
|
EBNF::Rule.new(:_shexDoc_3, "1.3", [:seq, :_shexDoc_4, :_shexDoc_5]).extend(EBNF::PEG::Rule),
|
9
9
|
EBNF::Rule.new(:_shexDoc_4, "1.4", [:alt, :notStartAction, :startActions]).extend(EBNF::PEG::Rule),
|
10
10
|
EBNF::Rule.new(:_shexDoc_5, "1.5", [:star, :statement]).extend(EBNF::PEG::Rule),
|
11
|
-
EBNF::Rule.new(:directive, "2", [:alt, :baseDecl, :prefixDecl]).extend(EBNF::PEG::Rule),
|
11
|
+
EBNF::Rule.new(:directive, "2", [:alt, :baseDecl, :prefixDecl, :importDecl]).extend(EBNF::PEG::Rule),
|
12
12
|
EBNF::Rule.new(:baseDecl, "3", [:seq, "BASE", :IRIREF]).extend(EBNF::PEG::Rule),
|
13
13
|
EBNF::Rule.new(:prefixDecl, "4", [:seq, "PREFIX", :PNAME_NS, :IRIREF]).extend(EBNF::PEG::Rule),
|
14
|
+
EBNF::Rule.new(:importDecl, "4.5", [:seq, "IMPORT", :IRIREF]).extend(EBNF::PEG::Rule),
|
14
15
|
EBNF::Rule.new(:notStartAction, "5", [:alt, :start, :shapeExprDecl]).extend(EBNF::PEG::Rule),
|
15
|
-
EBNF::Rule.new(:start, "6", [:seq, "START", "=", :
|
16
|
-
EBNF::Rule.new(:_start_1, "6.1", [:opt, "NOT"]).extend(EBNF::PEG::Rule),
|
17
|
-
EBNF::Rule.new(:_start_2, "6.2", [:alt, :shapeAtomNoRef, :shapeRef]).extend(EBNF::PEG::Rule),
|
18
|
-
EBNF::Rule.new(:_start_3, "6.3", [:opt, :shapeOr]).extend(EBNF::PEG::Rule),
|
16
|
+
EBNF::Rule.new(:start, "6", [:seq, "START", "=", :inlineShapeExpression]).extend(EBNF::PEG::Rule),
|
19
17
|
EBNF::Rule.new(:startActions, "7", [:plus, :codeDecl]).extend(EBNF::PEG::Rule),
|
20
18
|
EBNF::Rule.new(:statement, "8", [:alt, :directive, :notStartAction]).extend(EBNF::PEG::Rule),
|
21
19
|
EBNF::Rule.new(:shapeExprDecl, "9", [:seq, :shapeExprLabel, :_shapeExprDecl_1]).extend(EBNF::PEG::Rule),
|
22
20
|
EBNF::Rule.new(:_shapeExprDecl_1, "9.1", [:alt, :shapeExpression, "EXTERNAL"]).extend(EBNF::PEG::Rule),
|
23
|
-
EBNF::Rule.new(:shapeExpression, "10", [:
|
24
|
-
EBNF::Rule.new(:_shapeExpression_1, "10.1", [:seq, :_shapeExpression_4, :shapeAtomNoRef, :_shapeExpression_5]).extend(EBNF::PEG::Rule),
|
25
|
-
EBNF::Rule.new(:_shapeExpression_4, "10.4", [:opt, "NOT"]).extend(EBNF::PEG::Rule),
|
26
|
-
EBNF::Rule.new(:_shapeExpression_5, "10.5", [:opt, :shapeOr]).extend(EBNF::PEG::Rule),
|
27
|
-
EBNF::Rule.new(:_shapeExpression_2, "10.2", [:seq, "NOT", :shapeRef, :_shapeExpression_6]).extend(EBNF::PEG::Rule),
|
28
|
-
EBNF::Rule.new(:_shapeExpression_6, "10.6", [:opt, :shapeOr]).extend(EBNF::PEG::Rule),
|
29
|
-
EBNF::Rule.new(:_shapeExpression_3, "10.3", [:seq, :shapeRef, :shapeOr]).extend(EBNF::PEG::Rule),
|
21
|
+
EBNF::Rule.new(:shapeExpression, "10", [:seq, :shapeOr]).extend(EBNF::PEG::Rule),
|
30
22
|
EBNF::Rule.new(:inlineShapeExpression, "11", [:seq, :inlineShapeOr]).extend(EBNF::PEG::Rule),
|
31
|
-
EBNF::Rule.new(:shapeOr, "12", [:
|
32
|
-
EBNF::Rule.new(:_shapeOr_1, "12.1", [:
|
33
|
-
EBNF::Rule.new(:
|
34
|
-
EBNF::Rule.new(:_shapeOr_2, "12.2", [:seq, :_shapeOr_4, :_shapeOr_5]).extend(EBNF::PEG::Rule),
|
35
|
-
EBNF::Rule.new(:_shapeOr_4, "12.4", [:plus, :_shapeOr_6]).extend(EBNF::PEG::Rule),
|
36
|
-
EBNF::Rule.new(:_shapeOr_6, "12.6", [:seq, "AND", :shapeNot]).extend(EBNF::PEG::Rule),
|
37
|
-
EBNF::Rule.new(:_shapeOr_5, "12.5", [:star, :_shapeOr_7]).extend(EBNF::PEG::Rule),
|
38
|
-
EBNF::Rule.new(:_shapeOr_7, "12.7", [:seq, "OR", :shapeAnd]).extend(EBNF::PEG::Rule),
|
23
|
+
EBNF::Rule.new(:shapeOr, "12", [:seq, :shapeAnd, :_shapeOr_1]).extend(EBNF::PEG::Rule),
|
24
|
+
EBNF::Rule.new(:_shapeOr_1, "12.1", [:star, :_shapeOr_2]).extend(EBNF::PEG::Rule),
|
25
|
+
EBNF::Rule.new(:_shapeOr_2, "12.2", [:seq, "OR", :shapeAnd]).extend(EBNF::PEG::Rule),
|
39
26
|
EBNF::Rule.new(:inlineShapeOr, "13", [:seq, :inlineShapeAnd, :_inlineShapeOr_1]).extend(EBNF::PEG::Rule),
|
40
27
|
EBNF::Rule.new(:_inlineShapeOr_1, "13.1", [:star, :_inlineShapeOr_2]).extend(EBNF::PEG::Rule),
|
41
28
|
EBNF::Rule.new(:_inlineShapeOr_2, "13.2", [:seq, "OR", :inlineShapeAnd]).extend(EBNF::PEG::Rule),
|
@@ -71,16 +58,14 @@ module ShEx::Meta
|
|
71
58
|
EBNF::Rule.new(:inlineShapeOrRef, "22", [:alt, :inlineShapeDefinition, :shapeRef]).extend(EBNF::PEG::Rule),
|
72
59
|
EBNF::Rule.new(:shapeRef, "23", [:alt, :ATPNAME_LN, :ATPNAME_NS, :_shapeRef_1]).extend(EBNF::PEG::Rule),
|
73
60
|
EBNF::Rule.new(:_shapeRef_1, "23.1", [:seq, "@", :shapeExprLabel]).extend(EBNF::PEG::Rule),
|
74
|
-
EBNF::Rule.new(:litNodeConstraint, "24", [:alt, :_litNodeConstraint_1, :_litNodeConstraint_2, :_litNodeConstraint_3, :_litNodeConstraint_4
|
75
|
-
EBNF::Rule.new(:_litNodeConstraint_1, "24.1", [:seq, "LITERAL", :
|
61
|
+
EBNF::Rule.new(:litNodeConstraint, "24", [:alt, :_litNodeConstraint_1, :_litNodeConstraint_2, :_litNodeConstraint_3, :_litNodeConstraint_4]).extend(EBNF::PEG::Rule),
|
62
|
+
EBNF::Rule.new(:_litNodeConstraint_1, "24.1", [:seq, "LITERAL", :_litNodeConstraint_5]).extend(EBNF::PEG::Rule),
|
63
|
+
EBNF::Rule.new(:_litNodeConstraint_5, "24.5", [:star, :xsFacet]).extend(EBNF::PEG::Rule),
|
64
|
+
EBNF::Rule.new(:_litNodeConstraint_2, "24.2", [:seq, :datatype, :_litNodeConstraint_6]).extend(EBNF::PEG::Rule),
|
76
65
|
EBNF::Rule.new(:_litNodeConstraint_6, "24.6", [:star, :xsFacet]).extend(EBNF::PEG::Rule),
|
77
|
-
EBNF::Rule.new(:
|
78
|
-
EBNF::Rule.new(:_litNodeConstraint_7, "24.7", [:star, :
|
79
|
-
EBNF::Rule.new(:
|
80
|
-
EBNF::Rule.new(:_litNodeConstraint_8, "24.8", [:star, :xsFacet]).extend(EBNF::PEG::Rule),
|
81
|
-
EBNF::Rule.new(:_litNodeConstraint_4, "24.4", [:seq, :valueSet, :_litNodeConstraint_9]).extend(EBNF::PEG::Rule),
|
82
|
-
EBNF::Rule.new(:_litNodeConstraint_9, "24.9", [:star, :xsFacet]).extend(EBNF::PEG::Rule),
|
83
|
-
EBNF::Rule.new(:_litNodeConstraint_5, "24.5", [:plus, :numericFacet]).extend(EBNF::PEG::Rule),
|
66
|
+
EBNF::Rule.new(:_litNodeConstraint_3, "24.3", [:seq, :valueSet, :_litNodeConstraint_7]).extend(EBNF::PEG::Rule),
|
67
|
+
EBNF::Rule.new(:_litNodeConstraint_7, "24.7", [:star, :xsFacet]).extend(EBNF::PEG::Rule),
|
68
|
+
EBNF::Rule.new(:_litNodeConstraint_4, "24.4", [:plus, :numericFacet]).extend(EBNF::PEG::Rule),
|
84
69
|
EBNF::Rule.new(:nonLitNodeConstraint, "25", [:alt, :_nonLitNodeConstraint_1, :_nonLitNodeConstraint_2]).extend(EBNF::PEG::Rule),
|
85
70
|
EBNF::Rule.new(:_nonLitNodeConstraint_1, "25.1", [:seq, :nonLiteralKind, :_nonLitNodeConstraint_3]).extend(EBNF::PEG::Rule),
|
86
71
|
EBNF::Rule.new(:_nonLitNodeConstraint_3, "25.3", [:star, :stringFacet]).extend(EBNF::PEG::Rule),
|
@@ -116,11 +101,10 @@ module ShEx::Meta
|
|
116
101
|
EBNF::Rule.new(:_groupTripleExpr_3, "40.3", [:opt, :unaryTripleExpr]).extend(EBNF::PEG::Rule),
|
117
102
|
EBNF::Rule.new(:unaryTripleExpr, "43", [:alt, :_unaryTripleExpr_1, :include]).extend(EBNF::PEG::Rule),
|
118
103
|
EBNF::Rule.new(:_unaryTripleExpr_1, "43.1", [:seq, :_unaryTripleExpr_2, :_unaryTripleExpr_3]).extend(EBNF::PEG::Rule),
|
119
|
-
EBNF::Rule.new(:_unaryTripleExpr_2, "43.2", [:opt, :
|
104
|
+
EBNF::Rule.new(:_unaryTripleExpr_2, "43.2", [:opt, :_unaryTripleExpr_4]).extend(EBNF::PEG::Rule),
|
105
|
+
EBNF::Rule.new(:_unaryTripleExpr_4, "43.4", [:seq, "$", :tripleExprLabel]).extend(EBNF::PEG::Rule),
|
120
106
|
EBNF::Rule.new(:_unaryTripleExpr_3, "43.3", [:alt, :tripleConstraint, :bracketedTripleExpr]).extend(EBNF::PEG::Rule),
|
121
|
-
EBNF::Rule.new(:
|
122
|
-
EBNF::Rule.new(:_productionLabel_1, "43a.1", [:alt, :iri, :blankNode]).extend(EBNF::PEG::Rule),
|
123
|
-
EBNF::Rule.new(:bracketedTripleExpr, "44", [:seq, "(", :oneOfTripleExpr, ")", :_bracketedTripleExpr_1, :_bracketedTripleExpr_2, :semanticActions]).extend(EBNF::PEG::Rule),
|
107
|
+
EBNF::Rule.new(:bracketedTripleExpr, "44", [:seq, "(", :tripleExpression, ")", :_bracketedTripleExpr_1, :_bracketedTripleExpr_2, :semanticActions]).extend(EBNF::PEG::Rule),
|
124
108
|
EBNF::Rule.new(:_bracketedTripleExpr_1, "44.1", [:opt, :cardinality]).extend(EBNF::PEG::Rule),
|
125
109
|
EBNF::Rule.new(:_bracketedTripleExpr_2, "44.2", [:star, :annotation]).extend(EBNF::PEG::Rule),
|
126
110
|
EBNF::Rule.new(:tripleConstraint, "45", [:seq, :_tripleConstraint_1, :predicate, :inlineShapeExpression, :_tripleConstraint_2, :_tripleConstraint_3, :semanticActions]).extend(EBNF::PEG::Rule),
|
@@ -149,10 +133,13 @@ module ShEx::Meta
|
|
149
133
|
EBNF::Rule.new(:_literalRange_3, "53.3", [:star, :literalExclusion]).extend(EBNF::PEG::Rule),
|
150
134
|
EBNF::Rule.new(:literalExclusion, "54", [:seq, "-", :literal, :_literalExclusion_1]).extend(EBNF::PEG::Rule),
|
151
135
|
EBNF::Rule.new(:_literalExclusion_1, "54.1", [:opt, "~"]).extend(EBNF::PEG::Rule),
|
152
|
-
EBNF::Rule.new(:languageRange, "55", [:
|
153
|
-
EBNF::Rule.new(:_languageRange_1, "55.1", [:
|
154
|
-
EBNF::Rule.new(:
|
155
|
-
EBNF::Rule.new(:
|
136
|
+
EBNF::Rule.new(:languageRange, "55", [:alt, :_languageRange_1, :_languageRange_2]).extend(EBNF::PEG::Rule),
|
137
|
+
EBNF::Rule.new(:_languageRange_1, "55.1", [:seq, :LANGTAG, :_languageRange_3]).extend(EBNF::PEG::Rule),
|
138
|
+
EBNF::Rule.new(:_languageRange_3, "55.3", [:opt, :_languageRange_4]).extend(EBNF::PEG::Rule),
|
139
|
+
EBNF::Rule.new(:_languageRange_4, "55.4", [:seq, "~", :_languageRange_5]).extend(EBNF::PEG::Rule),
|
140
|
+
EBNF::Rule.new(:_languageRange_5, "55.5", [:star, :languageExclusion]).extend(EBNF::PEG::Rule),
|
141
|
+
EBNF::Rule.new(:_languageRange_2, "55.2", [:seq, "@", "~", :_languageRange_6]).extend(EBNF::PEG::Rule),
|
142
|
+
EBNF::Rule.new(:_languageRange_6, "55.6", [:star, :languageExclusion]).extend(EBNF::PEG::Rule),
|
156
143
|
EBNF::Rule.new(:languageExclusion, "56", [:seq, "-", :LANGTAG, :_languageExclusion_1]).extend(EBNF::PEG::Rule),
|
157
144
|
EBNF::Rule.new(:_languageExclusion_1, "56.1", [:opt, "~"]).extend(EBNF::PEG::Rule),
|
158
145
|
EBNF::Rule.new(:include, "57", [:seq, "&", :tripleExprLabel]).extend(EBNF::PEG::Rule),
|
data/lib/shex/parser.rb
CHANGED
@@ -21,17 +21,11 @@ module ShEx
|
|
21
21
|
attr_reader :options
|
22
22
|
|
23
23
|
##
|
24
|
-
# The current input string being processed.
|
24
|
+
# The current input string being processed.
|
25
25
|
#
|
26
26
|
# @return [String]
|
27
27
|
attr_accessor :input
|
28
28
|
|
29
|
-
##
|
30
|
-
# The current input tokens being processed. XXX
|
31
|
-
#
|
32
|
-
# @return [Array<Token>]
|
33
|
-
attr_reader :tokens
|
34
|
-
|
35
29
|
##
|
36
30
|
# The internal representation of the result using hierarchy of RDF objects and ShEx::Operator
|
37
31
|
# objects.
|
@@ -160,12 +154,12 @@ module ShEx
|
|
160
154
|
operands += semacts
|
161
155
|
operands += starts
|
162
156
|
operands << expressions.unshift(:shapes) unless expressions.empty?
|
163
|
-
Algebra::Schema.new(*operands, **options)
|
157
|
+
Algebra::Schema.new(*operands, **self.options)
|
164
158
|
end
|
165
159
|
start_production(:_shexDoc_2, as_hash: true)
|
166
160
|
start_production(:_shexDoc_3, as_hash: true)
|
167
161
|
|
168
|
-
# [2] directive ::= baseDecl | prefixDecl
|
162
|
+
# [2] directive ::= baseDecl | prefixDecl | importDecl
|
169
163
|
|
170
164
|
# [3] baseDecl ::= "BASE" IRIREF
|
171
165
|
start_production(:baseDecl, as_hash: true, insensitive_strings: :lower)
|
@@ -182,15 +176,19 @@ module ShEx
|
|
182
176
|
[:prefix, pfx.to_s, value[:IRIREF]]
|
183
177
|
end
|
184
178
|
|
179
|
+
# [4] importDecl ::= "IMPORT" IRIREF
|
180
|
+
start_production(:importDecl, as_hash: true, insensitive_strings: :lower)
|
181
|
+
production(:importDecl) do |value|
|
182
|
+
Algebra::Import.new(value[:IRIREF], **self.options)
|
183
|
+
end
|
184
|
+
|
185
185
|
# [5] notStartAction ::= start | shapeExprDecl
|
186
|
-
# [6] start ::= "START" '='
|
186
|
+
# [6] start ::= "START" '=' inlineShapeExpression
|
187
187
|
start_production(:start, as_hash: true, insensitive_strings: :lower)
|
188
188
|
production(:start) do |value|
|
189
|
-
|
190
|
-
expr = value[:_start_3].call(expr) if value[:_start_3]
|
191
|
-
expr = Algebra::Not.new(expr) if value[:__start_1]
|
192
|
-
Algebra::Start.new(expr)
|
189
|
+
Algebra::Start.new(value[:inlineShapeExpression], **self.options)
|
193
190
|
end
|
191
|
+
|
194
192
|
# [7] startActions ::= codeDecl+
|
195
193
|
|
196
194
|
# [8] statement ::= directive | notStartAction
|
@@ -203,62 +201,36 @@ module ShEx
|
|
203
201
|
when Algebra::NodeConstraint, Algebra::Or, Algebra::And, Algebra::Not, Algebra::Shape, RDF::Resource
|
204
202
|
value[:_shapeExprDecl_1]
|
205
203
|
when /external/i
|
206
|
-
Algebra::External.new()
|
204
|
+
Algebra::External.new(**options)
|
207
205
|
else
|
208
|
-
Algebra::Shape.new()
|
206
|
+
Algebra::Shape.new(**options)
|
209
207
|
end
|
210
208
|
expression.id = id if id && !expression.is_a?(RDF::Resource)
|
211
209
|
|
212
210
|
expression
|
213
211
|
end
|
214
212
|
|
215
|
-
# [10] shapeExpression
|
216
|
-
|
217
|
-
|
218
|
-
start_production(:_shapeExpression_1, as_hash: true, insensitive_strings: :lower)
|
219
|
-
production(:_shapeExpression_1) do |value|
|
220
|
-
# "NOT"? shapeAtomNoRef shapeOr?
|
221
|
-
expr = value[:shapeAtomNoRef]
|
222
|
-
expr = Algebra::Not.new(expr) if value[:_shapeExpression_4]
|
223
|
-
expr = value[:_shapeExpression_5].call(expr) if value[:_shapeExpression_5]
|
224
|
-
expr
|
225
|
-
end
|
226
|
-
start_production(:_shapeExpression_2, as_hash: true, insensitive_strings: :lower)
|
227
|
-
production(:_shapeExpression_2) do |value|
|
228
|
-
# "NOT" shapeRef shapeOr?
|
229
|
-
expr = Algebra::Not.new(value[:shapeRef])
|
230
|
-
expr = value[:_shapeExpression_6].call(expr) if value[:_shapeExpression_6]
|
231
|
-
expr
|
232
|
-
end
|
233
|
-
start_production(:_shapeExpression_3, as_hash: true)
|
234
|
-
production(:_shapeExpression_3) do |value|
|
235
|
-
# shapeRef shapeOr
|
236
|
-
value[:shapeOr].call(value[:shapeRef])
|
213
|
+
# [10] shapeExpression ::= shapeOr
|
214
|
+
production(:shapeExpression) do |value|
|
215
|
+
value.first[:shapeOr]
|
237
216
|
end
|
238
217
|
|
239
218
|
# [11] inlineShapeExpression ::= inlineShapeOr
|
240
219
|
production(:inlineShapeExpression) do |value|
|
241
220
|
value.first[:inlineShapeOr]
|
242
221
|
end
|
243
|
-
|
244
|
-
#
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
-> (lhs) {Algebra::Or.new(lhs, *value.map {|v| v.last[:shapeAnd]})}
|
250
|
-
end
|
251
|
-
start_production(:_shapeOr_2, as_hash: true, insensitive_strings: :lower)
|
252
|
-
production(:_shapeOr_2) do |value|
|
253
|
-
# ("AND" shapeNot)+ ("OR" shapeAnd)*
|
254
|
-
ands = value[:_shapeOr_4].map {|v| v.last[:shapeNot]}
|
255
|
-
ors = value[:_shapeOr_5].map {|v| v.last[:shapeAnd]}
|
256
|
-
if ors.empty?
|
257
|
-
-> (lhs) {Algebra::And.new(lhs, *ands)}
|
222
|
+
|
223
|
+
# [12] shapeOr ::= shapeAnd ("OR" shapeAnd)*
|
224
|
+
start_production(:shapeOr, as_hash: true)
|
225
|
+
production(:shapeOr) do |value|
|
226
|
+
if value[:_shapeOr_1].empty?
|
227
|
+
value[:shapeAnd]
|
258
228
|
else
|
259
|
-
|
229
|
+
lhs = value[:_shapeOr_1].map {|v| v.last[:shapeAnd]}
|
230
|
+
Algebra::Or.new(value[:shapeAnd], *lhs, **self.options)
|
260
231
|
end
|
261
232
|
end
|
233
|
+
start_production(:_shapeOr_2, insensitive_strings: :lower)
|
262
234
|
|
263
235
|
# [13] inlineShapeOr ::= inlineShapeAnd ("OR" inlineShapeAnd)*
|
264
236
|
start_production(:inlineShapeOr, as_hash: true)
|
@@ -267,7 +239,7 @@ module ShEx
|
|
267
239
|
value[:inlineShapeAnd]
|
268
240
|
else
|
269
241
|
lhs = value[:_inlineShapeOr_1].map {|v| v.last[:inlineShapeAnd]}
|
270
|
-
Algebra::Or.new(value[:inlineShapeAnd], *lhs)
|
242
|
+
Algebra::Or.new(value[:inlineShapeAnd], *lhs, **self.options)
|
271
243
|
end
|
272
244
|
end
|
273
245
|
start_production(:_inlineShapeOr_2, insensitive_strings: :lower)
|
@@ -279,7 +251,7 @@ module ShEx
|
|
279
251
|
value[:shapeNot]
|
280
252
|
else
|
281
253
|
lhs = value[:_shapeAnd_1].map {|v| v.last[:shapeNot]}
|
282
|
-
Algebra::And.new(value[:shapeNot], *lhs)
|
254
|
+
Algebra::And.new(value[:shapeNot], *lhs, **self.options)
|
283
255
|
end
|
284
256
|
end
|
285
257
|
start_production(:_shapeAnd_2, insensitive_strings: :lower)
|
@@ -291,7 +263,7 @@ module ShEx
|
|
291
263
|
value[:inlineShapeNot]
|
292
264
|
else
|
293
265
|
lhs = value[:_inlineShapeAnd_1].map {|v| v.last[:inlineShapeNot]}
|
294
|
-
Algebra::And.new(value[:inlineShapeNot], *lhs)
|
266
|
+
Algebra::And.new(value[:inlineShapeNot], *lhs, **self.options)
|
295
267
|
end
|
296
268
|
end
|
297
269
|
start_production(:_inlineShapeAnd_2, insensitive_strings: :lower)
|
@@ -300,7 +272,7 @@ module ShEx
|
|
300
272
|
start_production(:shapeNot, as_hash: true)
|
301
273
|
production(:shapeNot) do |value|
|
302
274
|
atom = value[:shapeAtom]
|
303
|
-
value[:_shapeNot_1] ? Algebra::Not.new(atom) : atom
|
275
|
+
value[:_shapeNot_1] ? Algebra::Not.new(atom || Algebra::Shape.new(**options), **self.options) : atom
|
304
276
|
end
|
305
277
|
start_production(:_shapeNot_1, insensitive_strings: :lower)
|
306
278
|
|
@@ -308,7 +280,7 @@ module ShEx
|
|
308
280
|
start_production(:inlineShapeNot, as_hash: true)
|
309
281
|
production(:inlineShapeNot) do |value|
|
310
282
|
atom = value[:inlineShapeAtom]
|
311
|
-
value[:
|
283
|
+
value[:_inlineShapeNot_1] ? Algebra::Not.new(atom || Algebra::Shape.new(**options), **self.options) : atom
|
312
284
|
end
|
313
285
|
start_production(:_inlineShapeNot_1, insensitive_strings: :lower)
|
314
286
|
|
@@ -334,7 +306,7 @@ module ShEx
|
|
334
306
|
case expressions.length
|
335
307
|
when 0 then nil
|
336
308
|
when 1 then expressions.first
|
337
|
-
else Algebra::And.new(*expressions)
|
309
|
+
else Algebra::And.new(*expressions, **self.options)
|
338
310
|
end
|
339
311
|
end
|
340
312
|
start_production(:_shapeAtom_1, as_hash: true)
|
@@ -365,7 +337,7 @@ module ShEx
|
|
365
337
|
case expressions.length
|
366
338
|
when 0 then nil
|
367
339
|
when 1 then expressions.first
|
368
|
-
else Algebra::And.new(*expressions)
|
340
|
+
else Algebra::And.new(*expressions, **self.options)
|
369
341
|
end
|
370
342
|
end
|
371
343
|
start_production(:_shapeAtomNoRef_1, as_hash: true)
|
@@ -396,7 +368,7 @@ module ShEx
|
|
396
368
|
case expressions.length
|
397
369
|
when 0 then nil
|
398
370
|
when 1 then expressions.first
|
399
|
-
else Algebra::And.new(*expressions)
|
371
|
+
else Algebra::And.new(*expressions, **self.options)
|
400
372
|
end
|
401
373
|
end
|
402
374
|
start_production(:_inlineShapeAtom_1, as_hash: true)
|
@@ -414,40 +386,45 @@ module ShEx
|
|
414
386
|
end
|
415
387
|
|
416
388
|
# [24] litNodeConstraint ::= "LITERAL" xsFacet*
|
417
|
-
# | nonLiteralKind stringFacet*
|
418
389
|
# | datatype xsFacet*
|
419
390
|
# | valueSet xsFacet*
|
420
391
|
# | numericFacet+
|
421
392
|
start_production(:_litNodeConstraint_1, as_hash: true, insensitive_strings: :lower)
|
422
393
|
production(:_litNodeConstraint_1) do |value|
|
423
|
-
|
394
|
+
# LITERAL" xsFacet*
|
395
|
+
facets = value[:_litNodeConstraint_5]
|
424
396
|
validate_facets(facets, :litNodeConstraint)
|
425
|
-
Algebra::NodeConstraint.new(:literal, *facets)
|
397
|
+
Algebra::NodeConstraint.new(:literal, *facets, **self.options)
|
426
398
|
end
|
427
399
|
start_production(:_litNodeConstraint_2, as_hash: true)
|
428
400
|
production(:_litNodeConstraint_2) do |value|
|
429
|
-
|
401
|
+
# datatype xsFacet*
|
402
|
+
facets = value[:_litNodeConstraint_6]
|
430
403
|
validate_facets(facets, :litNodeConstraint)
|
431
|
-
|
432
|
-
|
404
|
+
|
405
|
+
# Numeric Facet Constraints can only be used when datatype is derived from the set of SPARQL 1.1 Operand Data Types
|
406
|
+
l = RDF::Literal("0", datatype: value[:datatype])
|
407
|
+
facets.each do |f|
|
408
|
+
error(nil, "#{f.first} constraint may only be used once on a numeric datatype (#{value[:datatype]})", production: :litNodeConstraint) if
|
409
|
+
f.to_s.match(/digits|inclusive|exclusive/) &&
|
410
|
+
!l.is_a?(RDF::Literal::Numeric)
|
411
|
+
end
|
412
|
+
|
413
|
+
attrs = [[:datatype, value[:datatype]]] + facets
|
414
|
+
Algebra::NodeConstraint.new(*attrs.compact, **self.options)
|
433
415
|
end
|
434
416
|
start_production(:_litNodeConstraint_3, as_hash: true)
|
435
417
|
production(:_litNodeConstraint_3) do |value|
|
436
|
-
|
437
|
-
|
438
|
-
attrs = [[:datatype, value[:datatype]]] + facets
|
439
|
-
Algebra::NodeConstraint.new(*attrs.compact)
|
440
|
-
end
|
441
|
-
start_production(:_litNodeConstraint_4, as_hash: true)
|
442
|
-
production(:_litNodeConstraint_4) do |value|
|
443
|
-
facets = value[:_litNodeConstraint_9]
|
418
|
+
# valueSet xsFacet*
|
419
|
+
facets = value[:_litNodeConstraint_7]
|
444
420
|
validate_facets(facets, :litNodeConstraint)
|
445
421
|
attrs = value[:valueSet]+ facets
|
446
|
-
Algebra::NodeConstraint.new(*attrs.compact)
|
422
|
+
Algebra::NodeConstraint.new(*attrs.compact, **self.options)
|
447
423
|
end
|
448
|
-
production(:
|
424
|
+
production(:_litNodeConstraint_4) do |value|
|
425
|
+
# numericFacet+
|
449
426
|
validate_facets(value, :litNodeConstraint)
|
450
|
-
Algebra::NodeConstraint.new(*value)
|
427
|
+
Algebra::NodeConstraint.new(*value, **self.options)
|
451
428
|
end
|
452
429
|
|
453
430
|
# [25] nonLitNodeConstraint ::= nonLiteralKind stringFacet*
|
@@ -458,12 +435,12 @@ module ShEx
|
|
458
435
|
facets = Array(value[:_nonLitNodeConstraint_3])
|
459
436
|
validate_facets(facets, :nonLitNodeConstraint)
|
460
437
|
attrs = Array(value[:nonLiteralKind]) + facets
|
461
|
-
Algebra::NodeConstraint.new(*attrs.compact)
|
438
|
+
Algebra::NodeConstraint.new(*attrs.compact, **self.options)
|
462
439
|
end
|
463
440
|
production(:_nonLitNodeConstraint_2) do |value|
|
464
441
|
# stringFacet+
|
465
442
|
validate_facets(value, :nonLitNodeConstraint)
|
466
|
-
Algebra::NodeConstraint.new(*value)
|
443
|
+
Algebra::NodeConstraint.new(*value, **self.options)
|
467
444
|
end
|
468
445
|
|
469
446
|
def validate_facets(facets, prod)
|
@@ -478,7 +455,7 @@ module ShEx
|
|
478
455
|
# [26] nonLiteralKind ::= "IRI" | "BNODE" | "NONLITERAL"
|
479
456
|
start_production(:nonLiteralKind, insensitive_strings: :lower)
|
480
457
|
production(:nonLiteralKind) do |value|
|
481
|
-
value.
|
458
|
+
value.to_sym
|
482
459
|
end
|
483
460
|
|
484
461
|
# [27] xsFacet ::= stringFacet | numericFacet
|
@@ -507,7 +484,7 @@ module ShEx
|
|
507
484
|
end
|
508
485
|
start_production(:_stringFacet_1, as_hash: true)
|
509
486
|
production(:_stringFacet_1) do |value|
|
510
|
-
[value[:stringLength].
|
487
|
+
[value[:stringLength].to_sym, value[:INTEGER]]
|
511
488
|
end
|
512
489
|
|
513
490
|
# [29] stringLength ::= "LENGTH" | "MINLENGTH" | "MAXLENGTH"
|
@@ -517,11 +494,11 @@ module ShEx
|
|
517
494
|
# | numericLength INTEGER
|
518
495
|
start_production(:_numericFacet_1, as_hash: true)
|
519
496
|
production(:_numericFacet_1) do |value|
|
520
|
-
[value[:numericRange].
|
497
|
+
[value[:numericRange].to_sym, value[:numericLiteral]]
|
521
498
|
end
|
522
499
|
start_production(:_numericFacet_2, as_hash: true)
|
523
500
|
production(:_numericFacet_2) do |value|
|
524
|
-
[value[:numericLength].
|
501
|
+
[value[:numericLength].to_sym, value[:INTEGER]]
|
525
502
|
end
|
526
503
|
|
527
504
|
# [31] numericRange ::= "MININCLUSIVE" | "MINEXCLUSIVE" | "MAXINCLUSIVE" | "MAXEXCLUSIVE"
|
@@ -549,15 +526,15 @@ module ShEx
|
|
549
526
|
value[:_inlineShapeDefinition_2])
|
550
527
|
end
|
551
528
|
def shape_definition(extra_closed, expression, annotations = [], semact = [])
|
552
|
-
closed = extra_closed.any? {|v| v.to_s
|
553
|
-
extra = extra_closed.reject {|v| v.to_s
|
529
|
+
closed = extra_closed.any? {|v| v.to_s == 'closed'}
|
530
|
+
extra = extra_closed.reject {|v| v.to_s == 'closed'}
|
554
531
|
attrs = extra
|
555
532
|
attrs << :closed if closed
|
556
533
|
attrs << expression if expression
|
557
534
|
attrs += annotations
|
558
535
|
attrs += semact
|
559
536
|
|
560
|
-
Algebra::Shape.new(*attrs)
|
537
|
+
Algebra::Shape.new(*attrs, **self.options)
|
561
538
|
end
|
562
539
|
private :shape_definition
|
563
540
|
|
@@ -576,7 +553,7 @@ module ShEx
|
|
576
553
|
start_production(:oneOfTripleExpr, as_hash: true)
|
577
554
|
production(:oneOfTripleExpr) do |value|
|
578
555
|
expressions = [value[:groupTripleExpr]] + value[:_oneOfTripleExpr_1]
|
579
|
-
expressions.length == 1 ? expressions.first : Algebra::OneOf.new(*expressions)
|
556
|
+
expressions.length == 1 ? expressions.first : Algebra::OneOf.new(*expressions, **self.options)
|
580
557
|
end
|
581
558
|
production(:_oneOfTripleExpr_2) do |value|
|
582
559
|
value.last[:groupTripleExpr]
|
@@ -586,13 +563,13 @@ module ShEx
|
|
586
563
|
start_production(:groupTripleExpr, as_hash: true)
|
587
564
|
production(:groupTripleExpr) do |value|
|
588
565
|
expressions = [value[:unaryTripleExpr]] + value[:_groupTripleExpr_1]
|
589
|
-
expressions.length == 1 ? expressions.first : Algebra::EachOf.new(*expressions)
|
566
|
+
expressions.length == 1 ? expressions.first : Algebra::EachOf.new(*expressions, **self.options)
|
590
567
|
end
|
591
568
|
production(:_groupTripleExpr_2) do |value|
|
592
569
|
value.last[:_groupTripleExpr_3]
|
593
570
|
end
|
594
571
|
|
595
|
-
# [43] unaryTripleExpr ::=
|
572
|
+
# [43] unaryTripleExpr ::= ('$' tripleExprLabel)? (tripleConstraint | bracketedTripleExpr) | include
|
596
573
|
start_production(:_unaryTripleExpr_1, as_hash: true)
|
597
574
|
production(:_unaryTripleExpr_1) do |value|
|
598
575
|
expression = value[:_unaryTripleExpr_3]
|
@@ -600,20 +577,18 @@ module ShEx
|
|
600
577
|
|
601
578
|
expression
|
602
579
|
end
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
value.last[:_productionLabel_1]
|
580
|
+
production(:_unaryTripleExpr_4) do |value|
|
581
|
+
# '$' tripleExprLabel
|
582
|
+
value.last[:tripleExprLabel]
|
607
583
|
end
|
608
584
|
|
609
|
-
# [44] bracketedTripleExpr ::= '('
|
585
|
+
# [44] bracketedTripleExpr ::= '(' tripleExpression ')' cardinality? annotation* semanticActions
|
610
586
|
start_production(:bracketedTripleExpr, as_hash: true)
|
611
587
|
production(:bracketedTripleExpr) do |value|
|
612
|
-
|
613
|
-
|
614
|
-
when Algebra::OneOf, Algebra::EachOf
|
588
|
+
case expression = value[:tripleExpression]
|
589
|
+
when Algebra::TripleExpression
|
615
590
|
else
|
616
|
-
error(nil, "Bracketed Expression requires
|
591
|
+
error(nil, "Bracketed Expression requires contained triple expression", production: :bracketedTripleExpr)
|
617
592
|
end
|
618
593
|
cardinality = value[:_bracketedTripleExpr_1] || {}
|
619
594
|
attrs = [
|
@@ -641,7 +616,7 @@ module ShEx
|
|
641
616
|
attrs += value[:_tripleConstraint_3]
|
642
617
|
attrs += value[:semanticActions]
|
643
618
|
|
644
|
-
Algebra::TripleConstraint.new(*attrs) # unless attrs.empty?
|
619
|
+
Algebra::TripleConstraint.new(*attrs, **self.options) # unless attrs.empty?
|
645
620
|
end
|
646
621
|
|
647
622
|
# [46] cardinality ::= '*' | '+' | '?' | REPEAT_RANGE
|
@@ -662,7 +637,7 @@ module ShEx
|
|
662
637
|
|
663
638
|
# [49] valueSetValue ::= iriRange | literalRange | languageRange | '.' exclusion+
|
664
639
|
production(:valueSetValue) do |value|
|
665
|
-
Algebra::Value.new(value)
|
640
|
+
Algebra::Value.new(value, **self.options)
|
666
641
|
end
|
667
642
|
production(:_valueSetValue_1) do |value|
|
668
643
|
# All exclusions must be consistent IRI/Literal/Language
|
@@ -672,28 +647,28 @@ module ShEx
|
|
672
647
|
unless value.all? {|e| e.is_a?(Algebra::IriStem) || e.is_a?(RDF::URI)}
|
673
648
|
error(nil, "Exclusions must all be IRI type")
|
674
649
|
end
|
675
|
-
Algebra::IriStemRange.new(:wildcard, value.unshift(:exclusions))
|
650
|
+
Algebra::IriStemRange.new(:wildcard, value.unshift(:exclusions), **self.options)
|
676
651
|
when Algebra::LiteralStem, RDF::Literal
|
677
652
|
unless value.all? {|e| e.is_a?(Algebra::LiteralStem) || e.is_a?(RDF::Literal)}
|
678
653
|
error(nil, "Exclusions must all be Literal type")
|
679
654
|
end
|
680
|
-
Algebra::LiteralStemRange.new(:wildcard, value.unshift(:exclusions))
|
655
|
+
Algebra::LiteralStemRange.new(:wildcard, value.unshift(:exclusions), **self.options)
|
681
656
|
else
|
682
657
|
unless value.all? {|e| e.is_a?(Algebra::LanguageStem) || e.is_a?(String)}
|
683
658
|
error(nil, "Exclusions must all be Language type")
|
684
659
|
end
|
685
|
-
Algebra::LanguageStemRange.new(:wildcard, value.unshift(:exclusions))
|
660
|
+
Algebra::LanguageStemRange.new(:wildcard, value.unshift(:exclusions), **self.options)
|
686
661
|
end
|
687
662
|
end
|
688
663
|
|
689
|
-
# [50] exclusion ::= '-' (iri | literal | LANGTAG) '~'?
|
664
|
+
# [50] exclusion ::= '.' '-' (iri | literal | LANGTAG) '~'?
|
690
665
|
start_production(:exclusion, as_hash: true)
|
691
666
|
production(:exclusion) do |value|
|
692
667
|
if value[:_exclusion_2]
|
693
668
|
case value[:_exclusion_1]
|
694
|
-
when RDF::URI then Algebra::IriStem.new(value[:_exclusion_1])
|
695
|
-
when RDF::Literal then Algebra::LiteralStem.new(value[:_exclusion_1])
|
696
|
-
else Algebra::LanguageStem.new(value[:_exclusion_1])
|
669
|
+
when RDF::URI then Algebra::IriStem.new(value[:_exclusion_1], **self.options)
|
670
|
+
when RDF::Literal then Algebra::LiteralStem.new(value[:_exclusion_1], **self.options)
|
671
|
+
else Algebra::LanguageStem.new(value[:_exclusion_1], **self.options)
|
697
672
|
end
|
698
673
|
else
|
699
674
|
value[:_exclusion_1]
|
@@ -706,9 +681,9 @@ module ShEx
|
|
706
681
|
if value.last[:_iriRange_1]
|
707
682
|
exclusions = value.last[:_iriRange_1].last[:_iriRange_3]
|
708
683
|
if exclusions.empty?
|
709
|
-
Algebra::IriStem.new(iri)
|
684
|
+
Algebra::IriStem.new(iri, **self.options)
|
710
685
|
else
|
711
|
-
Algebra::IriStemRange.new(iri, exclusions.unshift(:exclusions))
|
686
|
+
Algebra::IriStemRange.new(iri, exclusions.unshift(:exclusions), **self.options)
|
712
687
|
end
|
713
688
|
else
|
714
689
|
iri
|
@@ -718,7 +693,7 @@ module ShEx
|
|
718
693
|
# [52] iriExclusion ::= '-' iri '~'?
|
719
694
|
start_production(:iriExclusion, as_hash: true)
|
720
695
|
production(:iriExclusion) do |value|
|
721
|
-
value[:_iriExclusion_1] ? Algebra::IriStem.new(value[:iri]) : value[:iri]
|
696
|
+
value[:_iriExclusion_1] ? Algebra::IriStem.new(value[:iri], **self.options) : value[:iri]
|
722
697
|
end
|
723
698
|
|
724
699
|
# [53] literalRange ::= literal ('~' literalExclusion*)?
|
@@ -726,11 +701,10 @@ module ShEx
|
|
726
701
|
lit = value.first[:literal]
|
727
702
|
if value.last[:_literalRange_1]
|
728
703
|
exclusions = value.last[:_literalRange_1].last[:_literalRange_3]
|
729
|
-
# FIXME Algebra::LiteralStemRange.new(:wildcard, exclusions)
|
730
704
|
if exclusions.empty?
|
731
|
-
Algebra::LiteralStem.new(lit)
|
705
|
+
Algebra::LiteralStem.new(lit, **self.options)
|
732
706
|
else
|
733
|
-
Algebra::LiteralStemRange.new(lit, exclusions.unshift(:exclusions))
|
707
|
+
Algebra::LiteralStemRange.new(lit, exclusions.unshift(:exclusions), **self.options)
|
734
708
|
end
|
735
709
|
else
|
736
710
|
lit
|
@@ -741,32 +715,41 @@ module ShEx
|
|
741
715
|
start_production(:literalExclusion, as_hash: true)
|
742
716
|
production(:literalExclusion) do |value|
|
743
717
|
val = value[:literal]
|
744
|
-
value[:_literalExclusion_1] ? Algebra::LiteralStem.new(val) : val
|
718
|
+
value[:_literalExclusion_1] ? Algebra::LiteralStem.new(val, **self.options) : val
|
745
719
|
end
|
746
720
|
|
747
721
|
# [55] languageRange ::= LANGTAG ('~' languageExclusion*)?
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
722
|
+
# | '@' '~' languageExclusion*
|
723
|
+
start_production(:_languageRange_1, as_hash: true)
|
724
|
+
production(:_languageRange_1) do |value|
|
725
|
+
exclusions = value[:_languageRange_3] if value[:_languageRange_3]
|
726
|
+
pattern = !!value[:_languageRange_3]
|
752
727
|
if pattern && exclusions.empty?
|
753
|
-
Algebra::LanguageStem.new(value[:LANGTAG])
|
728
|
+
Algebra::LanguageStem.new(value[:LANGTAG], **self.options)
|
754
729
|
elsif pattern
|
755
|
-
Algebra::LanguageStemRange.new(value[:LANGTAG], exclusions.unshift(:exclusions))
|
730
|
+
Algebra::LanguageStemRange.new(value[:LANGTAG], exclusions.unshift(:exclusions), **self.options)
|
756
731
|
else
|
757
|
-
Algebra::Language.new(value[:LANGTAG])
|
732
|
+
Algebra::Language.new(value[:LANGTAG], **self.options)
|
758
733
|
end
|
759
734
|
end
|
760
735
|
start_production(:_languageRange_2, as_hash: true)
|
761
736
|
production(:_languageRange_2) do |value|
|
762
|
-
value[:
|
737
|
+
exclusions = value[:_languageRange_6]
|
738
|
+
if exclusions.empty?
|
739
|
+
Algebra::LanguageStem.new('', **self.options)
|
740
|
+
else
|
741
|
+
Algebra::LanguageStemRange.new('', exclusions.unshift(:exclusions), **self.options)
|
742
|
+
end
|
743
|
+
end
|
744
|
+
production(:_languageRange_4) do |value|
|
745
|
+
value.last[:_languageRange_5]
|
763
746
|
end
|
764
747
|
|
765
748
|
# [56] languageExclusion ::= '-' LANGTAG '~'?
|
766
749
|
start_production(:languageExclusion, as_hash: true)
|
767
750
|
production(:languageExclusion) do |value|
|
768
751
|
val = value[:LANGTAG]
|
769
|
-
value[:_languageExclusion_1] ? Algebra::LanguageStem.new(val) : val
|
752
|
+
value[:_languageExclusion_1] ? Algebra::LanguageStem.new(val, **self.options) : val
|
770
753
|
end
|
771
754
|
|
772
755
|
# [57] include ::= '&' tripleExprLabel
|
@@ -777,7 +760,7 @@ module ShEx
|
|
777
760
|
# [58] annotation ::= '//' predicate (iri | literal)
|
778
761
|
start_production(:annotation, as_hash: true)
|
779
762
|
production(:annotation) do |value|
|
780
|
-
Algebra::Annotation.new([:predicate, value[:predicate]], value[:_annotation_1])
|
763
|
+
Algebra::Annotation.new([:predicate, value[:predicate]], value[:_annotation_1], **self.options)
|
781
764
|
end
|
782
765
|
|
783
766
|
# [59] semanticActions ::= codeDecl*
|
@@ -786,7 +769,7 @@ module ShEx
|
|
786
769
|
start_production(:codeDecl, as_hash: true)
|
787
770
|
production(:codeDecl) do |value|
|
788
771
|
code = value[:_codeDecl_1] unless value[:_codeDecl_1] == '%'
|
789
|
-
Algebra::SemAct.new(*[value[:iri], code].compact)
|
772
|
+
Algebra::SemAct.new(*[value[:iri], code].compact, **self.options)
|
790
773
|
end
|
791
774
|
|
792
775
|
# [13t] literal ::= rdfLiteral | numericLiteral | booleanLiteral
|
@@ -815,7 +798,8 @@ module ShEx
|
|
815
798
|
value.last[:datatype]
|
816
799
|
end
|
817
800
|
|
818
|
-
# [134s] booleanLiteral ::=
|
801
|
+
# [134s] booleanLiteral ::= "true" | "false"
|
802
|
+
start_production(:booleanLiteral, insensitive_strings: :lower)
|
819
803
|
production(:booleanLiteral) do |value|
|
820
804
|
literal(value == 'true')
|
821
805
|
end
|