require 'treetop' require 'rfc3987/version' require 'rfc3987/parser' # Autogenerated from a Treetop grammar. Edits may be lost. module RFC3987 include Treetop::Runtime def root @root ||= :IRI end module IRI0 def iquery elements[1] end end module IRI1 def ifragment elements[1] end end module IRI2 def scheme elements[0] end def ihier_part elements[2] end end def _nt_IRI start_index = index if node_cache[:IRI].has_key?(index) cached = node_cache[:IRI][index] if cached node_cache[:IRI][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_scheme s0 << r1 if r1 if (match_len = has_terminal?(':', false, index)) r2 = true @index += match_len else terminal_parse_failure('\':\'') r2 = nil end s0 << r2 if r2 r3 = _nt_ihier_part s0 << r3 if r3 i5, s5 = index, [] if (match_len = has_terminal?('?', false, index)) r6 = true @index += match_len else terminal_parse_failure('\'?\'') r6 = nil end s5 << r6 if r6 r7 = _nt_iquery s5 << r7 end if s5.last r5 = instantiate_node(SyntaxNode,input, i5...index, s5) r5.extend(IRI0) else @index = i5 r5 = nil end if r5 r4 = r5 else r4 = instantiate_node(SyntaxNode,input, index...index) end s0 << r4 if r4 i9, s9 = index, [] if (match_len = has_terminal?('#', false, index)) r10 = true @index += match_len else terminal_parse_failure('\'#\'') r10 = nil end s9 << r10 if r10 r11 = _nt_ifragment s9 << r11 end if s9.last r9 = instantiate_node(SyntaxNode,input, i9...index, s9) r9.extend(IRI1) else @index = i9 r9 = nil end if r9 r8 = r9 else r8 = instantiate_node(SyntaxNode,input, index...index) end s0 << r8 end end end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(IRI2) else @index = i0 r0 = nil end node_cache[:IRI][start_index] = r0 r0 end module IhierPart0 def iauthority elements[1] end def ipath_abempty elements[2] end end def _nt_ihier_part start_index = index if node_cache[:ihier_part].has_key?(index) cached = node_cache[:ihier_part][index] if cached node_cache[:ihier_part][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index i1, s1 = index, [] if (match_len = has_terminal?('//', false, index)) r2 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else terminal_parse_failure('\'//\'') r2 = nil end s1 << r2 if r2 r3 = _nt_iauthority s1 << r3 if r3 r4 = _nt_ipath_abempty s1 << r4 end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(IhierPart0) else @index = i1 r1 = nil end if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else r5 = _nt_ipath_absolute if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r0 = r5 else r6 = _nt_ipath_rootless if r6 r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true r0 = r6 else r7 = _nt_ipath_empty if r7 r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true r0 = r7 else @index = i0 r0 = nil end end end end node_cache[:ihier_part][start_index] = r0 r0 end def _nt_IRI_reference start_index = index if node_cache[:IRI_reference].has_key?(index) cached = node_cache[:IRI_reference][index] if cached node_cache[:IRI_reference][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_IRI if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else r2 = _nt_irelative_ref if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r0 = r2 else @index = i0 r0 = nil end end node_cache[:IRI_reference][start_index] = r0 r0 end module AbsoluteIRI0 def iquery elements[1] end end module AbsoluteIRI1 def scheme elements[0] end def ihier_part elements[2] end end def _nt_absolute_IRI start_index = index if node_cache[:absolute_IRI].has_key?(index) cached = node_cache[:absolute_IRI][index] if cached node_cache[:absolute_IRI][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_scheme s0 << r1 if r1 if (match_len = has_terminal?(':', false, index)) r2 = true @index += match_len else terminal_parse_failure('\':\'') r2 = nil end s0 << r2 if r2 r3 = _nt_ihier_part s0 << r3 if r3 i5, s5 = index, [] if (match_len = has_terminal?('?', false, index)) r6 = true @index += match_len else terminal_parse_failure('\'?\'') r6 = nil end s5 << r6 if r6 r7 = _nt_iquery s5 << r7 end if s5.last r5 = instantiate_node(SyntaxNode,input, i5...index, s5) r5.extend(AbsoluteIRI0) else @index = i5 r5 = nil end if r5 r4 = r5 else r4 = instantiate_node(SyntaxNode,input, index...index) end s0 << r4 end end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(AbsoluteIRI1) else @index = i0 r0 = nil end node_cache[:absolute_IRI][start_index] = r0 r0 end module IrelativeRef0 def iquery elements[1] end end module IrelativeRef1 def ifragment elements[1] end end module IrelativeRef2 def irelative_part elements[0] end end def _nt_irelative_ref start_index = index if node_cache[:irelative_ref].has_key?(index) cached = node_cache[:irelative_ref][index] if cached node_cache[:irelative_ref][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_irelative_part s0 << r1 if r1 i3, s3 = index, [] if (match_len = has_terminal?('?', false, index)) r4 = true @index += match_len else terminal_parse_failure('\'?\'') r4 = nil end s3 << r4 if r4 r5 = _nt_iquery s3 << r5 end if s3.last r3 = instantiate_node(SyntaxNode,input, i3...index, s3) r3.extend(IrelativeRef0) else @index = i3 r3 = nil end if r3 r2 = r3 else r2 = instantiate_node(SyntaxNode,input, index...index) end s0 << r2 if r2 i7, s7 = index, [] if (match_len = has_terminal?('#', false, index)) r8 = true @index += match_len else terminal_parse_failure('\'#\'') r8 = nil end s7 << r8 if r8 r9 = _nt_ifragment s7 << r9 end if s7.last r7 = instantiate_node(SyntaxNode,input, i7...index, s7) r7.extend(IrelativeRef1) else @index = i7 r7 = nil end if r7 r6 = r7 else r6 = instantiate_node(SyntaxNode,input, index...index) end s0 << r6 end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(IrelativeRef2) else @index = i0 r0 = nil end node_cache[:irelative_ref][start_index] = r0 r0 end module IrelativePart0 def iauthority elements[1] end def ipath_abempty elements[2] end end def _nt_irelative_part start_index = index if node_cache[:irelative_part].has_key?(index) cached = node_cache[:irelative_part][index] if cached node_cache[:irelative_part][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index i1, s1 = index, [] if (match_len = has_terminal?('//', false, index)) r2 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else terminal_parse_failure('\'//\'') r2 = nil end s1 << r2 if r2 r3 = _nt_iauthority s1 << r3 if r3 r4 = _nt_ipath_abempty s1 << r4 end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(IrelativePart0) else @index = i1 r1 = nil end if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else r5 = _nt_ipath_absolute if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r0 = r5 else r6 = _nt_ipath_noscheme if r6 r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true r0 = r6 else r7 = _nt_ipath_empty if r7 r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true r0 = r7 else @index = i0 r0 = nil end end end end node_cache[:irelative_part][start_index] = r0 r0 end module Iauthority0 def iuserinfo elements[0] end end module Iauthority1 def port elements[1] end end module Iauthority2 def ihost elements[1] end end def _nt_iauthority start_index = index if node_cache[:iauthority].has_key?(index) cached = node_cache[:iauthority][index] if cached node_cache[:iauthority][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] i2, s2 = index, [] r3 = _nt_iuserinfo s2 << r3 if r3 if (match_len = has_terminal?('@', false, index)) r4 = true @index += match_len else terminal_parse_failure('\'@\'') r4 = nil end s2 << r4 end if s2.last r2 = instantiate_node(SyntaxNode,input, i2...index, s2) r2.extend(Iauthority0) else @index = i2 r2 = nil end if r2 r1 = r2 else r1 = instantiate_node(SyntaxNode,input, index...index) end s0 << r1 if r1 r5 = _nt_ihost s0 << r5 if r5 i7, s7 = index, [] if (match_len = has_terminal?(':', false, index)) r8 = true @index += match_len else terminal_parse_failure('\':\'') r8 = nil end s7 << r8 if r8 r9 = _nt_port s7 << r9 end if s7.last r7 = instantiate_node(SyntaxNode,input, i7...index, s7) r7.extend(Iauthority1) else @index = i7 r7 = nil end if r7 r6 = r7 else r6 = instantiate_node(SyntaxNode,input, index...index) end s0 << r6 end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(Iauthority2) else @index = i0 r0 = nil end node_cache[:iauthority][start_index] = r0 r0 end def _nt_iuserinfo start_index = index if node_cache[:iuserinfo].has_key?(index) cached = node_cache[:iuserinfo][index] if cached node_cache[:iuserinfo][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end s0, i0 = [], index loop do i1 = index r2 = _nt_iunreserved if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r1 = r2 else r3 = _nt_pct_encoded if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true r1 = r3 else r4 = _nt_sub_delims if r4 r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true r1 = r4 else if (match_len = has_terminal?(':', false, index)) r5 = true @index += match_len else terminal_parse_failure('\':\'') r5 = nil end if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r1 = r5 else @index = i1 r1 = nil end end end end if r1 s0 << r1 else break end end r0 = instantiate_node(SyntaxNode,input, i0...index, s0) node_cache[:iuserinfo][start_index] = r0 r0 end def _nt_ihost start_index = index if node_cache[:ihost].has_key?(index) cached = node_cache[:ihost][index] if cached node_cache[:ihost][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_IP_literal if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else r2 = _nt_IPv4address if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r0 = r2 else r3 = _nt_ireg_name if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true r0 = r3 else @index = i0 r0 = nil end end end node_cache[:ihost][start_index] = r0 r0 end def _nt_ireg_name start_index = index if node_cache[:ireg_name].has_key?(index) cached = node_cache[:ireg_name][index] if cached node_cache[:ireg_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end s0, i0 = [], index loop do i1 = index r2 = _nt_iunreserved if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r1 = r2 else r3 = _nt_pct_encoded if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true r1 = r3 else r4 = _nt_sub_delims if r4 r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true r1 = r4 else @index = i1 r1 = nil end end end if r1 s0 << r1 else break end end r0 = instantiate_node(SyntaxNode,input, i0...index, s0) node_cache[:ireg_name][start_index] = r0 r0 end def _nt_ipath start_index = index if node_cache[:ipath].has_key?(index) cached = node_cache[:ipath][index] if cached node_cache[:ipath][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_ipath_abempty if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else r2 = _nt_ipath_absolute if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r0 = r2 else r3 = _nt_ipath_noscheme if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true r0 = r3 else r4 = _nt_ipath_rootless if r4 r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true r0 = r4 else r5 = _nt_ipath_empty if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r0 = r5 else @index = i0 r0 = nil end end end end end node_cache[:ipath][start_index] = r0 r0 end module IpathAbempty0 def isegment elements[1] end end def _nt_ipath_abempty start_index = index if node_cache[:ipath_abempty].has_key?(index) cached = node_cache[:ipath_abempty][index] if cached node_cache[:ipath_abempty][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end s0, i0 = [], index loop do i1, s1 = index, [] if (match_len = has_terminal?('/', false, index)) r2 = true @index += match_len else terminal_parse_failure('\'/\'') r2 = nil end s1 << r2 if r2 r3 = _nt_isegment s1 << r3 end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(IpathAbempty0) else @index = i1 r1 = nil end if r1 s0 << r1 else break end end r0 = instantiate_node(SyntaxNode,input, i0...index, s0) node_cache[:ipath_abempty][start_index] = r0 r0 end module IpathAbsolute0 def isegment elements[1] end end module IpathAbsolute1 def isegment_nz elements[0] end end module IpathAbsolute2 end def _nt_ipath_absolute start_index = index if node_cache[:ipath_absolute].has_key?(index) cached = node_cache[:ipath_absolute][index] if cached node_cache[:ipath_absolute][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] if (match_len = has_terminal?('/', false, index)) r1 = true @index += match_len else terminal_parse_failure('\'/\'') r1 = nil end s0 << r1 if r1 i3, s3 = index, [] r4 = _nt_isegment_nz s3 << r4 if r4 s5, i5 = [], index loop do i6, s6 = index, [] if (match_len = has_terminal?('/', false, index)) r7 = true @index += match_len else terminal_parse_failure('\'/\'') r7 = nil end s6 << r7 if r7 r8 = _nt_isegment s6 << r8 end if s6.last r6 = instantiate_node(SyntaxNode,input, i6...index, s6) r6.extend(IpathAbsolute0) else @index = i6 r6 = nil end if r6 s5 << r6 else break end end r5 = instantiate_node(SyntaxNode,input, i5...index, s5) s3 << r5 end if s3.last r3 = instantiate_node(SyntaxNode,input, i3...index, s3) r3.extend(IpathAbsolute1) else @index = i3 r3 = nil end if r3 r2 = r3 else r2 = instantiate_node(SyntaxNode,input, index...index) end s0 << r2 end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(IpathAbsolute2) else @index = i0 r0 = nil end node_cache[:ipath_absolute][start_index] = r0 r0 end module IpathNoscheme0 def isegment elements[1] end end module IpathNoscheme1 def isegment_nz_nc elements[0] end end def _nt_ipath_noscheme start_index = index if node_cache[:ipath_noscheme].has_key?(index) cached = node_cache[:ipath_noscheme][index] if cached node_cache[:ipath_noscheme][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_isegment_nz_nc s0 << r1 if r1 s2, i2 = [], index loop do i3, s3 = index, [] if (match_len = has_terminal?('/', false, index)) r4 = true @index += match_len else terminal_parse_failure('\'/\'') r4 = nil end s3 << r4 if r4 r5 = _nt_isegment s3 << r5 end if s3.last r3 = instantiate_node(SyntaxNode,input, i3...index, s3) r3.extend(IpathNoscheme0) else @index = i3 r3 = nil end if r3 s2 << r3 else break end end r2 = instantiate_node(SyntaxNode,input, i2...index, s2) s0 << r2 end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(IpathNoscheme1) else @index = i0 r0 = nil end node_cache[:ipath_noscheme][start_index] = r0 r0 end module IpathRootless0 def isegment elements[1] end end module IpathRootless1 def isegment_nz elements[0] end end def _nt_ipath_rootless start_index = index if node_cache[:ipath_rootless].has_key?(index) cached = node_cache[:ipath_rootless][index] if cached node_cache[:ipath_rootless][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_isegment_nz s0 << r1 if r1 s2, i2 = [], index loop do i3, s3 = index, [] if (match_len = has_terminal?('/', false, index)) r4 = true @index += match_len else terminal_parse_failure('\'/\'') r4 = nil end s3 << r4 if r4 r5 = _nt_isegment s3 << r5 end if s3.last r3 = instantiate_node(SyntaxNode,input, i3...index, s3) r3.extend(IpathRootless0) else @index = i3 r3 = nil end if r3 s2 << r3 else break end end r2 = instantiate_node(SyntaxNode,input, i2...index, s2) s0 << r2 end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(IpathRootless1) else @index = i0 r0 = nil end node_cache[:ipath_rootless][start_index] = r0 r0 end def _nt_ipath_empty start_index = index if node_cache[:ipath_empty].has_key?(index) cached = node_cache[:ipath_empty][index] if cached node_cache[:ipath_empty][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end if (match_len = has_terminal?('', false, index)) r0 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else terminal_parse_failure('\'\'') r0 = nil end node_cache[:ipath_empty][start_index] = r0 r0 end def _nt_isegment start_index = index if node_cache[:isegment].has_key?(index) cached = node_cache[:isegment][index] if cached node_cache[:isegment][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end s0, i0 = [], index loop do r1 = _nt_ipchar if r1 s0 << r1 else break end end r0 = instantiate_node(SyntaxNode,input, i0...index, s0) node_cache[:isegment][start_index] = r0 r0 end def _nt_isegment_nz start_index = index if node_cache[:isegment_nz].has_key?(index) cached = node_cache[:isegment_nz][index] if cached node_cache[:isegment_nz][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end s0, i0 = [], index loop do r1 = _nt_ipchar if r1 s0 << r1 else break end end if s0.empty? @index = i0 r0 = nil else r0 = instantiate_node(SyntaxNode,input, i0...index, s0) end node_cache[:isegment_nz][start_index] = r0 r0 end def _nt_isegment_nz_nc start_index = index if node_cache[:isegment_nz_nc].has_key?(index) cached = node_cache[:isegment_nz_nc][index] if cached node_cache[:isegment_nz_nc][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end s0, i0 = [], index loop do i1 = index r2 = _nt_iunreserved if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r1 = r2 else r3 = _nt_pct_encoded if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true r1 = r3 else r4 = _nt_sub_delims if r4 r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true r1 = r4 else if (match_len = has_terminal?('@', false, index)) r5 = true @index += match_len else terminal_parse_failure('\'@\'') r5 = nil end if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r1 = r5 else @index = i1 r1 = nil end end end end if r1 s0 << r1 else break end end if s0.empty? @index = i0 r0 = nil else r0 = instantiate_node(SyntaxNode,input, i0...index, s0) end node_cache[:isegment_nz_nc][start_index] = r0 r0 end module PctEncoded0 def HEXDIG1 elements[1] end def HEXDIG2 elements[2] end end def _nt_pct_encoded start_index = index if node_cache[:pct_encoded].has_key?(index) cached = node_cache[:pct_encoded][index] if cached node_cache[:pct_encoded][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] if (match_len = has_terminal?('%', false, index)) r1 = true @index += match_len else terminal_parse_failure('\'%\'') r1 = nil end s0 << r1 if r1 r2 = _nt_HEXDIG s0 << r2 if r2 r3 = _nt_HEXDIG s0 << r3 end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(PctEncoded0) else @index = i0 r0 = nil end node_cache[:pct_encoded][start_index] = r0 r0 end def _nt_ipchar start_index = index if node_cache[:ipchar].has_key?(index) cached = node_cache[:ipchar][index] if cached node_cache[:ipchar][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_iunreserved if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else r2 = _nt_pct_encoded if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r0 = r2 else r3 = _nt_sub_delims if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true r0 = r3 else if (match_len = has_terminal?(':', false, index)) r4 = true @index += match_len else terminal_parse_failure('\':\'') r4 = nil end if r4 r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true r0 = r4 else if (match_len = has_terminal?('@', false, index)) r5 = true @index += match_len else terminal_parse_failure('\'@\'') r5 = nil end if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r0 = r5 else @index = i0 r0 = nil end end end end end node_cache[:ipchar][start_index] = r0 r0 end module Iquery0 def ipchar elements[0] end def iprivate elements[1] end end def _nt_iquery start_index = index if node_cache[:iquery].has_key?(index) cached = node_cache[:iquery][index] if cached node_cache[:iquery][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end s0, i0 = [], index loop do i1, s1 = index, [] r2 = _nt_ipchar s1 << r2 if r2 r3 = _nt_iprivate s1 << r3 if r3 if (match_len = has_terminal?('/', false, index)) r4 = true @index += match_len else terminal_parse_failure('\'/\'') r4 = nil end s1 << r4 if r4 if (match_len = has_terminal?('?', false, index)) r5 = true @index += match_len else terminal_parse_failure('\'?\'') r5 = nil end s1 << r5 end end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(Iquery0) else @index = i1 r1 = nil end if r1 s0 << r1 else break end end r0 = instantiate_node(SyntaxNode,input, i0...index, s0) node_cache[:iquery][start_index] = r0 r0 end module Ifragment0 def ipchar elements[0] end end def _nt_ifragment start_index = index if node_cache[:ifragment].has_key?(index) cached = node_cache[:ifragment][index] if cached node_cache[:ifragment][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end s0, i0 = [], index loop do i1, s1 = index, [] r2 = _nt_ipchar s1 << r2 if r2 if (match_len = has_terminal?('/', false, index)) r3 = true @index += match_len else terminal_parse_failure('\'/\'') r3 = nil end s1 << r3 if r3 if (match_len = has_terminal?('?', false, index)) r4 = true @index += match_len else terminal_parse_failure('\'?\'') r4 = nil end s1 << r4 end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(Ifragment0) else @index = i1 r1 = nil end if r1 s0 << r1 else break end end r0 = instantiate_node(SyntaxNode,input, i0...index, s0) node_cache[:ifragment][start_index] = r0 r0 end def _nt_iunreserved start_index = index if node_cache[:iunreserved].has_key?(index) cached = node_cache[:iunreserved][index] if cached node_cache[:iunreserved][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_ALPHA if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else r2 = _nt_DIGIT if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r0 = r2 else if (match_len = has_terminal?('-', false, index)) r3 = true @index += match_len else terminal_parse_failure('\'-\'') r3 = nil end if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true r0 = r3 else if (match_len = has_terminal?('.', false, index)) r4 = true @index += match_len else terminal_parse_failure('\'.\'') r4 = nil end if r4 r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true r0 = r4 else if (match_len = has_terminal?('_', false, index)) r5 = true @index += match_len else terminal_parse_failure('\'_\'') r5 = nil end if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r0 = r5 else if (match_len = has_terminal?('~', false, index)) r6 = true @index += match_len else terminal_parse_failure('\'~\'') r6 = nil end if r6 r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true r0 = r6 else r7 = _nt_ucschar if r7 r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true r0 = r7 else @index = i0 r0 = nil end end end end end end end node_cache[:iunreserved][start_index] = r0 r0 end def _nt_ucschar start_index = index if node_cache[:ucschar].has_key?(index) cached = node_cache[:ucschar][index] if cached node_cache[:ucschar][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index if has_terminal?(@regexps[gr = '\A[\\u000A0-\\u0D7FF]'] ||= Regexp.new(gr), :regexp, index) r1 = true @index += 1 else terminal_parse_failure('[\\u000A0-\\u0D7FF]') r1 = nil end if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else if has_terminal?(@regexps[gr = '\A[\\u0F900-\\u0FDCF]'] ||= Regexp.new(gr), :regexp, index) r2 = true @index += 1 else terminal_parse_failure('[\\u0F900-\\u0FDCF]') r2 = nil end if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r0 = r2 else if has_terminal?(@regexps[gr = '\A[\\u0FDF0-\\u0FFEF]'] ||= Regexp.new(gr), :regexp, index) r3 = true @index += 1 else terminal_parse_failure('[\\u0FDF0-\\u0FFEF]') r3 = nil end if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true r0 = r3 else if has_terminal?(@regexps[gr = '\A[\\u10000-\\u1FFFD]'] ||= Regexp.new(gr), :regexp, index) r4 = true @index += 1 else terminal_parse_failure('[\\u10000-\\u1FFFD]') r4 = nil end if r4 r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true r0 = r4 else if has_terminal?(@regexps[gr = '\A[\\u20000-\\u2FFFD]'] ||= Regexp.new(gr), :regexp, index) r5 = true @index += 1 else terminal_parse_failure('[\\u20000-\\u2FFFD]') r5 = nil end if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r0 = r5 else if has_terminal?(@regexps[gr = '\A[\\u30000-\\u3FFFD]'] ||= Regexp.new(gr), :regexp, index) r6 = true @index += 1 else terminal_parse_failure('[\\u30000-\\u3FFFD]') r6 = nil end if r6 r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true r0 = r6 else if has_terminal?(@regexps[gr = '\A[\\u40000-\\u4FFFD]'] ||= Regexp.new(gr), :regexp, index) r7 = true @index += 1 else terminal_parse_failure('[\\u40000-\\u4FFFD]') r7 = nil end if r7 r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true r0 = r7 else if has_terminal?(@regexps[gr = '\A[\\u50000-\\u5FFFD]'] ||= Regexp.new(gr), :regexp, index) r8 = true @index += 1 else terminal_parse_failure('[\\u50000-\\u5FFFD]') r8 = nil end if r8 r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true r0 = r8 else if has_terminal?(@regexps[gr = '\A[\\u60000-\\u6FFFD]'] ||= Regexp.new(gr), :regexp, index) r9 = true @index += 1 else terminal_parse_failure('[\\u60000-\\u6FFFD]') r9 = nil end if r9 r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true r0 = r9 else if has_terminal?(@regexps[gr = '\A[\\u70000-\\u7FFFD]'] ||= Regexp.new(gr), :regexp, index) r10 = true @index += 1 else terminal_parse_failure('[\\u70000-\\u7FFFD]') r10 = nil end if r10 r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true r0 = r10 else if has_terminal?(@regexps[gr = '\A[\\u80000-\\u8FFFD]'] ||= Regexp.new(gr), :regexp, index) r11 = true @index += 1 else terminal_parse_failure('[\\u80000-\\u8FFFD]') r11 = nil end if r11 r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true r0 = r11 else if has_terminal?(@regexps[gr = '\A[\\u90000-\\u9FFFD]'] ||= Regexp.new(gr), :regexp, index) r12 = true @index += 1 else terminal_parse_failure('[\\u90000-\\u9FFFD]') r12 = nil end if r12 r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true r0 = r12 else if has_terminal?(@regexps[gr = '\A[\\uA0000-\\uAFFFD]'] ||= Regexp.new(gr), :regexp, index) r13 = true @index += 1 else terminal_parse_failure('[\\uA0000-\\uAFFFD]') r13 = nil end if r13 r13 = SyntaxNode.new(input, (index-1)...index) if r13 == true r0 = r13 else if has_terminal?(@regexps[gr = '\A[\\uB0000-\\uBFFFD]'] ||= Regexp.new(gr), :regexp, index) r14 = true @index += 1 else terminal_parse_failure('[\\uB0000-\\uBFFFD]') r14 = nil end if r14 r14 = SyntaxNode.new(input, (index-1)...index) if r14 == true r0 = r14 else if has_terminal?(@regexps[gr = '\A[\\uC0000-\\uCFFFD]'] ||= Regexp.new(gr), :regexp, index) r15 = true @index += 1 else terminal_parse_failure('[\\uC0000-\\uCFFFD]') r15 = nil end if r15 r15 = SyntaxNode.new(input, (index-1)...index) if r15 == true r0 = r15 else if has_terminal?(@regexps[gr = '\A[\\uE1000-\\uEFFFD]'] ||= Regexp.new(gr), :regexp, index) r16 = true @index += 1 else terminal_parse_failure('[\\uE1000-\\uEFFFD]') r16 = nil end if r16 r16 = SyntaxNode.new(input, (index-1)...index) if r16 == true r0 = r16 else @index = i0 r0 = nil end end end end end end end end end end end end end end end end node_cache[:ucschar][start_index] = r0 r0 end def _nt_iprivate start_index = index if node_cache[:iprivate].has_key?(index) cached = node_cache[:iprivate][index] if cached node_cache[:iprivate][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index if has_terminal?(@regexps[gr = '\A[\\uE000-\\uF8FF]'] ||= Regexp.new(gr), :regexp, index) r1 = true @index += 1 else terminal_parse_failure('[\\uE000-\\uF8FF]') r1 = nil end if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else if has_terminal?(@regexps[gr = '\A[\\uF0000-\\uFFFFD]'] ||= Regexp.new(gr), :regexp, index) r2 = true @index += 1 else terminal_parse_failure('[\\uF0000-\\uFFFFD]') r2 = nil end if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r0 = r2 else if has_terminal?(@regexps[gr = '\A[\\u100000-\\u10FFFD]'] ||= Regexp.new(gr), :regexp, index) r3 = true @index += 1 else terminal_parse_failure('[\\u100000-\\u10FFFD]') r3 = nil end if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true r0 = r3 else @index = i0 r0 = nil end end end node_cache[:iprivate][start_index] = r0 r0 end module Scheme0 def ALPHA elements[0] end end def _nt_scheme start_index = index if node_cache[:scheme].has_key?(index) cached = node_cache[:scheme][index] if cached node_cache[:scheme][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_ALPHA s0 << r1 if r1 s2, i2 = [], index loop do i3 = index r4 = _nt_ALPHA if r4 r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true r3 = r4 else r5 = _nt_DIGIT if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r3 = r5 else if (match_len = has_terminal?("+", false, index)) r6 = true @index += match_len else terminal_parse_failure('"+"') r6 = nil end if r6 r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true r3 = r6 else if (match_len = has_terminal?("-", false, index)) r7 = true @index += match_len else terminal_parse_failure('"-"') r7 = nil end if r7 r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true r3 = r7 else if (match_len = has_terminal?(".", false, index)) r8 = true @index += match_len else terminal_parse_failure('"."') r8 = nil end if r8 r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true r3 = r8 else @index = i3 r3 = nil end end end end end if r3 s2 << r3 else break end end r2 = instantiate_node(SyntaxNode,input, i2...index, s2) s0 << r2 end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(Scheme0) else @index = i0 r0 = nil end node_cache[:scheme][start_index] = r0 r0 end def _nt_port start_index = index if node_cache[:port].has_key?(index) cached = node_cache[:port][index] if cached node_cache[:port][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end s0, i0 = [], index loop do r1 = _nt_DIGIT if r1 s0 << r1 else break end end r0 = instantiate_node(SyntaxNode,input, i0...index, s0) node_cache[:port][start_index] = r0 r0 end module IPLiteral0 end def _nt_IP_literal start_index = index if node_cache[:IP_literal].has_key?(index) cached = node_cache[:IP_literal][index] if cached node_cache[:IP_literal][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] if (match_len = has_terminal?("[", false, index)) r1 = true @index += match_len else terminal_parse_failure('"["') r1 = nil end s0 << r1 if r1 i2 = index r3 = _nt_IPv6address if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true r2 = r3 else r4 = _nt_IPvFuture if r4 r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true r2 = r4 else @index = i2 r2 = nil end end s0 << r2 if r2 if (match_len = has_terminal?("]", false, index)) r5 = true @index += match_len else terminal_parse_failure('"]"') r5 = nil end s0 << r5 end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(IPLiteral0) else @index = i0 r0 = nil end node_cache[:IP_literal][start_index] = r0 r0 end module IPvFuture0 end def _nt_IPvFuture start_index = index if node_cache[:IPvFuture].has_key?(index) cached = node_cache[:IPvFuture][index] if cached node_cache[:IPvFuture][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] if (match_len = has_terminal?("v", false, index)) r1 = true @index += match_len else terminal_parse_failure('"v"') r1 = nil end s0 << r1 if r1 s2, i2 = [], index loop do r3 = _nt_HEXDIG if r3 s2 << r3 else break end end if s2.empty? @index = i2 r2 = nil else r2 = instantiate_node(SyntaxNode,input, i2...index, s2) end s0 << r2 if r2 if (match_len = has_terminal?(".", false, index)) r4 = true @index += match_len else terminal_parse_failure('"."') r4 = nil end s0 << r4 if r4 s5, i5 = [], index loop do i6 = index r7 = _nt_unreserved if r7 r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true r6 = r7 else r8 = _nt_sub_delims if r8 r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true r6 = r8 else if (match_len = has_terminal?(":", false, index)) r9 = true @index += match_len else terminal_parse_failure('":"') r9 = nil end if r9 r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true r6 = r9 else @index = i6 r6 = nil end end end if r6 s5 << r6 else break end end if s5.empty? @index = i5 r5 = nil else r5 = instantiate_node(SyntaxNode,input, i5...index, s5) end s0 << r5 end end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(IPvFuture0) else @index = i0 r0 = nil end node_cache[:IPvFuture][start_index] = r0 r0 end module IPv6address0 def h16 elements[0] end end module IPv6address1 def ls32 elements[1] end end module IPv6address2 def h16 elements[0] end end module IPv6address3 def ls32 elements[2] end end module IPv6address4 def h16 elements[0] end end module IPv6address5 def ls32 elements[3] end end module IPv6address6 def h16 elements[0] end end module IPv6address7 def ls32 elements[3] end end module IPv6address8 def h16 elements[0] end end module IPv6address9 def ls32 elements[3] end end module IPv6address10 def h16 elements[2] end def ls32 elements[4] end end module IPv6address11 def ls32 elements[2] end end module IPv6address12 def h16 elements[2] end end module IPv6address13 end def _nt_IPv6address start_index = index if node_cache[:IPv6address].has_key?(index) cached = node_cache[:IPv6address][index] if cached node_cache[:IPv6address][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index i1, s1 = index, [] s2, i2 = [], index loop do i3, s3 = index, [] r4 = _nt_h16 s3 << r4 if r4 if (match_len = has_terminal?(":", false, index)) r5 = true @index += match_len else terminal_parse_failure('":"') r5 = nil end s3 << r5 end if s3.last r3 = instantiate_node(SyntaxNode,input, i3...index, s3) r3.extend(IPv6address0) else @index = i3 r3 = nil end if r3 s2 << r3 else break end if s2.size == 6 break end end if s2.size < 6 @index = i2 r2 = nil else if s2.size < 6 @terminal_failures.pop end r2 = instantiate_node(SyntaxNode,input, i2...index, s2) end s1 << r2 if r2 r6 = _nt_ls32 s1 << r6 end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(IPv6address1) else @index = i1 r1 = nil end if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else i7, s7 = index, [] if (match_len = has_terminal?("::", false, index)) r8 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else terminal_parse_failure('"::"') r8 = nil end s7 << r8 if r8 s9, i9 = [], index loop do i10, s10 = index, [] r11 = _nt_h16 s10 << r11 if r11 if (match_len = has_terminal?(":", false, index)) r12 = true @index += match_len else terminal_parse_failure('":"') r12 = nil end s10 << r12 end if s10.last r10 = instantiate_node(SyntaxNode,input, i10...index, s10) r10.extend(IPv6address2) else @index = i10 r10 = nil end if r10 s9 << r10 else break end if s9.size == 5 break end end if s9.size < 5 @index = i9 r9 = nil else if s9.size < 5 @terminal_failures.pop end r9 = instantiate_node(SyntaxNode,input, i9...index, s9) end s7 << r9 if r9 r13 = _nt_ls32 s7 << r13 end end if s7.last r7 = instantiate_node(SyntaxNode,input, i7...index, s7) r7.extend(IPv6address3) else @index = i7 r7 = nil end if r7 r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true r0 = r7 else i14, s14 = index, [] if has_terminal?(@regexps[gr = '\A[ h16 ]'] ||= Regexp.new(gr), :regexp, index) r15 = true @index += 1 else terminal_parse_failure('[ h16 ]') r15 = nil end s14 << r15 if r15 if (match_len = has_terminal?("::", false, index)) r16 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else terminal_parse_failure('"::"') r16 = nil end s14 << r16 if r16 s17, i17 = [], index loop do i18, s18 = index, [] r19 = _nt_h16 s18 << r19 if r19 if (match_len = has_terminal?(":", false, index)) r20 = true @index += match_len else terminal_parse_failure('":"') r20 = nil end s18 << r20 end if s18.last r18 = instantiate_node(SyntaxNode,input, i18...index, s18) r18.extend(IPv6address4) else @index = i18 r18 = nil end if r18 s17 << r18 else break end if s17.size == 4 break end end if s17.size < 4 @index = i17 r17 = nil else if s17.size < 4 @terminal_failures.pop end r17 = instantiate_node(SyntaxNode,input, i17...index, s17) end s14 << r17 if r17 r21 = _nt_ls32 s14 << r21 end end end if s14.last r14 = instantiate_node(SyntaxNode,input, i14...index, s14) r14.extend(IPv6address5) else @index = i14 r14 = nil end if r14 r14 = SyntaxNode.new(input, (index-1)...index) if r14 == true r0 = r14 else i22, s22 = index, [] if has_terminal?(@regexps[gr = '\A[ ( h16 ":" ) 1..1 h16 ]'] ||= Regexp.new(gr), :regexp, index) r23 = true @index += 1 else terminal_parse_failure('[ ( h16 ":" ) 1..1 h16 ]') r23 = nil end s22 << r23 if r23 if (match_len = has_terminal?("::", false, index)) r24 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else terminal_parse_failure('"::"') r24 = nil end s22 << r24 if r24 s25, i25 = [], index loop do i26, s26 = index, [] r27 = _nt_h16 s26 << r27 if r27 if (match_len = has_terminal?(":", false, index)) r28 = true @index += match_len else terminal_parse_failure('":"') r28 = nil end s26 << r28 end if s26.last r26 = instantiate_node(SyntaxNode,input, i26...index, s26) r26.extend(IPv6address6) else @index = i26 r26 = nil end if r26 s25 << r26 else break end if s25.size == 3 break end end if s25.size < 3 @index = i25 r25 = nil else if s25.size < 3 @terminal_failures.pop end r25 = instantiate_node(SyntaxNode,input, i25...index, s25) end s22 << r25 if r25 r29 = _nt_ls32 s22 << r29 end end end if s22.last r22 = instantiate_node(SyntaxNode,input, i22...index, s22) r22.extend(IPv6address7) else @index = i22 r22 = nil end if r22 r22 = SyntaxNode.new(input, (index-1)...index) if r22 == true r0 = r22 else i30, s30 = index, [] if has_terminal?(@regexps[gr = '\A[ ( h16 ":" ) 2..2 h16 ]'] ||= Regexp.new(gr), :regexp, index) r31 = true @index += 1 else terminal_parse_failure('[ ( h16 ":" ) 2..2 h16 ]') r31 = nil end s30 << r31 if r31 if (match_len = has_terminal?("::", false, index)) r32 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else terminal_parse_failure('"::"') r32 = nil end s30 << r32 if r32 s33, i33 = [], index loop do i34, s34 = index, [] r35 = _nt_h16 s34 << r35 if r35 if (match_len = has_terminal?(":", false, index)) r36 = true @index += match_len else terminal_parse_failure('":"') r36 = nil end s34 << r36 end if s34.last r34 = instantiate_node(SyntaxNode,input, i34...index, s34) r34.extend(IPv6address8) else @index = i34 r34 = nil end if r34 s33 << r34 else break end if s33.size == 2 break end end if s33.size < 2 @index = i33 r33 = nil else if s33.size < 2 @terminal_failures.pop end r33 = instantiate_node(SyntaxNode,input, i33...index, s33) end s30 << r33 if r33 r37 = _nt_ls32 s30 << r37 end end end if s30.last r30 = instantiate_node(SyntaxNode,input, i30...index, s30) r30.extend(IPv6address9) else @index = i30 r30 = nil end if r30 r30 = SyntaxNode.new(input, (index-1)...index) if r30 == true r0 = r30 else i38, s38 = index, [] if has_terminal?(@regexps[gr = '\A[ ( h16 ":" ) 3..3 h16 ]'] ||= Regexp.new(gr), :regexp, index) r39 = true @index += 1 else terminal_parse_failure('[ ( h16 ":" ) 3..3 h16 ]') r39 = nil end s38 << r39 if r39 if (match_len = has_terminal?("::", false, index)) r40 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else terminal_parse_failure('"::"') r40 = nil end s38 << r40 if r40 r41 = _nt_h16 s38 << r41 if r41 if (match_len = has_terminal?(":", false, index)) r42 = true @index += match_len else terminal_parse_failure('":"') r42 = nil end s38 << r42 if r42 r43 = _nt_ls32 s38 << r43 end end end end if s38.last r38 = instantiate_node(SyntaxNode,input, i38...index, s38) r38.extend(IPv6address10) else @index = i38 r38 = nil end if r38 r38 = SyntaxNode.new(input, (index-1)...index) if r38 == true r0 = r38 else i44, s44 = index, [] if has_terminal?(@regexps[gr = '\A[ ( h16 ":" ) 4..4 h16 ]'] ||= Regexp.new(gr), :regexp, index) r45 = true @index += 1 else terminal_parse_failure('[ ( h16 ":" ) 4..4 h16 ]') r45 = nil end s44 << r45 if r45 if (match_len = has_terminal?("::", false, index)) r46 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else terminal_parse_failure('"::"') r46 = nil end s44 << r46 if r46 r47 = _nt_ls32 s44 << r47 end end if s44.last r44 = instantiate_node(SyntaxNode,input, i44...index, s44) r44.extend(IPv6address11) else @index = i44 r44 = nil end if r44 r44 = SyntaxNode.new(input, (index-1)...index) if r44 == true r0 = r44 else i48, s48 = index, [] if has_terminal?(@regexps[gr = '\A[ ( h16 ":" ) 5..5 h16 ]'] ||= Regexp.new(gr), :regexp, index) r49 = true @index += 1 else terminal_parse_failure('[ ( h16 ":" ) 5..5 h16 ]') r49 = nil end s48 << r49 if r49 if (match_len = has_terminal?("::", false, index)) r50 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else terminal_parse_failure('"::"') r50 = nil end s48 << r50 if r50 r51 = _nt_h16 s48 << r51 end end if s48.last r48 = instantiate_node(SyntaxNode,input, i48...index, s48) r48.extend(IPv6address12) else @index = i48 r48 = nil end if r48 r48 = SyntaxNode.new(input, (index-1)...index) if r48 == true r0 = r48 else i52, s52 = index, [] if has_terminal?(@regexps[gr = '\A[ ( h16 ":" ) 6..6 h16 ]'] ||= Regexp.new(gr), :regexp, index) r53 = true @index += 1 else terminal_parse_failure('[ ( h16 ":" ) 6..6 h16 ]') r53 = nil end s52 << r53 if r53 if (match_len = has_terminal?("::", false, index)) r54 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else terminal_parse_failure('"::"') r54 = nil end s52 << r54 end if s52.last r52 = instantiate_node(SyntaxNode,input, i52...index, s52) r52.extend(IPv6address13) else @index = i52 r52 = nil end if r52 r52 = SyntaxNode.new(input, (index-1)...index) if r52 == true r0 = r52 else @index = i0 r0 = nil end end end end end end end end end node_cache[:IPv6address][start_index] = r0 r0 end def _nt_h16 start_index = index if node_cache[:h16].has_key?(index) cached = node_cache[:h16][index] if cached node_cache[:h16][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end s0, i0 = [], index loop do r1 = _nt_HEXDIG if r1 s0 << r1 else break end if s0.size == 4 break end end if s0.size < 4 @index = i0 r0 = nil else if s0.size < 4 @terminal_failures.pop end r0 = instantiate_node(SyntaxNode,input, i0...index, s0) end node_cache[:h16][start_index] = r0 r0 end module Ls320 def h161 elements[0] end def h162 elements[2] end end def _nt_ls32 start_index = index if node_cache[:ls32].has_key?(index) cached = node_cache[:ls32][index] if cached node_cache[:ls32][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index i1, s1 = index, [] r2 = _nt_h16 s1 << r2 if r2 if (match_len = has_terminal?(":", false, index)) r3 = true @index += match_len else terminal_parse_failure('":"') r3 = nil end s1 << r3 if r3 r4 = _nt_h16 s1 << r4 end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(Ls320) else @index = i1 r1 = nil end if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else r5 = _nt_IPv4address if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r0 = r5 else @index = i0 r0 = nil end end node_cache[:ls32][start_index] = r0 r0 end module IPv4address0 def dec_octet1 elements[0] end def dec_octet2 elements[2] end def dec_octet3 elements[4] end def dec_octet4 elements[6] end end def _nt_IPv4address start_index = index if node_cache[:IPv4address].has_key?(index) cached = node_cache[:IPv4address][index] if cached node_cache[:IPv4address][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_dec_octet s0 << r1 if r1 if (match_len = has_terminal?(".", false, index)) r2 = true @index += match_len else terminal_parse_failure('"."') r2 = nil end s0 << r2 if r2 r3 = _nt_dec_octet s0 << r3 if r3 if (match_len = has_terminal?(".", false, index)) r4 = true @index += match_len else terminal_parse_failure('"."') r4 = nil end s0 << r4 if r4 r5 = _nt_dec_octet s0 << r5 if r5 if (match_len = has_terminal?(".", false, index)) r6 = true @index += match_len else terminal_parse_failure('"."') r6 = nil end s0 << r6 if r6 r7 = _nt_dec_octet s0 << r7 end end end end end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(IPv4address0) else @index = i0 r0 = nil end node_cache[:IPv4address][start_index] = r0 r0 end module DecOctet0 def DIGIT elements[1] end end module DecOctet1 end module DecOctet2 def DIGIT elements[2] end end module DecOctet3 end def _nt_dec_octet start_index = index if node_cache[:dec_octet].has_key?(index) cached = node_cache[:dec_octet][index] if cached node_cache[:dec_octet][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_DIGIT if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else i2, s2 = index, [] if has_terminal?(@regexps[gr = '\A[\'0x30\'-\'0x39\']'] ||= Regexp.new(gr), :regexp, index) r3 = true @index += 1 else terminal_parse_failure('[\'0x30\'-\'0x39\']') r3 = nil end s2 << r3 if r3 r4 = _nt_DIGIT s2 << r4 end if s2.last r2 = instantiate_node(SyntaxNode,input, i2...index, s2) r2.extend(DecOctet0) else @index = i2 r2 = nil end if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r0 = r2 else i5, s5 = index, [] if (match_len = has_terminal?("1", false, index)) r6 = true @index += match_len else terminal_parse_failure('"1"') r6 = nil end s5 << r6 if r6 s7, i7 = [], index loop do r8 = _nt_DIGIT if r8 s7 << r8 else break end if s7.size == 2 break end end if s7.size < 2 @index = i7 r7 = nil else if s7.size < 2 @terminal_failures.pop end r7 = instantiate_node(SyntaxNode,input, i7...index, s7) end s5 << r7 end if s5.last r5 = instantiate_node(SyntaxNode,input, i5...index, s5) r5.extend(DecOctet1) else @index = i5 r5 = nil end if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r0 = r5 else i9, s9 = index, [] if (match_len = has_terminal?("2", false, index)) r10 = true @index += match_len else terminal_parse_failure('"2"') r10 = nil end s9 << r10 if r10 if has_terminal?(@regexps[gr = '\A[\'0x30\'-\'0x34\']'] ||= Regexp.new(gr), :regexp, index) r11 = true @index += 1 else terminal_parse_failure('[\'0x30\'-\'0x34\']') r11 = nil end s9 << r11 if r11 r12 = _nt_DIGIT s9 << r12 end end if s9.last r9 = instantiate_node(SyntaxNode,input, i9...index, s9) r9.extend(DecOctet2) else @index = i9 r9 = nil end if r9 r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true r0 = r9 else i13, s13 = index, [] if (match_len = has_terminal?("25", false, index)) r14 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else terminal_parse_failure('"25"') r14 = nil end s13 << r14 if r14 if has_terminal?(@regexps[gr = '\A[\'0x30\'-\'0x35\']'] ||= Regexp.new(gr), :regexp, index) r15 = true @index += 1 else terminal_parse_failure('[\'0x30\'-\'0x35\']') r15 = nil end s13 << r15 end if s13.last r13 = instantiate_node(SyntaxNode,input, i13...index, s13) r13.extend(DecOctet3) else @index = i13 r13 = nil end if r13 r13 = SyntaxNode.new(input, (index-1)...index) if r13 == true r0 = r13 else @index = i0 r0 = nil end end end end end node_cache[:dec_octet][start_index] = r0 r0 end module PctEncoded0 def HEXDIG1 elements[1] end def HEXDIG2 elements[2] end end def _nt_pct_encoded start_index = index if node_cache[:pct_encoded].has_key?(index) cached = node_cache[:pct_encoded][index] if cached node_cache[:pct_encoded][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] if (match_len = has_terminal?("%", false, index)) r1 = true @index += match_len else terminal_parse_failure('"%"') r1 = nil end s0 << r1 if r1 r2 = _nt_HEXDIG s0 << r2 if r2 r3 = _nt_HEXDIG s0 << r3 end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(PctEncoded0) else @index = i0 r0 = nil end node_cache[:pct_encoded][start_index] = r0 r0 end def _nt_unreserved start_index = index if node_cache[:unreserved].has_key?(index) cached = node_cache[:unreserved][index] if cached node_cache[:unreserved][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_ALPHA if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else r2 = _nt_DIGIT if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r0 = r2 else if (match_len = has_terminal?("-", false, index)) r3 = true @index += match_len else terminal_parse_failure('"-"') r3 = nil end if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true r0 = r3 else if (match_len = has_terminal?(".", false, index)) r4 = true @index += match_len else terminal_parse_failure('"."') r4 = nil end if r4 r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true r0 = r4 else if (match_len = has_terminal?("_", false, index)) r5 = true @index += match_len else terminal_parse_failure('"_"') r5 = nil end if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r0 = r5 else if (match_len = has_terminal?("~", false, index)) r6 = true @index += match_len else terminal_parse_failure('"~"') r6 = nil end if r6 r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true r0 = r6 else @index = i0 r0 = nil end end end end end end node_cache[:unreserved][start_index] = r0 r0 end def _nt_reserved start_index = index if node_cache[:reserved].has_key?(index) cached = node_cache[:reserved][index] if cached node_cache[:reserved][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_gen_delims if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else r2 = _nt_sub_delims if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r0 = r2 else @index = i0 r0 = nil end end node_cache[:reserved][start_index] = r0 r0 end def _nt_gen_delims start_index = index if node_cache[:gen_delims].has_key?(index) cached = node_cache[:gen_delims][index] if cached node_cache[:gen_delims][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index if (match_len = has_terminal?(":", false, index)) r1 = true @index += match_len else terminal_parse_failure('":"') r1 = nil end if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else if (match_len = has_terminal?("/", false, index)) r2 = true @index += match_len else terminal_parse_failure('"/"') r2 = nil end if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r0 = r2 else if (match_len = has_terminal?("?", false, index)) r3 = true @index += match_len else terminal_parse_failure('"?"') r3 = nil end if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true r0 = r3 else if (match_len = has_terminal?("#", false, index)) r4 = true @index += match_len else terminal_parse_failure('"#"') r4 = nil end if r4 r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true r0 = r4 else if (match_len = has_terminal?("[", false, index)) r5 = true @index += match_len else terminal_parse_failure('"["') r5 = nil end if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r0 = r5 else if (match_len = has_terminal?("]", false, index)) r6 = true @index += match_len else terminal_parse_failure('"]"') r6 = nil end if r6 r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true r0 = r6 else if (match_len = has_terminal?("@", false, index)) r7 = true @index += match_len else terminal_parse_failure('"@"') r7 = nil end if r7 r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true r0 = r7 else @index = i0 r0 = nil end end end end end end end node_cache[:gen_delims][start_index] = r0 r0 end def _nt_sub_delims start_index = index if node_cache[:sub_delims].has_key?(index) cached = node_cache[:sub_delims][index] if cached node_cache[:sub_delims][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index if (match_len = has_terminal?('!', false, index)) r1 = true @index += match_len else terminal_parse_failure('\'!\'') r1 = nil end if r1 r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true r0 = r1 else if (match_len = has_terminal?('$', false, index)) r2 = true @index += match_len else terminal_parse_failure('\'$\'') r2 = nil end if r2 r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true r0 = r2 else if (match_len = has_terminal?('&', false, index)) r3 = true @index += match_len else terminal_parse_failure('\'&\'') r3 = nil end if r3 r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true r0 = r3 else if (match_len = has_terminal?("'", false, index)) r4 = true @index += match_len else terminal_parse_failure('"\'"') r4 = nil end if r4 r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true r0 = r4 else if (match_len = has_terminal?('(', false, index)) r5 = true @index += match_len else terminal_parse_failure('\'(\'') r5 = nil end if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r0 = r5 else if (match_len = has_terminal?(')', false, index)) r6 = true @index += match_len else terminal_parse_failure('\')\'') r6 = nil end if r6 r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true r0 = r6 else if (match_len = has_terminal?('*', false, index)) r7 = true @index += match_len else terminal_parse_failure('\'*\'') r7 = nil end if r7 r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true r0 = r7 else if (match_len = has_terminal?('+', false, index)) r8 = true @index += match_len else terminal_parse_failure('\'+\'') r8 = nil end if r8 r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true r0 = r8 else if (match_len = has_terminal?(',', false, index)) r9 = true @index += match_len else terminal_parse_failure('\',\'') r9 = nil end if r9 r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true r0 = r9 else if (match_len = has_terminal?(';', false, index)) r10 = true @index += match_len else terminal_parse_failure('\';\'') r10 = nil end if r10 r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true r0 = r10 else if (match_len = has_terminal?('=', false, index)) r11 = true @index += match_len else terminal_parse_failure('\'=\'') r11 = nil end if r11 r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true r0 = r11 else @index = i0 r0 = nil end end end end end end end end end end end node_cache[:sub_delims][start_index] = r0 r0 end def _nt_ALPHA start_index = index if node_cache[:ALPHA].has_key?(index) cached = node_cache[:ALPHA][index] if cached node_cache[:ALPHA][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end if has_terminal?(@regexps[gr = '\A[a-zA-Z]'] ||= Regexp.new(gr), :regexp, index) r0 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure('[a-zA-Z]') r0 = nil end node_cache[:ALPHA][start_index] = r0 r0 end def _nt_DIGIT start_index = index if node_cache[:DIGIT].has_key?(index) cached = node_cache[:DIGIT][index] if cached node_cache[:DIGIT][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index) r0 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure('[0-9]') r0 = nil end node_cache[:DIGIT][start_index] = r0 r0 end def _nt_HEXDIG start_index = index if node_cache[:HEXDIG].has_key?(index) cached = node_cache[:HEXDIG][index] if cached node_cache[:HEXDIG][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end if has_terminal?(@regexps[gr = '\A[0-9A-F]'] ||= Regexp.new(gr), :regexp, index) r0 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure('[0-9A-F]') r0 = nil end node_cache[:HEXDIG][start_index] = r0 r0 end end