def _nt_module_declaration
start_index = index
if node_cache[:module_declaration].has_key?(index)
cached = node_cache[:module_declaration][index]
if cached
node_cache[:module_declaration][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
i1, s1 = index, []
i2 = index
if (match_len = has_terminal?('module', false, index))
r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'module\'')
r3 = nil
end
if r3
r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
r2 = r3
else
if (match_len = has_terminal?('class', false, index))
r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'class\'')
r4 = nil
end
if r4
r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
r2 = r4
else
@index = i2
r2 = nil
end
end
s1 << r2
if r2
r5 = _nt_space
s1 << r5
if r5
i6, s6 = index, []
if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
r7 = true
@index += 1
else
terminal_parse_failure('[A-Z]')
r7 = nil
end
s6 << r7
if r7
s8, i8 = [], index
loop do
r9 = _nt_alphanumeric_char
if r9
s8 << r9
else
break
end
end
r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
s6 << r8
if r8
s10, i10 = [], index
loop do
i11, s11 = index, []
if (match_len = has_terminal?('::', false, index))
r12 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'::\'')
r12 = nil
end
s11 << r12
if r12
if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
r13 = true
@index += 1
else
terminal_parse_failure('[A-Z]')
r13 = nil
end
s11 << r13
if r13
s14, i14 = [], index
loop do
r15 = _nt_alphanumeric_char
if r15
s14 << r15
else
break
end
end
r14 = instantiate_node(SyntaxNode,input, i14...index, s14)
s11 << r14
end
end
if s11.last
r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
r11.extend(ModuleDeclaration0)
else
@index = i11
r11 = nil
end
if r11
s10 << r11
else
break
end
end
r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
s6 << r10
end
end
if s6.last
r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
r6.extend(ModuleDeclaration1)
else
@index = i6
r6 = nil
end
s1 << r6
if r6
r16 = _nt_space
s1 << r16
end
end
end
if s1.last
r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
r1.extend(ModuleDeclaration2)
else
@index = i1
r1 = nil
end
s0 << r1
if r1
i17 = index
r18 = _nt_module_declaration
if r18
r18 = SyntaxNode.new(input, (index-1)...index) if r18 == true
r17 = r18
else
r19 = _nt_grammar
if r19
r19 = SyntaxNode.new(input, (index-1)...index) if r19 == true
r17 = r19
else
@index = i17
r17 = nil
end
end
s0 << r17
if r17
i20, s20 = index, []
r21 = _nt_space
s20 << r21
if r21
if (match_len = has_terminal?('end', false, index))
r22 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'end\'')
r22 = nil
end
s20 << r22
end
if s20.last
r20 = instantiate_node(SyntaxNode,input, i20...index, s20)
r20.extend(ModuleDeclaration3)
else
@index = i20
r20 = nil
end
s0 << r20
end
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(ModuleDeclaration4)
r0.extend(ModuleDeclaration5)
else
@index = i0
r0 = nil
end
node_cache[:module_declaration][start_index] = r0
r0
end