439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
|
# File 'lib/bindy/language.rb', line 439
def _nt_integer
start_index = index
if node_cache[:integer].has_key?(index)
cached = node_cache[:integer][index]
if cached
node_cache[:integer][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
if has_terminal?(@regexps[gr = '\A[\\+\\-]'] ||= Regexp.new(gr), :regexp, index)
r2 = true
@index += 1
else
terminal_parse_failure('[\\+\\-]')
r2 = nil
end
if r2
r1 = r2
else
r1 = instantiate_node(SyntaxNode,input, index...index)
end
s0 << r1
if r1
s3, i3 = [], index
loop do
if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
r4 = true
@index += 1
else
terminal_parse_failure('[\\d]')
r4 = nil
end
if r4
s3 << r4
else
break
end
end
if s3.empty?
@index = i3
r3 = nil
else
r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
end
s0 << r3
end
if s0.last
r0 = instantiate_node(LiteralInteger,input, i0...index, s0)
r0.extend(Integer0)
else
@index = i0
r0 = nil
end
node_cache[:integer][start_index] = r0
r0
end
|