rdf-turtle 0.1.0 → 0.1.1
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.
- data/History +4 -0
- data/README.markdown +2 -2
- data/VERSION +1 -1
- data/lib/rdf/ll1/lexer.rb +19 -4
- data/lib/rdf/ll1/parser.rb +126 -75
- data/lib/rdf/turtle.rb +0 -2
- data/lib/rdf/turtle/format.rb +3 -2
- data/lib/rdf/turtle/meta.rb +553 -126
- data/lib/rdf/turtle/reader.rb +26 -26
- data/lib/rdf/turtle/terminals.rb +20 -10
- data/lib/rdf/turtle/writer.rb +41 -36
- metadata +41 -19
- data/lib/rdf/turtle/patches.rb +0 -38
data/History
CHANGED
data/README.markdown
CHANGED
@@ -74,7 +74,7 @@ Using SWAP utilities, this is done as follows:
|
|
74
74
|
python http://www.w3.org/2000/10/swap/grammar/ebnf2turtle.py \
|
75
75
|
etc/turtle.bnf \
|
76
76
|
ttl language \
|
77
|
-
'http://www.w3.org/
|
77
|
+
'http://www.w3.org/ns/formats/Turtle#' > |
|
78
78
|
sed -e 's/^ ".*"$/ g:seq (&)/' > etc/turtle.n3
|
79
79
|
|
80
80
|
python http://www.w3.org/2000/10/swap/cwm.py etc/turtle.n3 \
|
@@ -84,7 +84,7 @@ Using SWAP utilities, this is done as follows:
|
|
84
84
|
|
85
85
|
script/gramLL1 \
|
86
86
|
--grammar etc/turtle-ll1.n3 \
|
87
|
-
--lang 'http://www.w3.org/
|
87
|
+
--lang 'http://www.w3.org/ns/formats/Turtle#language' \
|
88
88
|
--output lib/rdf/turtle/meta.rb
|
89
89
|
|
90
90
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/lib/rdf/ll1/lexer.rb
CHANGED
@@ -200,12 +200,20 @@ module RDF::LL1
|
|
200
200
|
|
201
201
|
if token.nil?
|
202
202
|
lexme = (scanner.rest.split(/#{@whitespace}|#{@comment}/).first rescue nil) || scanner.rest
|
203
|
-
raise Error.new("Invalid token #{lexme.inspect}
|
203
|
+
raise Error.new("Invalid token #{lexme[0..100].inspect}",
|
204
204
|
:input => scanner.rest[0..100], :token => lexme, :lineno => lineno)
|
205
205
|
end
|
206
206
|
|
207
207
|
token
|
208
208
|
end
|
209
|
+
rescue ArgumentError, Encoding::CompatibilityError => e
|
210
|
+
raise Error.new("#{e.message} on line #{lineno + 1}",
|
211
|
+
:input => (scanner.rest[0..100] rescue '??'), :token => lexme, :lineno => lineno)
|
212
|
+
rescue Error
|
213
|
+
raise
|
214
|
+
rescue
|
215
|
+
STDERR.puts "Expected ArgumentError, got #{$!.class}"
|
216
|
+
raise
|
209
217
|
end
|
210
218
|
|
211
219
|
##
|
@@ -223,13 +231,13 @@ module RDF::LL1
|
|
223
231
|
#
|
224
232
|
# @return [Token]
|
225
233
|
def recover
|
226
|
-
scanner.skip(/./)
|
227
234
|
until scanner.eos? do
|
228
235
|
begin
|
236
|
+
shift
|
229
237
|
return first
|
230
|
-
rescue Error
|
238
|
+
rescue Error, ArgumentError
|
231
239
|
# Ignore errors until something scans, or EOS.
|
232
|
-
scanner.
|
240
|
+
scanner.pos = scanner.pos + 1
|
233
241
|
end
|
234
242
|
end
|
235
243
|
end
|
@@ -454,5 +462,12 @@ module RDF::LL1
|
|
454
462
|
super(message.to_s)
|
455
463
|
end
|
456
464
|
end # class Error
|
465
|
+
|
466
|
+
unless "".respond_to?(:force_encoding)
|
467
|
+
# Compatibility with 1.9 Encoding
|
468
|
+
module Encoding
|
469
|
+
class CompatibilityError < StandardError; end
|
470
|
+
end
|
471
|
+
end
|
457
472
|
end # class Lexer
|
458
473
|
end # module RDF::Turtle
|
data/lib/rdf/ll1/parser.rb
CHANGED
@@ -13,11 +13,12 @@ module RDF::LL1
|
|
13
13
|
base.extend(ClassMethods)
|
14
14
|
end
|
15
15
|
|
16
|
+
# DSL for creating terminals and productions
|
16
17
|
module ClassMethods
|
17
|
-
def production_handlers;
|
18
|
-
def terminal_handlers;
|
19
|
-
def patterns;
|
20
|
-
def unescape_terms;
|
18
|
+
def production_handlers; @@production_handlers || {}; end
|
19
|
+
def terminal_handlers; @@terminal_handlers || {}; end
|
20
|
+
def patterns; @@patterns || []; end
|
21
|
+
def unescape_terms; @@unescape_terms || []; end
|
21
22
|
|
22
23
|
##
|
23
24
|
# Defines a production called during different phases of parsing
|
@@ -42,8 +43,8 @@ module RDF::LL1
|
|
42
43
|
# Should conform to the yield specs for #initialize
|
43
44
|
# Yield to generate a triple
|
44
45
|
def production(term, &block)
|
45
|
-
|
46
|
-
|
46
|
+
@@production_handlers ||= {}
|
47
|
+
@@production_handlers[term] = block
|
47
48
|
end
|
48
49
|
|
49
50
|
##
|
@@ -72,12 +73,12 @@ module RDF::LL1
|
|
72
73
|
# Block passed to initialization for yielding to calling reader.
|
73
74
|
# Should conform to the yield specs for #initialize
|
74
75
|
def terminal(term, regexp, options = {}, &block)
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
76
|
+
@@patterns ||= []
|
77
|
+
@@patterns << [term, regexp] # Passed in order to define evaulation sequence
|
78
|
+
@@terminal_handlers ||= {}
|
79
|
+
@@terminal_handlers[term] = block if block_given?
|
80
|
+
@@unescape_terms ||= []
|
81
|
+
@@unescape_terms << term if options[:unescape]
|
81
82
|
end
|
82
83
|
end
|
83
84
|
|
@@ -136,6 +137,8 @@ module RDF::LL1
|
|
136
137
|
# @param [Hash{Symbol => Object}] options
|
137
138
|
# @option options [Hash{Symbol,String => Hash{Symbol,String => Array<Symbol,String>}}] :branch
|
138
139
|
# LL1 branch table.
|
140
|
+
# @option options [HHash{Symbol,String => Array<Symbol,String>}] :first ({})
|
141
|
+
# Lists valid terminals that can precede each production (for error recovery).
|
139
142
|
# @option options [HHash{Symbol,String => Array<Symbol,String>}] :follow ({})
|
140
143
|
# Lists valid terminals that can follow each production (for error recovery).
|
141
144
|
# @option options [Boolean] :validate (false)
|
@@ -156,11 +159,13 @@ module RDF::LL1
|
|
156
159
|
def parse(input = nil, prod = nil, options = {}, &block)
|
157
160
|
@options = options.dup
|
158
161
|
@branch = options[:branch]
|
162
|
+
@first = options[:first] ||= {}
|
159
163
|
@follow = options[:follow] ||= {}
|
160
164
|
@lexer = input.is_a?(Lexer) ? input : Lexer.new(input, self.class.patterns, @options.merge(:unescape_terms => self.class.unescape_terms))
|
161
165
|
@productions = []
|
162
166
|
@parse_callback = block
|
163
167
|
@recovering = false
|
168
|
+
@error_log = []
|
164
169
|
terminals = self.class.patterns.map(&:first) # Get defined terminals to help with branching
|
165
170
|
|
166
171
|
# Unrecoverable errors
|
@@ -175,57 +180,49 @@ module RDF::LL1
|
|
175
180
|
pushed = false
|
176
181
|
if todo_stack.last[:terms].nil?
|
177
182
|
todo_stack.last[:terms] = []
|
178
|
-
|
179
|
-
token = @lexer.first
|
180
|
-
rescue RDF::LL1::Lexer::Error => e
|
181
|
-
# Recover from lexer error
|
182
|
-
@lineno = e.lineno
|
183
|
-
error("parse(production)", "With input '#{e.input}': #{e.message}",
|
184
|
-
:production => @productions.last)
|
183
|
+
cur_prod = todo_stack.last[:prod]
|
185
184
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
185
|
+
# Get this first valid token appropriate for the stacked productions,
|
186
|
+
# skipping invalid tokens until either a valid token is found (from @first),
|
187
|
+
# or a token appearing in @follow appears.
|
188
|
+
token = skip_until_valid(todo_stack)
|
189
|
+
|
190
|
+
# At this point, token is either nil, in the first set of the production,
|
191
|
+
# or in the follow set of this production or any previous production
|
190
192
|
debug("parse(production)") do
|
191
|
-
"#{token ? token.representation.inspect : 'nil'}, " +
|
192
|
-
"prod #{
|
193
|
+
"token #{token ? token.representation.inspect : 'nil'}, " +
|
194
|
+
"prod #{cur_prod.inspect}, " +
|
193
195
|
"depth #{depth}"
|
194
196
|
end
|
195
197
|
|
196
|
-
# Got an opened production
|
197
|
-
cur_prod = todo_stack.last[:prod]
|
198
198
|
# Got an opened production
|
199
199
|
onStart(cur_prod)
|
200
200
|
break if token.nil?
|
201
201
|
|
202
202
|
if prod_branch = @branch[cur_prod]
|
203
|
+
@recovering = false
|
203
204
|
sequence = prod_branch[token.representation]
|
204
205
|
debug("parse(production)") do
|
205
|
-
"#{token.representation.inspect} " +
|
206
|
+
"token #{token.representation.inspect} " +
|
206
207
|
"prod #{cur_prod.inspect}, " +
|
207
208
|
"prod_branch #{prod_branch.keys.inspect}, " +
|
208
209
|
"sequence #{sequence.inspect}"
|
209
210
|
end
|
211
|
+
|
210
212
|
if sequence.nil?
|
211
213
|
if prod_branch.has_key?(:"ebnf:empty")
|
212
214
|
debug("parse(production)") {"empty sequence for ebnf:empty"}
|
213
215
|
else
|
214
|
-
|
215
|
-
error
|
216
|
-
|
217
|
-
|
218
|
-
# Skip input until we find something that can follow the current production
|
219
|
-
skip_until_follow(todo_stack)
|
220
|
-
todo_stack.last[:terms] = []
|
216
|
+
# If there is no sequence for this production, we're
|
217
|
+
# in error recovery, and _token_ has been advanced to
|
218
|
+
# the point where it can reasonably follow this production
|
221
219
|
end
|
222
220
|
end
|
223
|
-
@recovering = false
|
224
221
|
todo_stack.last[:terms] += sequence if sequence
|
225
222
|
else
|
226
|
-
|
223
|
+
# Is this a fatal error?
|
224
|
+
error("parse(fatal?)", "No branches found for #{cur_prod.inspect}",
|
227
225
|
:production => cur_prod, :token => token)
|
228
|
-
todo_stack.last[:terms] = []
|
229
226
|
end
|
230
227
|
end
|
231
228
|
|
@@ -234,16 +231,15 @@ module RDF::LL1
|
|
234
231
|
begin
|
235
232
|
# Get the next term in this sequence
|
236
233
|
term = todo_stack.last[:terms].shift
|
234
|
+
debug("parse(token)") {"accept #{term.inspect}"}
|
237
235
|
if token = accept(term)
|
238
|
-
|
239
|
-
|
236
|
+
@recovering = false
|
237
|
+
debug("parse(token)") {"token #{token.inspect}, term #{term.inspect}"}
|
240
238
|
onToken(term, token)
|
241
239
|
elsif terminals.include?(term)
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
# Recover until we find something that can follow this term
|
246
|
-
skip_until_follow(todo_stack)
|
240
|
+
# If term is a terminal, then it is an error of token does not
|
241
|
+
# match it
|
242
|
+
skip_until_valid(todo_stack)
|
247
243
|
else
|
248
244
|
# If it's not a string (a symbol), it is a non-terminal and we push the new state
|
249
245
|
todo_stack << {:prod => term, :terms => nil}
|
@@ -251,11 +247,6 @@ module RDF::LL1
|
|
251
247
|
pushed = true
|
252
248
|
break
|
253
249
|
end
|
254
|
-
rescue RDF::LL1::Lexer::Error => e
|
255
|
-
# Skip forward for acceptable lexer input
|
256
|
-
error("parse", "#{term.inspect} expected: #{e.message}",
|
257
|
-
:production => todo_stack.last[:prod])
|
258
|
-
@lexer.recover
|
259
250
|
end
|
260
251
|
end
|
261
252
|
|
@@ -282,11 +273,11 @@ module RDF::LL1
|
|
282
273
|
todo_stack.pop
|
283
274
|
onFinish
|
284
275
|
end
|
285
|
-
|
286
|
-
|
287
|
-
@
|
288
|
-
|
289
|
-
|
276
|
+
|
277
|
+
# When all is said and done, raise the error log
|
278
|
+
unless @error_log.empty?
|
279
|
+
raise Error, @error_log.join("\n\t")
|
280
|
+
end
|
290
281
|
end
|
291
282
|
|
292
283
|
def depth; (@productions || []).length; end
|
@@ -341,21 +332,55 @@ module RDF::LL1
|
|
341
332
|
end
|
342
333
|
end
|
343
334
|
|
344
|
-
# Skip
|
345
|
-
|
335
|
+
# Skip through the input stream until something is found that
|
336
|
+
# is either valid based on the content of the production stack,
|
337
|
+
# or can follow a production in the stack.
|
338
|
+
#
|
339
|
+
# @return [Token]
|
340
|
+
def skip_until_valid(todo_stack)
|
341
|
+
cur_prod = todo_stack.last[:prod]
|
342
|
+
token = get_token
|
343
|
+
first = @first[cur_prod] || []
|
344
|
+
|
345
|
+
# If this token can be used by the top production, return it
|
346
|
+
# Otherwise, if the banch table allows empty, also return the token
|
347
|
+
return token if !@recovering && (
|
348
|
+
(@branch[cur_prod] && @branch[cur_prod].has_key?(:"ebnf:empty")) ||
|
349
|
+
first.any? {|t| token === t})
|
350
|
+
|
351
|
+
# Otherwise, it's an error condition, and skip either until
|
352
|
+
# we find a valid token for this production, or until we find
|
353
|
+
# something that can follow this production
|
354
|
+
expected = first.map {|v| v.inspect}.join(", ")
|
355
|
+
error("skip_until_valid", "expected one of #{expected}",
|
356
|
+
:production => cur_prod, :token => token)
|
357
|
+
|
346
358
|
debug("recovery", "stack follows:")
|
347
|
-
todo_stack.each do |todo|
|
359
|
+
todo_stack.reverse.each do |todo|
|
348
360
|
debug("recovery") {" #{todo[:prod]}: #{@follow[todo[:prod]].inspect}"}
|
349
361
|
end
|
362
|
+
|
363
|
+
# Find all follows to the top of the stack
|
350
364
|
follows = todo_stack.inject([]) do |follow, todo|
|
351
365
|
prod = todo[:prod]
|
352
366
|
follow += @follow[prod] || []
|
353
367
|
end.uniq
|
354
|
-
|
355
|
-
|
368
|
+
debug("recovery") {"follows: #{follows.inspect}"}
|
369
|
+
|
370
|
+
# Skip tokens until one is found in first or follows
|
371
|
+
while (token = get_token) && (first + follows).none? {|t| token === t}
|
356
372
|
skipped = @lexer.shift
|
357
373
|
progress("recovery") {"skip #{skipped.inspect}"}
|
358
374
|
end
|
375
|
+
debug("recovery") {"found #{token.inspect}"}
|
376
|
+
|
377
|
+
# If the token is a first, just return it. Otherwise, it is a follow
|
378
|
+
# and we need to skip to the end of the production
|
379
|
+
unless first.any? {|t| token == t} || todo_stack.last[:terms].empty?
|
380
|
+
debug("recovery") {"token in follows, skip past #{todo_stack.last[:terms].inspect}"}
|
381
|
+
todo_stack.last[:terms] = []
|
382
|
+
end
|
383
|
+
token
|
359
384
|
end
|
360
385
|
|
361
386
|
# @param [String] str Error string
|
@@ -363,16 +388,34 @@ module RDF::LL1
|
|
363
388
|
# @option options [URI, #to_s] :production
|
364
389
|
# @option options [Token] :token
|
365
390
|
def error(node, message, options = {})
|
366
|
-
return if @recovering
|
367
|
-
@recovering = true
|
368
391
|
message += ", found #{options[:token].representation.inspect}" if options[:token]
|
369
392
|
message += " at line #{@lineno}" if @lineno
|
370
|
-
message += ", production = #{options[:production].inspect}" if options[:production] && options[:debug]
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
393
|
+
message += ", production = #{options[:production].inspect}" if options[:production] && @options[:debug]
|
394
|
+
@error_log << message unless @recovering
|
395
|
+
@recovering = true
|
396
|
+
debug(node, message, options)
|
397
|
+
end
|
398
|
+
|
399
|
+
##
|
400
|
+
# Return the next token, entering error recovery if the token is invalid
|
401
|
+
#
|
402
|
+
# @return [Token]
|
403
|
+
def get_token
|
404
|
+
token = begin
|
405
|
+
@lexer.first
|
406
|
+
rescue RDF::LL1::Lexer::Error => e
|
407
|
+
# Recover from lexer error
|
408
|
+
@lineno = e.lineno
|
409
|
+
error("get_token", "With input '#{e.input}': #{e.message}",
|
410
|
+
:production => @productions.last)
|
411
|
+
|
412
|
+
# Retrieve next valid token
|
413
|
+
t = @lexer.recover
|
414
|
+
debug("get_token") {"skipped to #{t.inspect}"}
|
415
|
+
t
|
375
416
|
end
|
417
|
+
@lineno = token.lineno if token
|
418
|
+
token
|
376
419
|
end
|
377
420
|
|
378
421
|
##
|
@@ -383,13 +426,18 @@ module RDF::LL1
|
|
383
426
|
# @option options [Integer] :depth
|
384
427
|
# Recursion depth for indenting output
|
385
428
|
# @yieldreturn [String] added to message
|
386
|
-
def progress(node,
|
387
|
-
return
|
388
|
-
|
429
|
+
def progress(node, *args)
|
430
|
+
return unless @options[:progress] || @options[:debug]
|
431
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
432
|
+
message = args.join(",")
|
389
433
|
depth = options[:depth] || self.depth
|
390
|
-
message += yield if block_given?
|
391
|
-
|
392
|
-
|
434
|
+
message += yield.to_s if block_given?
|
435
|
+
if @options[:debug]
|
436
|
+
return debug(node, message, options)
|
437
|
+
else
|
438
|
+
str = "[#{@lineno}]#{' ' * depth}#{node}: #{message}"
|
439
|
+
$stderr.puts("[#{@lineno}]#{' ' * depth}#{node}: #{message}")
|
440
|
+
end
|
393
441
|
end
|
394
442
|
|
395
443
|
##
|
@@ -416,11 +464,14 @@ module RDF::LL1
|
|
416
464
|
end
|
417
465
|
|
418
466
|
##
|
467
|
+
# Accept the first token in the input stream if it matches
|
468
|
+
# _type\_or\_value_. Return nil otherwise.
|
469
|
+
#
|
419
470
|
# @param [Symbol, String] type_or_value
|
420
471
|
# @return [Token]
|
421
472
|
def accept(type_or_value)
|
422
|
-
if (token =
|
423
|
-
debug("accept") {"#{token.inspect} === #{type_or_value
|
473
|
+
if (token = get_token) && token === type_or_value
|
474
|
+
debug("accept") {"#{token.inspect} === #{type_or_value.inspect}"}
|
424
475
|
@lexer.shift
|
425
476
|
end
|
426
477
|
end
|
data/lib/rdf/turtle.rb
CHANGED
@@ -20,8 +20,6 @@ module RDF
|
|
20
20
|
# @author [Gregg Kellogg](http://kellogg-assoc.com/)
|
21
21
|
module Turtle
|
22
22
|
require 'rdf/turtle/format'
|
23
|
-
require 'rdf/turtle/patches'
|
24
|
-
autoload :Lexer, 'rdf/turtle/lexer'
|
25
23
|
autoload :Reader, 'rdf/turtle/reader'
|
26
24
|
autoload :Terminals, 'rdf/turtle/terminals'
|
27
25
|
autoload :VERSION, 'rdf/turtle/version'
|
data/lib/rdf/turtle/format.rb
CHANGED
@@ -36,7 +36,7 @@ module RDF::Turtle
|
|
36
36
|
# @return [Boolean]
|
37
37
|
def self.detect(sample)
|
38
38
|
!!sample.match(%r(
|
39
|
-
(?:@(base|prefix
|
39
|
+
(?:@(base|prefix)) | # Turtle keywords
|
40
40
|
["']{3} | # STRING_LITERAL_LONG1/2
|
41
41
|
"[^"]*"^^ | "[^"]*"@ | # Typed/Language literals
|
42
42
|
(?:
|
@@ -44,7 +44,8 @@ module RDF::Turtle
|
|
44
44
|
(?:\s*(?:(?:<[^>]*>) | (?:\w*:\w+) | (?:"[^"]*"))){3}
|
45
45
|
)
|
46
46
|
)mx) && !(
|
47
|
-
sample.match(%r(
|
47
|
+
sample.match(%r([{}])) || # TriG
|
48
|
+
sample.match(%r(@keywords|=>|\{)) || # N3
|
48
49
|
sample.match(%r(<(?:\/|html|rdf))i) || # HTML, RDF/XML
|
49
50
|
sample.match(%r(^(?:\s*<[^>]*>){4}.*\.\s*$)) || # N-Quads
|
50
51
|
sample.match(%r("@(context|subject|iri)")) # JSON-LD
|
data/lib/rdf/turtle/meta.rb
CHANGED
@@ -5,7 +5,7 @@ module RDF::Turtle::Meta
|
|
5
5
|
|
6
6
|
BRANCH = {
|
7
7
|
:"_:_g0" => {
|
8
|
-
";" => [:"_:
|
8
|
+
";" => [:"_:g2156954680"],
|
9
9
|
:"ebnf:empty" => [],
|
10
10
|
},
|
11
11
|
:"_:_g1" => {
|
@@ -27,7 +27,7 @@ module RDF::Turtle::Meta
|
|
27
27
|
:PNAME_NS => [:verb, :objectList],
|
28
28
|
},
|
29
29
|
:"_:_g4" => {
|
30
|
-
"," => [:"_:
|
30
|
+
"," => [:"_:g2153337920"],
|
31
31
|
";" => [],
|
32
32
|
:"ebnf:empty" => [],
|
33
33
|
},
|
@@ -35,29 +35,29 @@ module RDF::Turtle::Meta
|
|
35
35
|
"," => [",", :object],
|
36
36
|
},
|
37
37
|
:"_:_g6" => {
|
38
|
-
"(" => [:"_:
|
39
|
-
"[" => [:"_:
|
40
|
-
"false" => [:"_:
|
38
|
+
"(" => [:"_:g2152877000"],
|
39
|
+
"[" => [:"_:g2152877000"],
|
40
|
+
"false" => [:"_:g2152877000"],
|
41
41
|
:"ebnf:empty" => [],
|
42
|
-
:ANON => [:"_:
|
43
|
-
:BLANK_NODE_LABEL => [:"_:
|
44
|
-
:DECIMAL => [:"_:
|
45
|
-
:DECIMAL_NEGATIVE => [:"_:
|
46
|
-
:DECIMAL_POSITIVE => [:"_:
|
47
|
-
:DOUBLE => [:"_:
|
48
|
-
:DOUBLE_NEGATIVE => [:"_:
|
49
|
-
:DOUBLE_POSITIVE => [:"_:
|
50
|
-
:INTEGER => [:"_:
|
51
|
-
:INTEGER_NEGATIVE => [:"_:
|
52
|
-
:INTEGER_POSITIVE => [:"_:
|
53
|
-
:IRI_REF => [:"_:
|
54
|
-
:PNAME_LN => [:"_:
|
55
|
-
:PNAME_NS => [:"_:
|
56
|
-
:STRING_LITERAL1 => [:"_:
|
57
|
-
:STRING_LITERAL2 => [:"_:
|
58
|
-
:STRING_LITERAL_LONG1 => [:"_:
|
59
|
-
:STRING_LITERAL_LONG2 => [:"_:
|
60
|
-
"true" => [:"_:
|
42
|
+
:ANON => [:"_:g2152877000"],
|
43
|
+
:BLANK_NODE_LABEL => [:"_:g2152877000"],
|
44
|
+
:DECIMAL => [:"_:g2152877000"],
|
45
|
+
:DECIMAL_NEGATIVE => [:"_:g2152877000"],
|
46
|
+
:DECIMAL_POSITIVE => [:"_:g2152877000"],
|
47
|
+
:DOUBLE => [:"_:g2152877000"],
|
48
|
+
:DOUBLE_NEGATIVE => [:"_:g2152877000"],
|
49
|
+
:DOUBLE_POSITIVE => [:"_:g2152877000"],
|
50
|
+
:INTEGER => [:"_:g2152877000"],
|
51
|
+
:INTEGER_NEGATIVE => [:"_:g2152877000"],
|
52
|
+
:INTEGER_POSITIVE => [:"_:g2152877000"],
|
53
|
+
:IRI_REF => [:"_:g2152877000"],
|
54
|
+
:PNAME_LN => [:"_:g2152877000"],
|
55
|
+
:PNAME_NS => [:"_:g2152877000"],
|
56
|
+
:STRING_LITERAL1 => [:"_:g2152877000"],
|
57
|
+
:STRING_LITERAL2 => [:"_:g2152877000"],
|
58
|
+
:STRING_LITERAL_LONG1 => [:"_:g2152877000"],
|
59
|
+
:STRING_LITERAL_LONG2 => [:"_:g2152877000"],
|
60
|
+
"true" => [:"_:g2152877000"],
|
61
61
|
},
|
62
62
|
:"_:_g7" => {
|
63
63
|
"(" => [],
|
@@ -91,7 +91,7 @@ module RDF::Turtle::Meta
|
|
91
91
|
"(" => [],
|
92
92
|
"," => [],
|
93
93
|
"[" => [],
|
94
|
-
"^^" => [:"_:
|
94
|
+
"^^" => [:"_:g2165812760"],
|
95
95
|
"false" => [],
|
96
96
|
:ANON => [],
|
97
97
|
:BLANK_NODE_LABEL => [],
|
@@ -114,37 +114,7 @@ module RDF::Turtle::Meta
|
|
114
114
|
:STRING_LITERAL_LONG2 => [],
|
115
115
|
"true" => [],
|
116
116
|
},
|
117
|
-
:"_:
|
118
|
-
"," => [:"_:_g5", :"_:_g4"],
|
119
|
-
";" => [],
|
120
|
-
},
|
121
|
-
:"_:g2153021180" => {
|
122
|
-
"(" => [],
|
123
|
-
"," => [],
|
124
|
-
"[" => [],
|
125
|
-
"^^" => ["^^", :IRIref],
|
126
|
-
"false" => [],
|
127
|
-
:ANON => [],
|
128
|
-
:BLANK_NODE_LABEL => [],
|
129
|
-
:DECIMAL => [],
|
130
|
-
:DECIMAL_NEGATIVE => [],
|
131
|
-
:DECIMAL_POSITIVE => [],
|
132
|
-
:DOUBLE => [],
|
133
|
-
:DOUBLE_NEGATIVE => [],
|
134
|
-
:DOUBLE_POSITIVE => [],
|
135
|
-
:INTEGER => [],
|
136
|
-
:INTEGER_NEGATIVE => [],
|
137
|
-
:INTEGER_POSITIVE => [],
|
138
|
-
:IRI_REF => [],
|
139
|
-
:PNAME_LN => [],
|
140
|
-
:PNAME_NS => [],
|
141
|
-
:STRING_LITERAL1 => [],
|
142
|
-
:STRING_LITERAL2 => [],
|
143
|
-
:STRING_LITERAL_LONG1 => [],
|
144
|
-
:STRING_LITERAL_LONG2 => [],
|
145
|
-
"true" => [],
|
146
|
-
},
|
147
|
-
:"_:g2156281440" => {
|
117
|
+
:"_:g2152809700" => {
|
148
118
|
"(" => [:triples, "."],
|
149
119
|
"@base" => [],
|
150
120
|
"@prefix" => [],
|
@@ -155,33 +125,7 @@ module RDF::Turtle::Meta
|
|
155
125
|
:PNAME_LN => [:triples, "."],
|
156
126
|
:PNAME_NS => [:triples, "."],
|
157
127
|
},
|
158
|
-
:"_:
|
159
|
-
";" => [:"_:_g1", :"_:_g0"],
|
160
|
-
},
|
161
|
-
:"_:g2165342840" => {
|
162
|
-
"(" => [],
|
163
|
-
"@base" => [:directive, "."],
|
164
|
-
"@prefix" => [:directive, "."],
|
165
|
-
"[" => [],
|
166
|
-
:ANON => [],
|
167
|
-
:BLANK_NODE_LABEL => [],
|
168
|
-
:IRI_REF => [],
|
169
|
-
:PNAME_LN => [],
|
170
|
-
:PNAME_NS => [],
|
171
|
-
},
|
172
|
-
:"_:g2169711200" => {
|
173
|
-
"(" => [:statement, :turtleDoc],
|
174
|
-
"@base" => [:statement, :turtleDoc],
|
175
|
-
"@prefix" => [:statement, :turtleDoc],
|
176
|
-
"[" => [:statement, :turtleDoc],
|
177
|
-
:"ebnf:eof" => [],
|
178
|
-
:ANON => [:statement, :turtleDoc],
|
179
|
-
:BLANK_NODE_LABEL => [:statement, :turtleDoc],
|
180
|
-
:IRI_REF => [:statement, :turtleDoc],
|
181
|
-
:PNAME_LN => [:statement, :turtleDoc],
|
182
|
-
:PNAME_NS => [:statement, :turtleDoc],
|
183
|
-
},
|
184
|
-
:"_:g2169738260" => {
|
128
|
+
:"_:g2152877000" => {
|
185
129
|
"(" => [:object, :"_:_g6"],
|
186
130
|
"[" => [:object, :"_:_g6"],
|
187
131
|
"false" => [:object, :"_:_g6"],
|
@@ -205,6 +149,62 @@ module RDF::Turtle::Meta
|
|
205
149
|
:STRING_LITERAL_LONG2 => [:object, :"_:_g6"],
|
206
150
|
"true" => [:object, :"_:_g6"],
|
207
151
|
},
|
152
|
+
:"_:g2153010700" => {
|
153
|
+
"(" => [],
|
154
|
+
"@base" => [:directive, "."],
|
155
|
+
"@prefix" => [:directive, "."],
|
156
|
+
"[" => [],
|
157
|
+
:ANON => [],
|
158
|
+
:BLANK_NODE_LABEL => [],
|
159
|
+
:IRI_REF => [],
|
160
|
+
:PNAME_LN => [],
|
161
|
+
:PNAME_NS => [],
|
162
|
+
},
|
163
|
+
:"_:g2153337920" => {
|
164
|
+
"," => [:"_:_g5", :"_:_g4"],
|
165
|
+
";" => [],
|
166
|
+
},
|
167
|
+
:"_:g2156954680" => {
|
168
|
+
";" => [:"_:_g1", :"_:_g0"],
|
169
|
+
},
|
170
|
+
:"_:g2165682600" => {
|
171
|
+
"(" => [:statement, :turtleDoc],
|
172
|
+
"@base" => [:statement, :turtleDoc],
|
173
|
+
"@prefix" => [:statement, :turtleDoc],
|
174
|
+
"[" => [:statement, :turtleDoc],
|
175
|
+
:"ebnf:eof" => [],
|
176
|
+
:ANON => [:statement, :turtleDoc],
|
177
|
+
:BLANK_NODE_LABEL => [:statement, :turtleDoc],
|
178
|
+
:IRI_REF => [:statement, :turtleDoc],
|
179
|
+
:PNAME_LN => [:statement, :turtleDoc],
|
180
|
+
:PNAME_NS => [:statement, :turtleDoc],
|
181
|
+
},
|
182
|
+
:"_:g2165812760" => {
|
183
|
+
"(" => [],
|
184
|
+
"," => [],
|
185
|
+
"[" => [],
|
186
|
+
"^^" => ["^^", :IRIref],
|
187
|
+
"false" => [],
|
188
|
+
:ANON => [],
|
189
|
+
:BLANK_NODE_LABEL => [],
|
190
|
+
:DECIMAL => [],
|
191
|
+
:DECIMAL_NEGATIVE => [],
|
192
|
+
:DECIMAL_POSITIVE => [],
|
193
|
+
:DOUBLE => [],
|
194
|
+
:DOUBLE_NEGATIVE => [],
|
195
|
+
:DOUBLE_POSITIVE => [],
|
196
|
+
:INTEGER => [],
|
197
|
+
:INTEGER_NEGATIVE => [],
|
198
|
+
:INTEGER_POSITIVE => [],
|
199
|
+
:IRI_REF => [],
|
200
|
+
:PNAME_LN => [],
|
201
|
+
:PNAME_NS => [],
|
202
|
+
:STRING_LITERAL1 => [],
|
203
|
+
:STRING_LITERAL2 => [],
|
204
|
+
:STRING_LITERAL_LONG1 => [],
|
205
|
+
:STRING_LITERAL_LONG2 => [],
|
206
|
+
"true" => [],
|
207
|
+
},
|
208
208
|
:BASE => {
|
209
209
|
"@base" => ["@base"],
|
210
210
|
},
|
@@ -641,15 +641,15 @@ module RDF::Turtle::Meta
|
|
641
641
|
"@prefix" => [:PREFIX, :PNAME_NS, :IRI_REF],
|
642
642
|
},
|
643
643
|
:statement => {
|
644
|
-
"(" => [:"_:
|
645
|
-
"@base" => [:"_:
|
646
|
-
"@prefix" => [:"_:
|
647
|
-
"[" => [:"_:
|
648
|
-
:ANON => [:"_:
|
649
|
-
:BLANK_NODE_LABEL => [:"_:
|
650
|
-
:IRI_REF => [:"_:
|
651
|
-
:PNAME_LN => [:"_:
|
652
|
-
:PNAME_NS => [:"_:
|
644
|
+
"(" => [:"_:g2152809700"],
|
645
|
+
"@base" => [:"_:g2153010700"],
|
646
|
+
"@prefix" => [:"_:g2153010700"],
|
647
|
+
"[" => [:"_:g2152809700"],
|
648
|
+
:ANON => [:"_:g2152809700"],
|
649
|
+
:BLANK_NODE_LABEL => [:"_:g2152809700"],
|
650
|
+
:IRI_REF => [:"_:g2152809700"],
|
651
|
+
:PNAME_LN => [:"_:g2152809700"],
|
652
|
+
:PNAME_NS => [:"_:g2152809700"],
|
653
653
|
},
|
654
654
|
:subject => {
|
655
655
|
"(" => [:blank],
|
@@ -671,17 +671,17 @@ module RDF::Turtle::Meta
|
|
671
671
|
:PNAME_NS => [:subject, :predicateObjectList],
|
672
672
|
},
|
673
673
|
:turtleDoc => {
|
674
|
-
"(" => [:"_:
|
675
|
-
"@base" => [:"_:
|
676
|
-
"@prefix" => [:"_:
|
677
|
-
"[" => [:"_:
|
674
|
+
"(" => [:"_:g2165682600"],
|
675
|
+
"@base" => [:"_:g2165682600"],
|
676
|
+
"@prefix" => [:"_:g2165682600"],
|
677
|
+
"[" => [:"_:g2165682600"],
|
678
678
|
:"ebnf:empty" => [],
|
679
679
|
:"ebnf:eof" => [],
|
680
|
-
:ANON => [:"_:
|
681
|
-
:BLANK_NODE_LABEL => [:"_:
|
682
|
-
:IRI_REF => [:"_:
|
683
|
-
:PNAME_LN => [:"_:
|
684
|
-
:PNAME_NS => [:"_:
|
680
|
+
:ANON => [:"_:g2165682600"],
|
681
|
+
:BLANK_NODE_LABEL => [:"_:g2165682600"],
|
682
|
+
:IRI_REF => [:"_:g2165682600"],
|
683
|
+
:PNAME_LN => [:"_:g2165682600"],
|
684
|
+
:PNAME_NS => [:"_:g2165682600"],
|
685
685
|
},
|
686
686
|
:verb => {
|
687
687
|
"(" => [],
|
@@ -743,30 +743,27 @@ module RDF::Turtle::Meta
|
|
743
743
|
:STRING_LITERAL_LONG2,
|
744
744
|
"true"
|
745
745
|
].freeze
|
746
|
-
|
747
|
-
"
|
748
|
-
"
|
749
|
-
"@base",
|
750
|
-
"@prefix",
|
751
|
-
"[",
|
752
|
-
:ANON,
|
753
|
-
:BLANK_NODE_LABEL,
|
754
|
-
:IRI_REF,
|
755
|
-
:PNAME_LN,
|
756
|
-
:PNAME_NS],
|
746
|
+
FIRST = {
|
747
|
+
:"_:_g0" => [
|
748
|
+
";"],
|
757
749
|
:"_:_g1" => [
|
758
750
|
";"],
|
759
751
|
:"_:_g2" => [
|
760
|
-
"
|
752
|
+
"a",
|
753
|
+
:IRI_REF,
|
754
|
+
:PNAME_LN,
|
755
|
+
:PNAME_NS],
|
761
756
|
:"_:_g3" => [
|
762
|
-
"
|
757
|
+
"a",
|
758
|
+
:IRI_REF,
|
759
|
+
:PNAME_LN,
|
760
|
+
:PNAME_NS],
|
763
761
|
:"_:_g4" => [
|
764
|
-
"
|
762
|
+
","],
|
765
763
|
:"_:_g5" => [
|
766
764
|
","],
|
767
|
-
:"_:
|
765
|
+
:"_:_g6" => [
|
768
766
|
"(",
|
769
|
-
",",
|
770
767
|
"[",
|
771
768
|
"false",
|
772
769
|
"true",
|
@@ -788,9 +785,19 @@ module RDF::Turtle::Meta
|
|
788
785
|
:STRING_LITERAL2,
|
789
786
|
:STRING_LITERAL_LONG1,
|
790
787
|
:STRING_LITERAL_LONG2],
|
788
|
+
:"_:_g7" => [
|
789
|
+
"^^",
|
790
|
+
:LANGTAG],
|
791
791
|
:"_:_g8" => [
|
792
|
+
"^^",
|
793
|
+
:LANGTAG],
|
794
|
+
:"_:g2152346260" => [
|
795
|
+
"a",
|
796
|
+
:IRI_REF,
|
797
|
+
:PNAME_LN,
|
798
|
+
:PNAME_NS],
|
799
|
+
:"_:g2152446700" => [
|
792
800
|
"(",
|
793
|
-
",",
|
794
801
|
"[",
|
795
802
|
"false",
|
796
803
|
"true",
|
@@ -812,11 +819,130 @@ module RDF::Turtle::Meta
|
|
812
819
|
:STRING_LITERAL2,
|
813
820
|
:STRING_LITERAL_LONG1,
|
814
821
|
:STRING_LITERAL_LONG2],
|
815
|
-
:"_:
|
816
|
-
"
|
817
|
-
|
822
|
+
:"_:g2152796420" => [
|
823
|
+
"a",
|
824
|
+
:IRI_REF,
|
825
|
+
:PNAME_LN,
|
826
|
+
:PNAME_NS],
|
827
|
+
:"_:g2152809700" => [
|
828
|
+
"(",
|
829
|
+
"[",
|
830
|
+
:ANON,
|
831
|
+
:BLANK_NODE_LABEL,
|
832
|
+
:IRI_REF,
|
833
|
+
:PNAME_LN,
|
834
|
+
:PNAME_NS],
|
835
|
+
:"_:g2152877000" => [
|
836
|
+
"(",
|
837
|
+
"[",
|
838
|
+
"false",
|
839
|
+
"true",
|
840
|
+
:ANON,
|
841
|
+
:BLANK_NODE_LABEL,
|
842
|
+
:DECIMAL,
|
843
|
+
:DECIMAL_NEGATIVE,
|
844
|
+
:DECIMAL_POSITIVE,
|
845
|
+
:DOUBLE,
|
846
|
+
:DOUBLE_NEGATIVE,
|
847
|
+
:DOUBLE_POSITIVE,
|
848
|
+
:INTEGER,
|
849
|
+
:INTEGER_NEGATIVE,
|
850
|
+
:INTEGER_POSITIVE,
|
851
|
+
:IRI_REF,
|
852
|
+
:PNAME_LN,
|
853
|
+
:PNAME_NS,
|
854
|
+
:STRING_LITERAL1,
|
855
|
+
:STRING_LITERAL2,
|
856
|
+
:STRING_LITERAL_LONG1,
|
857
|
+
:STRING_LITERAL_LONG2],
|
858
|
+
:"_:g2152903680" => [
|
859
|
+
"(",
|
860
|
+
"[",
|
861
|
+
"false",
|
862
|
+
"true",
|
863
|
+
:ANON,
|
864
|
+
:BLANK_NODE_LABEL,
|
865
|
+
:DECIMAL,
|
866
|
+
:DECIMAL_NEGATIVE,
|
867
|
+
:DECIMAL_POSITIVE,
|
868
|
+
:DOUBLE,
|
869
|
+
:DOUBLE_NEGATIVE,
|
870
|
+
:DOUBLE_POSITIVE,
|
871
|
+
:INTEGER,
|
872
|
+
:INTEGER_NEGATIVE,
|
873
|
+
:INTEGER_POSITIVE,
|
874
|
+
:IRI_REF,
|
875
|
+
:PNAME_LN,
|
876
|
+
:PNAME_NS,
|
877
|
+
:STRING_LITERAL1,
|
878
|
+
:STRING_LITERAL2,
|
879
|
+
:STRING_LITERAL_LONG1,
|
880
|
+
:STRING_LITERAL_LONG2],
|
881
|
+
:"_:g2153010700" => [
|
882
|
+
"@base",
|
883
|
+
"@prefix"],
|
884
|
+
:"_:g2153124700" => [
|
885
|
+
"(",
|
886
|
+
"[",
|
887
|
+
"false",
|
888
|
+
"true",
|
889
|
+
:ANON,
|
890
|
+
:BLANK_NODE_LABEL,
|
891
|
+
:DECIMAL,
|
892
|
+
:DECIMAL_NEGATIVE,
|
893
|
+
:DECIMAL_POSITIVE,
|
894
|
+
:DOUBLE,
|
895
|
+
:DOUBLE_NEGATIVE,
|
896
|
+
:DOUBLE_POSITIVE,
|
897
|
+
:INTEGER,
|
898
|
+
:INTEGER_NEGATIVE,
|
899
|
+
:INTEGER_POSITIVE,
|
900
|
+
:IRI_REF,
|
901
|
+
:PNAME_LN,
|
902
|
+
:PNAME_NS,
|
903
|
+
:STRING_LITERAL1,
|
904
|
+
:STRING_LITERAL2,
|
905
|
+
:STRING_LITERAL_LONG1,
|
906
|
+
:STRING_LITERAL_LONG2],
|
907
|
+
:"_:g2153337920" => [
|
908
|
+
","],
|
909
|
+
:"_:g2153346700" => [
|
910
|
+
"a",
|
911
|
+
:IRI_REF,
|
912
|
+
:PNAME_LN,
|
913
|
+
:PNAME_NS],
|
914
|
+
:"_:g2153658980" => [
|
915
|
+
"(",
|
916
|
+
"[",
|
917
|
+
"false",
|
918
|
+
"true",
|
919
|
+
:ANON,
|
920
|
+
:BLANK_NODE_LABEL,
|
921
|
+
:DECIMAL,
|
922
|
+
:DECIMAL_NEGATIVE,
|
923
|
+
:DECIMAL_POSITIVE,
|
924
|
+
:DOUBLE,
|
925
|
+
:DOUBLE_NEGATIVE,
|
926
|
+
:DOUBLE_POSITIVE,
|
927
|
+
:INTEGER,
|
928
|
+
:INTEGER_NEGATIVE,
|
929
|
+
:INTEGER_POSITIVE,
|
930
|
+
:IRI_REF,
|
931
|
+
:PNAME_LN,
|
932
|
+
:PNAME_NS,
|
933
|
+
:STRING_LITERAL1,
|
934
|
+
:STRING_LITERAL2,
|
935
|
+
:STRING_LITERAL_LONG1,
|
936
|
+
:STRING_LITERAL_LONG2],
|
937
|
+
:"_:g2156398800" => [
|
938
|
+
:IRI_REF,
|
939
|
+
:PNAME_LN,
|
940
|
+
:PNAME_NS],
|
941
|
+
:"_:g2156472020" => [
|
942
|
+
"^^",
|
943
|
+
:LANGTAG],
|
944
|
+
:"_:g2156771960" => [
|
818
945
|
"(",
|
819
|
-
",",
|
820
946
|
"[",
|
821
947
|
"false",
|
822
948
|
"true",
|
@@ -838,7 +964,13 @@ module RDF::Turtle::Meta
|
|
838
964
|
:STRING_LITERAL2,
|
839
965
|
:STRING_LITERAL_LONG1,
|
840
966
|
:STRING_LITERAL_LONG2],
|
841
|
-
:"_:
|
967
|
+
:"_:g2156954680" => [
|
968
|
+
";"],
|
969
|
+
:"_:g2164414260" => [
|
970
|
+
","],
|
971
|
+
:"_:g2164800240" => [
|
972
|
+
";"],
|
973
|
+
:"_:g2165021300" => [
|
842
974
|
"(",
|
843
975
|
"@base",
|
844
976
|
"@prefix",
|
@@ -848,7 +980,7 @@ module RDF::Turtle::Meta
|
|
848
980
|
:IRI_REF,
|
849
981
|
:PNAME_LN,
|
850
982
|
:PNAME_NS],
|
851
|
-
:"_:
|
983
|
+
:"_:g2165682600" => [
|
852
984
|
"(",
|
853
985
|
"@base",
|
854
986
|
"@prefix",
|
@@ -858,8 +990,303 @@ module RDF::Turtle::Meta
|
|
858
990
|
:IRI_REF,
|
859
991
|
:PNAME_LN,
|
860
992
|
:PNAME_NS],
|
861
|
-
:"_:
|
862
|
-
|
993
|
+
:"_:g2165812760" => [
|
994
|
+
"^^"],
|
995
|
+
:BASE => [
|
996
|
+
"@base"],
|
997
|
+
:BlankNode => [
|
998
|
+
:ANON,
|
999
|
+
:BLANK_NODE_LABEL],
|
1000
|
+
:BooleanLiteral => [
|
1001
|
+
"false",
|
1002
|
+
"true"],
|
1003
|
+
:IRIref => [
|
1004
|
+
:IRI_REF,
|
1005
|
+
:PNAME_LN,
|
1006
|
+
:PNAME_NS],
|
1007
|
+
:NumericLiteral => [
|
1008
|
+
:DECIMAL,
|
1009
|
+
:DECIMAL_NEGATIVE,
|
1010
|
+
:DECIMAL_POSITIVE,
|
1011
|
+
:DOUBLE,
|
1012
|
+
:DOUBLE_NEGATIVE,
|
1013
|
+
:DOUBLE_POSITIVE,
|
1014
|
+
:INTEGER,
|
1015
|
+
:INTEGER_NEGATIVE,
|
1016
|
+
:INTEGER_POSITIVE],
|
1017
|
+
:NumericLiteralNegative => [
|
1018
|
+
:DECIMAL_NEGATIVE,
|
1019
|
+
:DOUBLE_NEGATIVE,
|
1020
|
+
:INTEGER_NEGATIVE],
|
1021
|
+
:NumericLiteralPositive => [
|
1022
|
+
:DECIMAL_POSITIVE,
|
1023
|
+
:DOUBLE_POSITIVE,
|
1024
|
+
:INTEGER_POSITIVE],
|
1025
|
+
:NumericLiteralUnsigned => [
|
1026
|
+
:DECIMAL,
|
1027
|
+
:DOUBLE,
|
1028
|
+
:INTEGER],
|
1029
|
+
:PREFIX => [
|
1030
|
+
"@prefix"],
|
1031
|
+
:PrefixedName => [
|
1032
|
+
:PNAME_LN,
|
1033
|
+
:PNAME_NS],
|
1034
|
+
:RDFLiteral => [
|
1035
|
+
:STRING_LITERAL1,
|
1036
|
+
:STRING_LITERAL2,
|
1037
|
+
:STRING_LITERAL_LONG1,
|
1038
|
+
:STRING_LITERAL_LONG2],
|
1039
|
+
:String => [
|
1040
|
+
:STRING_LITERAL1,
|
1041
|
+
:STRING_LITERAL2,
|
1042
|
+
:STRING_LITERAL_LONG1,
|
1043
|
+
:STRING_LITERAL_LONG2],
|
1044
|
+
:base => [
|
1045
|
+
"@base"],
|
1046
|
+
:blank => [
|
1047
|
+
"(",
|
1048
|
+
"[",
|
1049
|
+
:ANON,
|
1050
|
+
:BLANK_NODE_LABEL],
|
1051
|
+
:blankNodePropertyList => [
|
1052
|
+
"["],
|
1053
|
+
:collection => [
|
1054
|
+
"("],
|
1055
|
+
:directive => [
|
1056
|
+
"@base",
|
1057
|
+
"@prefix"],
|
1058
|
+
:literal => [
|
1059
|
+
"false",
|
1060
|
+
"true",
|
1061
|
+
:DECIMAL,
|
1062
|
+
:DECIMAL_NEGATIVE,
|
1063
|
+
:DECIMAL_POSITIVE,
|
1064
|
+
:DOUBLE,
|
1065
|
+
:DOUBLE_NEGATIVE,
|
1066
|
+
:DOUBLE_POSITIVE,
|
1067
|
+
:INTEGER,
|
1068
|
+
:INTEGER_NEGATIVE,
|
1069
|
+
:INTEGER_POSITIVE,
|
1070
|
+
:STRING_LITERAL1,
|
1071
|
+
:STRING_LITERAL2,
|
1072
|
+
:STRING_LITERAL_LONG1,
|
1073
|
+
:STRING_LITERAL_LONG2],
|
1074
|
+
:object => [
|
1075
|
+
"(",
|
1076
|
+
"[",
|
1077
|
+
"false",
|
1078
|
+
"true",
|
1079
|
+
:ANON,
|
1080
|
+
:BLANK_NODE_LABEL,
|
1081
|
+
:DECIMAL,
|
1082
|
+
:DECIMAL_NEGATIVE,
|
1083
|
+
:DECIMAL_POSITIVE,
|
1084
|
+
:DOUBLE,
|
1085
|
+
:DOUBLE_NEGATIVE,
|
1086
|
+
:DOUBLE_POSITIVE,
|
1087
|
+
:INTEGER,
|
1088
|
+
:INTEGER_NEGATIVE,
|
1089
|
+
:INTEGER_POSITIVE,
|
1090
|
+
:IRI_REF,
|
1091
|
+
:PNAME_LN,
|
1092
|
+
:PNAME_NS,
|
1093
|
+
:STRING_LITERAL1,
|
1094
|
+
:STRING_LITERAL2,
|
1095
|
+
:STRING_LITERAL_LONG1,
|
1096
|
+
:STRING_LITERAL_LONG2],
|
1097
|
+
:objectList => [
|
1098
|
+
"(",
|
1099
|
+
"[",
|
1100
|
+
"false",
|
1101
|
+
"true",
|
1102
|
+
:ANON,
|
1103
|
+
:BLANK_NODE_LABEL,
|
1104
|
+
:DECIMAL,
|
1105
|
+
:DECIMAL_NEGATIVE,
|
1106
|
+
:DECIMAL_POSITIVE,
|
1107
|
+
:DOUBLE,
|
1108
|
+
:DOUBLE_NEGATIVE,
|
1109
|
+
:DOUBLE_POSITIVE,
|
1110
|
+
:INTEGER,
|
1111
|
+
:INTEGER_NEGATIVE,
|
1112
|
+
:INTEGER_POSITIVE,
|
1113
|
+
:IRI_REF,
|
1114
|
+
:PNAME_LN,
|
1115
|
+
:PNAME_NS,
|
1116
|
+
:STRING_LITERAL1,
|
1117
|
+
:STRING_LITERAL2,
|
1118
|
+
:STRING_LITERAL_LONG1,
|
1119
|
+
:STRING_LITERAL_LONG2],
|
1120
|
+
:predicate => [
|
1121
|
+
:IRI_REF,
|
1122
|
+
:PNAME_LN,
|
1123
|
+
:PNAME_NS],
|
1124
|
+
:predicateObjectList => [
|
1125
|
+
"a",
|
1126
|
+
:IRI_REF,
|
1127
|
+
:PNAME_LN,
|
1128
|
+
:PNAME_NS],
|
1129
|
+
:prefixID => [
|
1130
|
+
"@prefix"],
|
1131
|
+
:statement => [
|
1132
|
+
"(",
|
1133
|
+
"@base",
|
1134
|
+
"@prefix",
|
1135
|
+
"[",
|
1136
|
+
:ANON,
|
1137
|
+
:BLANK_NODE_LABEL,
|
1138
|
+
:IRI_REF,
|
1139
|
+
:PNAME_LN,
|
1140
|
+
:PNAME_NS],
|
1141
|
+
:subject => [
|
1142
|
+
"(",
|
1143
|
+
"[",
|
1144
|
+
:ANON,
|
1145
|
+
:BLANK_NODE_LABEL,
|
1146
|
+
:IRI_REF,
|
1147
|
+
:PNAME_LN,
|
1148
|
+
:PNAME_NS],
|
1149
|
+
:triples => [
|
1150
|
+
"(",
|
1151
|
+
"[",
|
1152
|
+
:ANON,
|
1153
|
+
:BLANK_NODE_LABEL,
|
1154
|
+
:IRI_REF,
|
1155
|
+
:PNAME_LN,
|
1156
|
+
:PNAME_NS],
|
1157
|
+
:turtleDoc => [
|
1158
|
+
"(",
|
1159
|
+
"@base",
|
1160
|
+
"@prefix",
|
1161
|
+
"[",
|
1162
|
+
:ANON,
|
1163
|
+
:BLANK_NODE_LABEL,
|
1164
|
+
:IRI_REF,
|
1165
|
+
:PNAME_LN,
|
1166
|
+
:PNAME_NS],
|
1167
|
+
:verb => [
|
1168
|
+
"a",
|
1169
|
+
:IRI_REF,
|
1170
|
+
:PNAME_LN,
|
1171
|
+
:PNAME_NS],
|
1172
|
+
}.freeze
|
1173
|
+
FOLLOW = {
|
1174
|
+
"." => [
|
1175
|
+
"(",
|
1176
|
+
"@base",
|
1177
|
+
"@prefix",
|
1178
|
+
"[",
|
1179
|
+
:ANON,
|
1180
|
+
:BLANK_NODE_LABEL,
|
1181
|
+
:IRI_REF,
|
1182
|
+
:PNAME_LN,
|
1183
|
+
:PNAME_NS],
|
1184
|
+
:"_:_g1" => [
|
1185
|
+
";"],
|
1186
|
+
:"_:_g2" => [
|
1187
|
+
";"],
|
1188
|
+
:"_:_g3" => [
|
1189
|
+
";"],
|
1190
|
+
:"_:_g4" => [
|
1191
|
+
";"],
|
1192
|
+
:"_:_g5" => [
|
1193
|
+
","],
|
1194
|
+
:"_:_g7" => [
|
1195
|
+
"(",
|
1196
|
+
",",
|
1197
|
+
"[",
|
1198
|
+
"false",
|
1199
|
+
"true",
|
1200
|
+
:ANON,
|
1201
|
+
:BLANK_NODE_LABEL,
|
1202
|
+
:DECIMAL,
|
1203
|
+
:DECIMAL_NEGATIVE,
|
1204
|
+
:DECIMAL_POSITIVE,
|
1205
|
+
:DOUBLE,
|
1206
|
+
:DOUBLE_NEGATIVE,
|
1207
|
+
:DOUBLE_POSITIVE,
|
1208
|
+
:INTEGER,
|
1209
|
+
:INTEGER_NEGATIVE,
|
1210
|
+
:INTEGER_POSITIVE,
|
1211
|
+
:IRI_REF,
|
1212
|
+
:PNAME_LN,
|
1213
|
+
:PNAME_NS,
|
1214
|
+
:STRING_LITERAL1,
|
1215
|
+
:STRING_LITERAL2,
|
1216
|
+
:STRING_LITERAL_LONG1,
|
1217
|
+
:STRING_LITERAL_LONG2],
|
1218
|
+
:"_:_g8" => [
|
1219
|
+
"(",
|
1220
|
+
",",
|
1221
|
+
"[",
|
1222
|
+
"false",
|
1223
|
+
"true",
|
1224
|
+
:ANON,
|
1225
|
+
:BLANK_NODE_LABEL,
|
1226
|
+
:DECIMAL,
|
1227
|
+
:DECIMAL_NEGATIVE,
|
1228
|
+
:DECIMAL_POSITIVE,
|
1229
|
+
:DOUBLE,
|
1230
|
+
:DOUBLE_NEGATIVE,
|
1231
|
+
:DOUBLE_POSITIVE,
|
1232
|
+
:INTEGER,
|
1233
|
+
:INTEGER_NEGATIVE,
|
1234
|
+
:INTEGER_POSITIVE,
|
1235
|
+
:IRI_REF,
|
1236
|
+
:PNAME_LN,
|
1237
|
+
:PNAME_NS,
|
1238
|
+
:STRING_LITERAL1,
|
1239
|
+
:STRING_LITERAL2,
|
1240
|
+
:STRING_LITERAL_LONG1,
|
1241
|
+
:STRING_LITERAL_LONG2],
|
1242
|
+
:"_:g2152809700" => [
|
1243
|
+
"(",
|
1244
|
+
"@base",
|
1245
|
+
"@prefix",
|
1246
|
+
"[",
|
1247
|
+
:ANON,
|
1248
|
+
:BLANK_NODE_LABEL,
|
1249
|
+
:IRI_REF,
|
1250
|
+
:PNAME_LN,
|
1251
|
+
:PNAME_NS],
|
1252
|
+
:"_:g2153010700" => [
|
1253
|
+
"(",
|
1254
|
+
"@base",
|
1255
|
+
"@prefix",
|
1256
|
+
"[",
|
1257
|
+
:ANON,
|
1258
|
+
:BLANK_NODE_LABEL,
|
1259
|
+
:IRI_REF,
|
1260
|
+
:PNAME_LN,
|
1261
|
+
:PNAME_NS],
|
1262
|
+
:"_:g2153337920" => [
|
1263
|
+
";"],
|
1264
|
+
:"_:g2165682600" => [
|
1265
|
+
:"ebnf:eof"],
|
1266
|
+
:"_:g2165812760" => [
|
1267
|
+
"(",
|
1268
|
+
",",
|
1269
|
+
"[",
|
1270
|
+
"false",
|
1271
|
+
"true",
|
1272
|
+
:ANON,
|
1273
|
+
:BLANK_NODE_LABEL,
|
1274
|
+
:DECIMAL,
|
1275
|
+
:DECIMAL_NEGATIVE,
|
1276
|
+
:DECIMAL_POSITIVE,
|
1277
|
+
:DOUBLE,
|
1278
|
+
:DOUBLE_NEGATIVE,
|
1279
|
+
:DOUBLE_POSITIVE,
|
1280
|
+
:INTEGER,
|
1281
|
+
:INTEGER_NEGATIVE,
|
1282
|
+
:INTEGER_POSITIVE,
|
1283
|
+
:IRI_REF,
|
1284
|
+
:PNAME_LN,
|
1285
|
+
:PNAME_NS,
|
1286
|
+
:STRING_LITERAL1,
|
1287
|
+
:STRING_LITERAL2,
|
1288
|
+
:STRING_LITERAL_LONG1,
|
1289
|
+
:STRING_LITERAL_LONG2],
|
863
1290
|
"a" => [
|
864
1291
|
"(",
|
865
1292
|
"[",
|