# Autogenerated from a Treetop grammar. Edits may be lost.
module Treetop
module Compiler
module Metagrammar
include Treetop::Runtime
def root
@root ||= :treetop_file
end
module TreetopFile0
def require_statement
elements[1]
end
end
module TreetopFile1
def requires
elements[0]
end
def spacing
elements[1]
end
def module_or_grammar
elements[2]
end
def suffix
elements[3]
end
end
module TreetopFile2
def compile
requires.text_value + spacing.text_value + module_or_grammar.compile + suffix.text_value
end
end
def _nt_treetop_file
start_index = index
if node_cache[:treetop_file].has_key?(index)
cached = node_cache[:treetop_file][index]
if cached
node_cache[:treetop_file][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
s1, i1 = [], index
loop do
i2, s2 = index, []
r4 = _nt_space
if r4
r3 = r4
else
r3 = instantiate_node(SyntaxNode,input, index...index)
end
s2 << r3
if r3
r5 = _nt_require_statement
s2 << r5
end
if s2.last
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
r2.extend(TreetopFile0)
else
@index = i2
r2 = nil
end
if r2
s1 << r2
else
break
end
end
r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
s0 << r1
if r1
r7 = _nt_space
if r7
r6 = r7
else
r6 = instantiate_node(SyntaxNode,input, index...index)
end
s0 << r6
if r6
r8 = _nt_module_or_grammar
s0 << r8
if r8
r10 = _nt_space
if r10
r9 = r10
else
r9 = instantiate_node(SyntaxNode,input, index...index)
end
s0 << r9
end
end
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(TreetopFile1)
r0.extend(TreetopFile2)
else
@index = i0
r0 = nil
end
node_cache[:treetop_file][start_index] = r0
r0
end
module RequireStatement0
def spacing
elements[0]
end
end
def _nt_require_statement
start_index = index
if node_cache[:require_statement].has_key?(index)
cached = node_cache[:require_statement][index]
if cached
node_cache[:require_statement][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
r2 = _nt_space
if r2
r1 = r2
else
r1 = instantiate_node(SyntaxNode,input, index...index)
end
s0 << r1
if r1
if (match_len = has_terminal?("require", false, index))
r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('"require"')
r3 = nil
end
s0 << r3
if r3
s4, i4 = [], index
loop do
if has_terminal?(@regexps[gr = '\A[ \\t]'] ||= Regexp.new(gr), :regexp, index)
r5 = true
@index += 1
else
terminal_parse_failure('[ \\t]')
r5 = nil
end
if r5
s4 << r5
else
break
end
end
if s4.empty?
@index = i4
r4 = nil
else
r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
end
s0 << r4
if r4
s6, i6 = [], index
loop do
if has_terminal?(@regexps[gr = '\A[^\\n\\r]'] ||= Regexp.new(gr), :regexp, index)
r7 = true
@index += 1
else
terminal_parse_failure('[^\\n\\r]')
r7 = nil
end
if r7
s6 << r7
else
break
end
end
if s6.empty?
@index = i6
r6 = nil
else
r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
end
s0 << r6
if r6
if has_terminal?(@regexps[gr = '\A[\\n\\r]'] ||= Regexp.new(gr), :regexp, index)
r8 = true
@index += 1
else
terminal_parse_failure('[\\n\\r]')
r8 = nil
end
s0 << r8
end
end
end
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(RequireStatement0)
else
@index = i0
r0 = nil
end
node_cache[:require_statement][start_index] = r0
r0
end
def _nt_module_or_grammar
start_index = index
if node_cache[:module_or_grammar].has_key?(index)
cached = node_cache[:module_or_grammar][index]
if cached
node_cache[:module_or_grammar][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0 = index
r1 = _nt_module_declaration
if r1
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
r0 = r1
else
r2 = _nt_grammar
if r2
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
r0 = r2
else
@index = i0
r0 = nil
end
end
node_cache[:module_or_grammar][start_index] = r0
r0
end
module ModuleDeclaration0
end
module ModuleDeclaration1
end
module ModuleDeclaration2
def space1
elements[1]
end
def name
elements[2]
end
def space2
elements[3]
end
end
module ModuleDeclaration3
def space
elements[0]
end
end
module ModuleDeclaration4
def module_prefix
elements[0]
end
def module_contents
elements[1]
end
def suffix
elements[2]
end
end
module ModuleDeclaration5
def compile
module_prefix.text_value + module_contents.compile + suffix.text_value
end
def parser_name
module_prefix.name.text_value+'::'+module_contents.parser_name
end
end
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
module Grammar0
def space
elements[1]
end
end
module Grammar1
def space1
elements[1]
end
def grammar_name
elements[2]
end
def space2
elements[3]
end
def declaration_sequence
elements[5]
end
end
def _nt_grammar
start_index = index
if node_cache[:grammar].has_key?(index)
cached = node_cache[:grammar][index]
if cached
node_cache[:grammar][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?('grammar', false, index))
r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'grammar\'')
r1 = nil
end
s0 << r1
if r1
r2 = _nt_space
s0 << r2
if r2
r3 = _nt_grammar_name
s0 << r3
if r3
r4 = _nt_space
s0 << r4
if r4
i6, s6 = index, []
if (match_len = has_terminal?('do', false, index))
r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'do\'')
r7 = nil
end
s6 << r7
if r7
r8 = _nt_space
s6 << r8
end
if s6.last
r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
r6.extend(Grammar0)
else
@index = i6
r6 = nil
end
if r6
r5 = r6
else
r5 = instantiate_node(SyntaxNode,input, index...index)
end
s0 << r5
if r5
r9 = _nt_declaration_sequence
s0 << r9
if r9
r11 = _nt_space
if r11
r10 = r11
else
r10 = instantiate_node(SyntaxNode,input, index...index)
end
s0 << r10
if r10
if (match_len = has_terminal?('end', false, index))
r12 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'end\'')
r12 = nil
end
s0 << r12
end
end
end
end
end
end
end
if s0.last
r0 = instantiate_node(Grammar,input, i0...index, s0)
r0.extend(Grammar1)
else
@index = i0
r0 = nil
end
node_cache[:grammar][start_index] = r0
r0
end
module GrammarName0
end
def _nt_grammar_name
start_index = index
if node_cache[:grammar_name].has_key?(index)
cached = node_cache[:grammar_name][index]
if cached
node_cache[:grammar_name][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[A-Z]'] ||= Regexp.new(gr), :regexp, index)
r1 = true
@index += 1
else
terminal_parse_failure('[A-Z]')
r1 = nil
end
s0 << r1
if r1
s2, i2 = [], index
loop do
r3 = _nt_alphanumeric_char
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(GrammarName0)
else
@index = i0
r0 = nil
end
node_cache[:grammar_name][start_index] = r0
r0
end
module DeclarationSequence0
def space
elements[0]
end
def declaration
elements[1]
end
end
module DeclarationSequence1
def head
elements[0]
end
def tail
elements[1]
end
end
module DeclarationSequence2
def declarations
[head] + tail
end
def tail
super.elements.map { |elt| elt.declaration }
end
end
module DeclarationSequence3
def compile(builder)
end
end
def _nt_declaration_sequence
start_index = index
if node_cache[:declaration_sequence].has_key?(index)
cached = node_cache[:declaration_sequence][index]
if cached
node_cache[:declaration_sequence][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_declaration
s1 << r2
if r2
s3, i3 = [], index
loop do
i4, s4 = index, []
r5 = _nt_space
s4 << r5
if r5
r6 = _nt_declaration
s4 << r6
end
if s4.last
r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
r4.extend(DeclarationSequence0)
else
@index = i4
r4 = nil
end
if r4
s3 << r4
else
break
end
end
r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
s1 << r3
end
if s1.last
r1 = instantiate_node(DeclarationSequence,input, i1...index, s1)
r1.extend(DeclarationSequence1)
r1.extend(DeclarationSequence2)
else
@index = i1
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))
r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
r7.extend(DeclarationSequence3)
@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
node_cache[:declaration_sequence][start_index] = r0
r0
end
def _nt_declaration
start_index = index
if node_cache[:declaration].has_key?(index)
cached = node_cache[:declaration][index]
if cached
node_cache[:declaration][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0 = index
r1 = _nt_parsing_rule
if r1
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
r0 = r1
else
r2 = _nt_include_declaration
if r2
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
r0 = r2
else
@index = i0
r0 = nil
end
end
node_cache[:declaration][start_index] = r0
r0
end
module IncludeDeclaration0
def space
elements[1]
end
end
module IncludeDeclaration1
def compile(builder)
builder << text_value
end
end
def _nt_include_declaration
start_index = index
if node_cache[:include_declaration].has_key?(index)
cached = node_cache[:include_declaration][index]
if cached
node_cache[:include_declaration][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?('include', false, index))
r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'include\'')
r1 = nil
end
s0 << r1
if r1
r2 = _nt_space
s0 << r2
if r2
if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
r3 = true
@index += 1
else
terminal_parse_failure('[A-Z]')
r3 = nil
end
s0 << r3
if r3
s4, i4 = [], index
loop do
i5 = index
r6 = _nt_alphanumeric_char
if r6
r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
r5 = r6
else
if (match_len = has_terminal?('::', false, index))
r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'::\'')
r7 = nil
end
if r7
r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
r5 = r7
else
@index = i5
r5 = nil
end
end
if r5
s4 << r5
else
break
end
end
r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
s0 << r4
end
end
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(IncludeDeclaration0)
r0.extend(IncludeDeclaration1)
else
@index = i0
r0 = nil
end
node_cache[:include_declaration][start_index] = r0
r0
end
module ParsingRule0
def space
elements[1]
end
end
module ParsingRule1
def space1
elements[1]
end
def nonterminal
elements[2]
end
def space2
elements[3]
end
def parsing_expression
elements[5]
end
def space3
elements[6]
end
end
def _nt_parsing_rule
start_index = index
if node_cache[:parsing_rule].has_key?(index)
cached = node_cache[:parsing_rule][index]
if cached
node_cache[:parsing_rule][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?('rule', false, index))
r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'rule\'')
r1 = nil
end
s0 << r1
if r1
r2 = _nt_space
s0 << r2
if r2
r3 = _nt_nonterminal
s0 << r3
if r3
r4 = _nt_space
s0 << r4
if r4
i6, s6 = index, []
if (match_len = has_terminal?('do', false, index))
r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'do\'')
r7 = nil
end
s6 << r7
if r7
r8 = _nt_space
s6 << r8
end
if s6.last
r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
r6.extend(ParsingRule0)
else
@index = i6
r6 = nil
end
if r6
r5 = r6
else
r5 = instantiate_node(SyntaxNode,input, index...index)
end
s0 << r5
if r5
r9 = _nt_parsing_expression
s0 << r9
if r9
r10 = _nt_space
s0 << r10
if r10
if (match_len = has_terminal?('end', false, index))
r11 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'end\'')
r11 = nil
end
s0 << r11
end
end
end
end
end
end
end
if s0.last
r0 = instantiate_node(ParsingRule,input, i0...index, s0)
r0.extend(ParsingRule1)
else
@index = i0
r0 = nil
end
node_cache[:parsing_rule][start_index] = r0
r0
end
def _nt_parsing_expression
start_index = index
if node_cache[:parsing_expression].has_key?(index)
cached = node_cache[:parsing_expression][index]
if cached
node_cache[:parsing_expression][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0 = index
r1 = _nt_choice
if r1
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
r0 = r1
else
r2 = _nt_sequence
if r2
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
r0 = r2
else
r3 = _nt_primary
if r3
r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
r0 = r3
else
@index = i0
r0 = nil
end
end
end
node_cache[:parsing_expression][start_index] = r0
r0
end
module Choice0
def alternative
elements[3]
end
end
module Choice1
def head
elements[0]
end
def tail
elements[1]
end
end
module Choice2
def alternatives
[head] + tail
end
def tail
super.elements.map {|elt| elt.alternative}
end
def parent_modules
[]
end
def inline_modules
(alternatives.map {|alt| alt.inline_modules }).flatten
end
def inline_module
nil
end
end
def _nt_choice
start_index = index
if node_cache[:choice].has_key?(index)
cached = node_cache[:choice][index]
if cached
node_cache[:choice][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
r1 = _nt_alternative
s0 << r1
if r1
s2, i2 = [], index
loop do
i3, s3 = index, []
r5 = _nt_space
if r5
r4 = r5
else
r4 = instantiate_node(SyntaxNode,input, index...index)
end
s3 << r4
if r4
if (match_len = has_terminal?('/', false, index))
r6 = true
@index += match_len
else
terminal_parse_failure('\'/\'')
r6 = nil
end
s3 << r6
if r6
r8 = _nt_space
if r8
r7 = r8
else
r7 = instantiate_node(SyntaxNode,input, index...index)
end
s3 << r7
if r7
r9 = _nt_alternative
s3 << r9
end
end
end
if s3.last
r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
r3.extend(Choice0)
else
@index = i3
r3 = nil
end
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
end
if s0.last
r0 = instantiate_node(Choice,input, i0...index, s0)
r0.extend(Choice1)
r0.extend(Choice2)
else
@index = i0
r0 = nil
end
node_cache[:choice][start_index] = r0
r0
end
module Sequence0
def sequence_body
elements[0]
end
def node_class_declarations
elements[1]
end
end
module Sequence1
def sequence_elements
[sequence_body.head] + tail
end
def tail
sequence_body.tail
end
def parent_modules
node_class_declarations.inline_modules
end
def inline_modules
(sequence_elements.map {|elt| elt.inline_modules}).flatten +
[sequence_element_accessor_module] +
parent_modules
end
def inline_module
node_class_declarations.inline_module
end
def inline_module_name
node_class_declarations.inline_module_name
end
end
def _nt_sequence
start_index = index
if node_cache[:sequence].has_key?(index)
cached = node_cache[:sequence][index]
if cached
node_cache[:sequence][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
r1 = _nt_sequence_body
s0 << r1
if r1
r2 = _nt_node_class_declarations
s0 << r2
end
if s0.last
r0 = instantiate_node(Sequence,input, i0...index, s0)
r0.extend(Sequence0)
r0.extend(Sequence1)
else
@index = i0
r0 = nil
end
node_cache[:sequence][start_index] = r0
r0
end
def _nt_sequence_body
start_index = index
if node_cache[:sequence_body].has_key?(index)
cached = node_cache[:sequence_body][index]
if cached
node_cache[:sequence_body][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0 = index
r1 = _nt_variable_length_sequence_body
if r1
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
r0 = r1
else
r2 = _nt_labeled_expression_sequence_body
if r2
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
r0 = r2
else
@index = i0
r0 = nil
end
end
node_cache[:sequence_body][start_index] = r0
r0
end
module VariableLengthSequenceBody0
def space
elements[0]
end
def optionally_labeled_sequence_primary
elements[1]
end
end
module VariableLengthSequenceBody1
def head
elements[0]
end
def tail
elements[1]
end
end
module VariableLengthSequenceBody2
def tail
super.elements.map {|elt| elt.optionally_labeled_sequence_primary }
end
end
def _nt_variable_length_sequence_body
start_index = index
if node_cache[:variable_length_sequence_body].has_key?(index)
cached = node_cache[:variable_length_sequence_body][index]
if cached
node_cache[:variable_length_sequence_body][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
r1 = _nt_optionally_labeled_sequence_primary
s0 << r1
if r1
s2, i2 = [], index
loop do
i3, s3 = index, []
r4 = _nt_space
s3 << r4
if r4
r5 = _nt_optionally_labeled_sequence_primary
s3 << r5
end
if s3.last
r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
r3.extend(VariableLengthSequenceBody0)
else
@index = i3
r3 = nil
end
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
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(VariableLengthSequenceBody1)
r0.extend(VariableLengthSequenceBody2)
else
@index = i0
r0 = nil
end
node_cache[:variable_length_sequence_body][start_index] = r0
r0
end
module LabeledExpressionSequenceBody0
def head
self
end
def tail
[]
end
end
def _nt_labeled_expression_sequence_body
start_index = index
if node_cache[:labeled_expression_sequence_body].has_key?(index)
cached = node_cache[:labeled_expression_sequence_body][index]
if cached
node_cache[:labeled_expression_sequence_body][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
r0 = _nt_labeled_sequence_primary
r0.extend(LabeledExpressionSequenceBody0)
r0.extend(LabeledExpressionSequenceBody0)
node_cache[:labeled_expression_sequence_body][start_index] = r0
r0
end
def _nt_alternative
start_index = index
if node_cache[:alternative].has_key?(index)
cached = node_cache[:alternative][index]
if cached
node_cache[:alternative][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0 = index
r1 = _nt_sequence
if r1
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
r0 = r1
else
r2 = _nt_primary
if r2
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
r0 = r2
else
@index = i0
r0 = nil
end
end
node_cache[:alternative][start_index] = r0
r0
end
module Primary0
def prefix
elements[0]
end
def atomic
elements[1]
end
end
module Primary1
def compile(address, builder, parent_expression=nil)
prefix.compile(address, builder, self)
end
def prefixed_expression
atomic
end
def parent_modules
[]
end
def inline_modules
atomic.inline_modules
end
def inline_module
atomic.inline_module
end
def inline_module_name
nil
end
end
module Primary2
def prefix
elements[0]
end
def atomic
elements[2]
end
end
module Primary3
def compile(address, builder, parent_expression=nil)
prefix.compile(address, builder, self)
end
def prefixed_expression
atomic
end
def parent_modules
[]
end
def inline_modules
[]
end
def inline_module
nil
end
end
module Primary4
def atomic
elements[0]
end
def suffix
elements[1]
end
def node_class_declarations
elements[2]
end
end
module Primary5
def compile(address, builder, parent_expression=nil)
if node_class_declarations.inline_module && atomic.inline_module
STDERR.puts "Extraneous module ignored after suffix: #{input[interval].inspect}"
end
suffix.compile(address, builder, self)
end
def optional_expression
atomic
end
def node_class_name
node_class_declarations.node_class_name
end
def parent_modules
node_class_declarations.inline_modules
end
def inline_modules
atomic.inline_modules + parent_modules
end
def inline_module
node_class_declarations.inline_module
end
def inline_module_name
node_class_declarations.inline_module_name
end
end
module Primary6
def atomic
elements[0]
end
def node_class_declarations
elements[1]
end
end
module Primary7
def compile(address, builder, parent_expression=nil)
if node_class_declarations.inline_module && atomic.inline_module
STDERR.puts "Extraneous module ignored with nested atomic: #{input[interval].inspect}"
end
atomic.compile(address, builder, self)
end
def node_class_name
node_class_declarations.node_class_name
end
def parent_modules
node_class_declarations.inline_modules
end
def inline_modules
atomic.inline_modules + parent_modules
end
def inline_module
node_class_declarations.inline_module
end
def inline_module_name
node_class_declarations.inline_module_name
end
end
def _nt_primary
start_index = index
if node_cache[:primary].has_key?(index)
cached = node_cache[:primary][index]
if cached
node_cache[:primary][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_prefix
s1 << r2
if r2
r3 = _nt_atomic
s1 << r3
end
if s1.last
r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
r1.extend(Primary0)
r1.extend(Primary1)
else
@index = i1
r1 = nil
end
if r1
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
r0 = r1
else
i4, s4 = index, []
r5 = _nt_prefix
s4 << r5
if r5
r7 = _nt_space
if r7
r6 = r7
else
r6 = instantiate_node(SyntaxNode,input, index...index)
end
s4 << r6
if r6
r8 = _nt_predicate_block
s4 << r8
end
end
if s4.last
r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
r4.extend(Primary2)
r4.extend(Primary3)
else
@index = i4
r4 = nil
end
if r4
r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
r0 = r4
else
i9, s9 = index, []
r10 = _nt_atomic
s9 << r10
if r10
r11 = _nt_suffix
s9 << r11
if r11
r12 = _nt_node_class_declarations
s9 << r12
end
end
if s9.last
r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
r9.extend(Primary4)
r9.extend(Primary5)
else
@index = i9
r9 = nil
end
if r9
r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
r0 = r9
else
i13, s13 = index, []
r14 = _nt_atomic
s13 << r14
if r14
r15 = _nt_node_class_declarations
s13 << r15
end
if s13.last
r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
r13.extend(Primary6)
r13.extend(Primary7)
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
node_cache[:primary][start_index] = r0
r0
end
def _nt_optionally_labeled_sequence_primary
start_index = index
if node_cache[:optionally_labeled_sequence_primary].has_key?(index)
cached = node_cache[:optionally_labeled_sequence_primary][index]
if cached
node_cache[:optionally_labeled_sequence_primary][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0 = index
r1 = _nt_labeled_sequence_primary
if r1
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
r0 = r1
else
r2 = _nt_unlabeled_sequence_primary
if r2
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
r0 = r2
else
@index = i0
r0 = nil
end
end
node_cache[:optionally_labeled_sequence_primary][start_index] = r0
r0
end
module LabeledSequencePrimary0
def named_label
elements[0]
end
def sequence_primary
elements[1]
end
end
module LabeledSequencePrimary1
def compile(lexical_address, builder)
sequence_primary.compile(lexical_address, builder)
end
def parent_modules
[]
end
def inline_modules
sequence_primary.inline_modules
end
def label_name
named_label.name
end
end
def _nt_labeled_sequence_primary
start_index = index
if node_cache[:labeled_sequence_primary].has_key?(index)
cached = node_cache[:labeled_sequence_primary][index]
if cached
node_cache[:labeled_sequence_primary][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
r1 = _nt_named_label
s0 << r1
if r1
r2 = _nt_sequence_primary
s0 << r2
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(LabeledSequencePrimary0)
r0.extend(LabeledSequencePrimary1)
else
@index = i0
r0 = nil
end
node_cache[:labeled_sequence_primary][start_index] = r0
r0
end
module UnlabeledSequencePrimary0
def null_label
elements[0]
end
def sequence_primary
elements[1]
end
end
module UnlabeledSequencePrimary1
def compile(lexical_address, builder)
sequence_primary.compile(lexical_address, builder)
end
def parent_modules
[]
end
def inline_modules
sequence_primary.inline_modules
end
def label_name
if sequence_primary.instance_of?(Nonterminal)
sequence_primary.text_value
else
nil
end
end
end
def _nt_unlabeled_sequence_primary
start_index = index
if node_cache[:unlabeled_sequence_primary].has_key?(index)
cached = node_cache[:unlabeled_sequence_primary][index]
if cached
node_cache[:unlabeled_sequence_primary][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
r1 = _nt_null_label
s0 << r1
if r1
r2 = _nt_sequence_primary
s0 << r2
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(UnlabeledSequencePrimary0)
r0.extend(UnlabeledSequencePrimary1)
else
@index = i0
r0 = nil
end
node_cache[:unlabeled_sequence_primary][start_index] = r0
r0
end
def _nt_label
start_index = index
if node_cache[:label].has_key?(index)
cached = node_cache[:label][index]
if cached
node_cache[:label][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0 = index
r1 = _nt_named_label
if r1
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
r0 = r1
else
r2 = _nt_null_label
if r2
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
r0 = r2
else
@index = i0
r0 = nil
end
end
node_cache[:label][start_index] = r0
r0
end
module NamedLabel0
def alpha_char
elements[0]
end
end
module NamedLabel1
end
module NamedLabel2
def name
elements[0].text_value
end
end
def _nt_named_label
start_index = index
if node_cache[:named_label].has_key?(index)
cached = node_cache[:named_label][index]
if cached
node_cache[:named_label][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, []
r2 = _nt_alpha_char
s1 << r2
if r2
s3, i3 = [], index
loop do
r4 = _nt_alphanumeric_char
if r4
s3 << r4
else
break
end
end
r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
s1 << r3
end
if s1.last
r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
r1.extend(NamedLabel0)
else
@index = i1
r1 = nil
end
s0 << r1
if r1
if (match_len = has_terminal?(':', false, index))
r5 = true
@index += match_len
else
terminal_parse_failure('\':\'')
r5 = nil
end
s0 << r5
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(NamedLabel1)
r0.extend(NamedLabel2)
else
@index = i0
r0 = nil
end
node_cache[:named_label][start_index] = r0
r0
end
module NullLabel0
def name
nil
end
end
def _nt_null_label
start_index = index
if node_cache[:null_label].has_key?(index)
cached = node_cache[:null_label][index]
if cached
node_cache[:null_label][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))
r0.extend(NullLabel0)
@index += match_len
else
terminal_parse_failure('\'\'')
r0 = nil
end
node_cache[:null_label][start_index] = r0
r0
end
module SequencePrimary0
def prefix
elements[0]
end
def atomic
elements[1]
end
end
module SequencePrimary1
def compile(lexical_address, builder)
prefix.compile(lexical_address, builder, self)
end
def prefixed_expression
elements[1]
end
def parent_modules
[]
end
def inline_modules
atomic.inline_modules
end
def inline_module_name
nil
end
end
module SequencePrimary2
def prefix
elements[0]
end
def atomic
elements[2]
end
end
module SequencePrimary3
def compile(address, builder, parent_expression=nil)
prefix.compile(address, builder, self)
end
def prefixed_expression
atomic
end
def parent_modules
[]
end
def inline_modules
[]
end
end
module SequencePrimary4
def atomic
elements[0]
end
def suffix
elements[1]
end
end
module SequencePrimary5
def compile(lexical_address, builder)
suffix.compile(lexical_address, builder, self)
end
def node_class_name
nil
end
def parent_modules
[]
end
def inline_modules
atomic.inline_modules
end
def inline_module_name
nil
end
end
def _nt_sequence_primary
start_index = index
if node_cache[:sequence_primary].has_key?(index)
cached = node_cache[:sequence_primary][index]
if cached
node_cache[:sequence_primary][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_prefix
s1 << r2
if r2
r3 = _nt_atomic
s1 << r3
end
if s1.last
r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
r1.extend(SequencePrimary0)
r1.extend(SequencePrimary1)
else
@index = i1
r1 = nil
end
if r1
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
r0 = r1
else
i4, s4 = index, []
r5 = _nt_prefix
s4 << r5
if r5
r7 = _nt_space
if r7
r6 = r7
else
r6 = instantiate_node(SyntaxNode,input, index...index)
end
s4 << r6
if r6
r8 = _nt_predicate_block
s4 << r8
end
end
if s4.last
r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
r4.extend(SequencePrimary2)
r4.extend(SequencePrimary3)
else
@index = i4
r4 = nil
end
if r4
r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
r0 = r4
else
i9, s9 = index, []
r10 = _nt_atomic
s9 << r10
if r10
r11 = _nt_suffix
s9 << r11
end
if s9.last
r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
r9.extend(SequencePrimary4)
r9.extend(SequencePrimary5)
else
@index = i9
r9 = nil
end
if r9
r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
r0 = r9
else
r12 = _nt_atomic
if r12
r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
r0 = r12
else
@index = i0
r0 = nil
end
end
end
end
node_cache[:sequence_primary][start_index] = r0
r0
end
def _nt_suffix
start_index = index
if node_cache[:suffix].has_key?(index)
cached = node_cache[:suffix][index]
if cached
node_cache[:suffix][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0 = index
r1 = _nt_repetition_suffix
if r1
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
r0 = r1
else
r2 = _nt_optional_suffix
if r2
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
r0 = r2
else
@index = i0
r0 = nil
end
end
node_cache[:suffix][start_index] = r0
r0
end
def _nt_optional_suffix
start_index = index
if node_cache[:optional_suffix].has_key?(index)
cached = node_cache[:optional_suffix][index]
if cached
node_cache[:optional_suffix][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(Optional,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'?\'')
r0 = nil
end
node_cache[:optional_suffix][start_index] = r0
r0
end
module NodeClassDeclarations0
def node_class_expression
elements[0]
end
def trailing_inline_module
elements[1]
end
end
module NodeClassDeclarations1
def node_class_name
node_class_expression.node_class_name
end
def inline_modules
trailing_inline_module.inline_modules
end
def inline_module
trailing_inline_module.inline_module
end
def inline_module_name
inline_module.module_name if inline_module
end
end
def _nt_node_class_declarations
start_index = index
if node_cache[:node_class_declarations].has_key?(index)
cached = node_cache[:node_class_declarations][index]
if cached
node_cache[:node_class_declarations][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
r1 = _nt_node_class_expression
s0 << r1
if r1
r2 = _nt_trailing_inline_module
s0 << r2
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(NodeClassDeclarations0)
r0.extend(NodeClassDeclarations1)
else
@index = i0
r0 = nil
end
node_cache[:node_class_declarations][start_index] = r0
r0
end
def _nt_repetition_suffix
start_index = index
if node_cache[:repetition_suffix].has_key?(index)
cached = node_cache[:repetition_suffix][index]
if cached
node_cache[:repetition_suffix][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 = instantiate_node(OneOrMore,input, index...(index + match_len))
@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 = instantiate_node(ZeroOrMore,input, index...(index + match_len))
@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
r3 = _nt_occurrence_range
if r3
r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
r0 = r3
else
@index = i0
r0 = nil
end
end
end
node_cache[:repetition_suffix][start_index] = r0
r0
end
module OccurrenceRange0
def min
elements[1]
end
def max
elements[3]
end
end
def _nt_occurrence_range
start_index = index
if node_cache[:occurrence_range].has_key?(index)
cached = node_cache[:occurrence_range][index]
if cached
node_cache[:occurrence_range][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
r2 = _nt_space
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[0-9]'] ||= Regexp.new(gr), :regexp, index)
r4 = true
@index += 1
else
terminal_parse_failure('[0-9]')
r4 = nil
end
if r4
s3 << r4
else
break
end
end
r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
s0 << r3
if r3
if (match_len = has_terminal?('..', false, index))
r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'..\'')
r5 = nil
end
s0 << r5
if r5
s6, i6 = [], index
loop do
if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
r7 = true
@index += 1
else
terminal_parse_failure('[0-9]')
r7 = nil
end
if r7
s6 << r7
else
break
end
end
r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
s0 << r6
end
end
end
if s0.last
r0 = instantiate_node(OccurrenceRange,input, i0...index, s0)
r0.extend(OccurrenceRange0)
else
@index = i0
r0 = nil
end
node_cache[:occurrence_range][start_index] = r0
r0
end
def _nt_prefix
start_index = index
if node_cache[:prefix].has_key?(index)
cached = node_cache[:prefix][index]
if cached
node_cache[:prefix][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 = instantiate_node(AndPredicate,input, index...(index + match_len))
@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 = instantiate_node(NotPredicate,input, index...(index + match_len))
@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 = instantiate_node(TransientPrefix,input, index...(index + match_len))
@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
@index = i0
r0 = nil
end
end
end
node_cache[:prefix][start_index] = r0
r0
end
def _nt_atomic
start_index = index
if node_cache[:atomic].has_key?(index)
cached = node_cache[:atomic][index]
if cached
node_cache[:atomic][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0 = index
r1 = _nt_terminal
if r1
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
r0 = r1
else
r2 = _nt_nonterminal
if r2
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
r0 = r2
else
r3 = _nt_parenthesized_expression
if r3
r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
r0 = r3
else
@index = i0
r0 = nil
end
end
end
node_cache[:atomic][start_index] = r0
r0
end
module ParenthesizedExpression0
def parsing_expression
elements[2]
end
end
module ParenthesizedExpression1
def parent_modules
[]
end
def inline_modules
parsing_expression.inline_modules
end
def inline_module
parsing_expression.inline_module
end
end
def _nt_parenthesized_expression
start_index = index
if node_cache[:parenthesized_expression].has_key?(index)
cached = node_cache[:parenthesized_expression][index]
if cached
node_cache[:parenthesized_expression][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
r3 = _nt_space
if r3
r2 = r3
else
r2 = instantiate_node(SyntaxNode,input, index...index)
end
s0 << r2
if r2
r4 = _nt_parsing_expression
s0 << r4
if r4
r6 = _nt_space
if r6
r5 = r6
else
r5 = instantiate_node(SyntaxNode,input, index...index)
end
s0 << r5
if r5
if (match_len = has_terminal?(')', false, index))
r7 = true
@index += match_len
else
terminal_parse_failure('\')\'')
r7 = nil
end
s0 << r7
end
end
end
end
if s0.last
r0 = instantiate_node(ParenthesizedExpression,input, i0...index, s0)
r0.extend(ParenthesizedExpression0)
r0.extend(ParenthesizedExpression1)
else
@index = i0
r0 = nil
end
node_cache[:parenthesized_expression][start_index] = r0
r0
end
module Nonterminal0
def alpha_char
elements[0]
end
end
module Nonterminal1
end
def _nt_nonterminal
start_index = index
if node_cache[:nonterminal].has_key?(index)
cached = node_cache[:nonterminal][index]
if cached
node_cache[:nonterminal][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
i1 = index
r2 = _nt_keyword_inside_grammar
if r2
@index = i1
r1 = nil
else
@index = i1
r1 = instantiate_node(SyntaxNode,input, index...index)
end
s0 << r1
if r1
i3, s3 = index, []
r4 = _nt_alpha_char
s3 << r4
if r4
s5, i5 = [], index
loop do
r6 = _nt_alphanumeric_char
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(Nonterminal0)
else
@index = i3
r3 = nil
end
s0 << r3
end
if s0.last
r0 = instantiate_node(Nonterminal,input, i0...index, s0)
r0.extend(Nonterminal1)
else
@index = i0
r0 = nil
end
node_cache[:nonterminal][start_index] = r0
r0
end
def _nt_terminal
start_index = index
if node_cache[:terminal].has_key?(index)
cached = node_cache[:terminal][index]
if cached
node_cache[:terminal][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0 = index
r1 = _nt_quoted_string
if r1
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
r0 = r1
else
r2 = _nt_character_class
if r2
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
r0 = r2
else
r3 = _nt_anything_symbol
if r3
r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
r0 = r3
else
@index = i0
r0 = nil
end
end
end
node_cache[:terminal][start_index] = r0
r0
end
module QuotedString0
def qs
elements[0]
end
def modifiers
elements[1]
end
end
module QuotedString1
def string
qs.text_value
end
end
def _nt_quoted_string
start_index = index
if node_cache[:quoted_string].has_key?(index)
cached = node_cache[:quoted_string][index]
if cached
node_cache[:quoted_string][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
i1 = index
r2 = _nt_single_quoted_string
if r2
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
r1 = r2
else
r3 = _nt_double_quoted_string
if r3
r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
r1 = r3
else
@index = i1
r1 = nil
end
end
s0 << r1
if r1
s4, i4 = [], index
loop do
if has_terminal?(@regexps[gr = '\A[ir]'] ||= Regexp.new(gr), :regexp, index)
r5 = true
@index += 1
else
terminal_parse_failure('[ir]')
r5 = nil
end
if r5
s4 << r5
else
break
end
end
r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
s0 << r4
end
if s0.last
r0 = instantiate_node(Terminal,input, i0...index, s0)
r0.extend(QuotedString0)
r0.extend(QuotedString1)
else
@index = i0
r0 = nil
end
node_cache[:quoted_string][start_index] = r0
r0
end
module DoubleQuotedString0
end
module DoubleQuotedString1
def string
elements[1]
end
end
def _nt_double_quoted_string
start_index = index
if node_cache[:double_quoted_string].has_key?(index)
cached = node_cache[:double_quoted_string][index]
if cached
node_cache[:double_quoted_string][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
s2, i2 = [], index
loop do
i3, s3 = index, []
i4 = index
if (match_len = has_terminal?('"', false, index))
r5 = true
@index += match_len
else
terminal_parse_failure('\'"\'')
r5 = nil
end
if r5
@index = i4
r4 = nil
terminal_parse_failure('\'"\'', true)
else
@terminal_failures.pop
@index = i4
r4 = instantiate_node(SyntaxNode,input, index...index)
end
s3 << r4
if r4
i6 = index
if (match_len = has_terminal?("\\\\", false, index))
r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('"\\\\\\\\"')
r7 = nil
end
if r7
r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
r6 = r7
else
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
if r8
r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
r6 = r8
else
if index < input_length
r9 = true
@index += 1
else
terminal_parse_failure("any character")
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
s3 << r6
end
if s3.last
r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
r3.extend(DoubleQuotedString0)
else
@index = i3
r3 = nil
end
if r3
s2 << r3
else
break
end
end
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
s0 << r2
if r2
if (match_len = has_terminal?('"', false, index))
r10 = true
@index += match_len
else
terminal_parse_failure('\'"\'')
r10 = nil
end
s0 << r10
end
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(DoubleQuotedString1)
else
@index = i0
r0 = nil
end
node_cache[:double_quoted_string][start_index] = r0
r0
end
module SingleQuotedString0
end
module SingleQuotedString1
def string
elements[1]
end
end
def _nt_single_quoted_string
start_index = index
if node_cache[:single_quoted_string].has_key?(index)
cached = node_cache[:single_quoted_string][index]
if cached
node_cache[:single_quoted_string][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
s2, i2 = [], index
loop do
i3, s3 = index, []
i4 = index
if (match_len = has_terminal?("'", false, index))
r5 = true
@index += match_len
else
terminal_parse_failure('"\'"')
r5 = nil
end
if r5
@index = i4
r4 = nil
terminal_parse_failure('"\'"', true)
else
@terminal_failures.pop
@index = i4
r4 = instantiate_node(SyntaxNode,input, index...index)
end
s3 << r4
if r4
i6 = index
if (match_len = has_terminal?("\\\\", false, index))
r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('"\\\\\\\\"')
r7 = nil
end
if r7
r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
r6 = r7
else
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
if r8
r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
r6 = r8
else
if index < input_length
r9 = true
@index += 1
else
terminal_parse_failure("any character")
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
s3 << r6
end
if s3.last
r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
r3.extend(SingleQuotedString0)
else
@index = i3
r3 = nil
end
if r3
s2 << r3
else
break
end
end
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
s0 << r2
if r2
if (match_len = has_terminal?("'", false, index))
r10 = true
@index += match_len
else
terminal_parse_failure('"\'"')
r10 = nil
end
s0 << r10
end
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(SingleQuotedString1)
else
@index = i0
r0 = nil
end
node_cache[:single_quoted_string][start_index] = r0
r0
end
module CharacterClass0
end
module CharacterClass1
end
module CharacterClass2
end
module CharacterClass3
def characters
elements[1]
end
end
module CharacterClass4
def characters
super.text_value
end
end
def _nt_character_class
start_index = index
if node_cache[:character_class].has_key?(index)
cached = node_cache[:character_class][index]
if cached
node_cache[:character_class][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
s2, i2 = [], index
loop do
i3, s3 = index, []
i4 = index
if (match_len = has_terminal?(']', false, index))
r5 = true
@index += match_len
else
terminal_parse_failure('\']\'')
r5 = nil
end
if r5
@index = i4
r4 = nil
terminal_parse_failure('\']\'', true)
else
@terminal_failures.pop
@index = i4
r4 = instantiate_node(SyntaxNode,input, index...index)
end
s3 << r4
if r4
i6 = index
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
if index < input_length
r9 = true
@index += 1
else
terminal_parse_failure("any character")
r9 = nil
end
s7 << r9
end
if s7.last
r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
r7.extend(CharacterClass0)
else
@index = i7
r7 = nil
end
if r7
r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
r6 = r7
else
r10 = _nt_bracket_expression
if r10
r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
r6 = r10
else
i11, s11 = index, []
i12 = index
if (match_len = has_terminal?('\\', false, index))
r13 = true
@index += match_len
else
terminal_parse_failure('\'\\\\\'')
r13 = nil
end
if r13
@index = i12
r12 = nil
terminal_parse_failure('\'\\\\\'', true)
else
@terminal_failures.pop
@index = i12
r12 = instantiate_node(SyntaxNode,input, index...index)
end
s11 << r12
if r12
if index < input_length
r14 = true
@index += 1
else
terminal_parse_failure("any character")
r14 = nil
end
s11 << r14
end
if s11.last
r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
r11.extend(CharacterClass1)
else
@index = i11
r11 = nil
end
if r11
r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
r6 = r11
else
@index = i6
r6 = nil
end
end
end
s3 << r6
end
if s3.last
r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
r3.extend(CharacterClass2)
else
@index = i3
r3 = nil
end
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))
r15 = true
@index += match_len
else
terminal_parse_failure('\']\'')
r15 = nil
end
s0 << r15
end
end
if s0.last
r0 = instantiate_node(CharacterClass,input, i0...index, s0)
r0.extend(CharacterClass3)
r0.extend(CharacterClass4)
else
@index = i0
r0 = nil
end
node_cache[:character_class][start_index] = r0
r0
end
module BracketExpression0
end
def _nt_bracket_expression
start_index = index
if node_cache[:bracket_expression].has_key?(index)
cached = node_cache[:bracket_expression][index]
if cached
node_cache[:bracket_expression][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 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'[:\'')
r1 = nil
end
s0 << r1
if r1
if (match_len = has_terminal?('^', false, index))
r3 = true
@index += match_len
else
terminal_parse_failure('\'^\'')
r3 = nil
end
if r3
r2 = r3
else
r2 = instantiate_node(SyntaxNode,input, index...index)
end
s0 << r2
if r2
i4 = index
if (match_len = has_terminal?('alnum', false, index))
r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'alnum\'')
r5 = nil
end
if r5
r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
r4 = r5
else
if (match_len = has_terminal?('alpha', false, index))
r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'alpha\'')
r6 = nil
end
if r6
r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
r4 = r6
else
if (match_len = has_terminal?('blank', false, index))
r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'blank\'')
r7 = nil
end
if r7
r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
r4 = r7
else
if (match_len = has_terminal?('cntrl', false, index))
r8 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'cntrl\'')
r8 = nil
end
if r8
r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
r4 = r8
else
if (match_len = has_terminal?('digit', false, index))
r9 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'digit\'')
r9 = nil
end
if r9
r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
r4 = r9
else
if (match_len = has_terminal?('graph', false, index))
r10 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'graph\'')
r10 = nil
end
if r10
r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
r4 = r10
else
if (match_len = has_terminal?('lower', false, index))
r11 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'lower\'')
r11 = nil
end
if r11
r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
r4 = r11
else
if (match_len = has_terminal?('print', false, index))
r12 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'print\'')
r12 = nil
end
if r12
r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
r4 = r12
else
if (match_len = has_terminal?('punct', false, index))
r13 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'punct\'')
r13 = nil
end
if r13
r13 = SyntaxNode.new(input, (index-1)...index) if r13 == true
r4 = r13
else
if (match_len = has_terminal?('space', false, index))
r14 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'space\'')
r14 = nil
end
if r14
r14 = SyntaxNode.new(input, (index-1)...index) if r14 == true
r4 = r14
else
if (match_len = has_terminal?('upper', false, index))
r15 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'upper\'')
r15 = nil
end
if r15
r15 = SyntaxNode.new(input, (index-1)...index) if r15 == true
r4 = r15
else
if (match_len = has_terminal?('xdigit', false, index))
r16 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'xdigit\'')
r16 = nil
end
if r16
r16 = SyntaxNode.new(input, (index-1)...index) if r16 == true
r4 = r16
else
if (match_len = has_terminal?('word', false, index))
r17 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'word\'')
r17 = nil
end
if r17
r17 = SyntaxNode.new(input, (index-1)...index) if r17 == true
r4 = r17
else
@index = i4
r4 = nil
end
end
end
end
end
end
end
end
end
end
end
end
end
s0 << r4
if r4
if (match_len = has_terminal?(':]', false, index))
r18 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\':]\'')
r18 = nil
end
s0 << r18
end
end
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(BracketExpression0)
else
@index = i0
r0 = nil
end
node_cache[:bracket_expression][start_index] = r0
r0
end
def _nt_anything_symbol
start_index = index
if node_cache[:anything_symbol].has_key?(index)
cached = node_cache[:anything_symbol][index]
if cached
node_cache[:anything_symbol][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(AnythingSymbol,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'.\'')
r0 = nil
end
node_cache[:anything_symbol][start_index] = r0
r0
end
module NodeClassExpression0
end
module NodeClassExpression1
def space
elements[0]
end
end
module NodeClassExpression2
def node_class_name
elements[2].text_value
end
end
module NodeClassExpression3
def node_class_name
nil
end
end
def _nt_node_class_expression
start_index = index
if node_cache[:node_class_expression].has_key?(index)
cached = node_cache[:node_class_expression][index]
if cached
node_cache[:node_class_expression][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_space
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
s4, i4 = [], index
loop do
i5, s5 = index, []
i6 = index
if (match_len = has_terminal?('>', false, index))
r7 = true
@index += match_len
else
terminal_parse_failure('\'>\'')
r7 = nil
end
if r7
@index = i6
r6 = nil
terminal_parse_failure('\'>\'', true)
else
@terminal_failures.pop
@index = i6
r6 = instantiate_node(SyntaxNode,input, index...index)
end
s5 << r6
if r6
if index < input_length
r8 = true
@index += 1
else
terminal_parse_failure("any character")
r8 = nil
end
s5 << r8
end
if s5.last
r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
r5.extend(NodeClassExpression0)
else
@index = i5
r5 = nil
end
if r5
s4 << r5
else
break
end
end
if s4.empty?
@index = i4
r4 = nil
else
r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
end
s1 << r4
if r4
if (match_len = has_terminal?('>', false, index))
r9 = true
@index += match_len
else
terminal_parse_failure('\'>\'')
r9 = nil
end
s1 << r9
end
end
end
if s1.last
r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
r1.extend(NodeClassExpression1)
r1.extend(NodeClassExpression2)
else
@index = i1
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))
r10 = instantiate_node(SyntaxNode,input, index...(index + match_len))
r10.extend(NodeClassExpression3)
@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
@index = i0
r0 = nil
end
end
node_cache[:node_class_expression][start_index] = r0
r0
end
module TrailingInlineModule0
def space
elements[0]
end
def inline_module
elements[1]
end
end
module TrailingInlineModule1
def parent_modules
[]
end
def inline_modules
[inline_module]
end
def inline_module_name
inline_module.module_name
end
end
module TrailingInlineModule2
def parent_modules
[]
end
def inline_modules
[]
end
def inline_module
nil
end
def inline_module_name
nil
end
end
def _nt_trailing_inline_module
start_index = index
if node_cache[:trailing_inline_module].has_key?(index)
cached = node_cache[:trailing_inline_module][index]
if cached
node_cache[:trailing_inline_module][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_space
s1 << r2
if r2
r3 = _nt_inline_module
s1 << r3
end
if s1.last
r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
r1.extend(TrailingInlineModule0)
r1.extend(TrailingInlineModule1)
else
@index = i1
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))
r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
r4.extend(TrailingInlineModule2)
@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
@index = i0
r0 = nil
end
end
node_cache[:trailing_inline_module][start_index] = r0
r0
end
module PredicateBlock0
def inline_module
elements[1]
end
end
def _nt_predicate_block
start_index = index
if node_cache[:predicate_block].has_key?(index)
cached = node_cache[:predicate_block][index]
if cached
node_cache[:predicate_block][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_inline_module
s0 << r2
end
if s0.last
r0 = instantiate_node(PredicateBlock,input, i0...index, s0)
r0.extend(PredicateBlock0)
else
@index = i0
r0 = nil
end
node_cache[:predicate_block][start_index] = r0
r0
end
module InlineModule0
end
module InlineModule1
end
def _nt_inline_module
start_index = index
if node_cache[:inline_module].has_key?(index)
cached = node_cache[:inline_module][index]
if cached
node_cache[:inline_module][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
s2, i2 = [], index
loop do
i3 = index
r4 = _nt_inline_module
if r4
r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
r3 = r4
else
i5, s5 = index, []
i6 = index
if has_terminal?(@regexps[gr = '\A[{}]'] ||= Regexp.new(gr), :regexp, index)
r7 = true
@index += 1
else
terminal_parse_failure('[{}]')
r7 = nil
end
if r7
@index = i6
r6 = nil
terminal_parse_failure('[{}]', true)
else
@terminal_failures.pop
@index = i6
r6 = instantiate_node(SyntaxNode,input, index...index)
end
s5 << r6
if r6
if index < input_length
r8 = true
@index += 1
else
terminal_parse_failure("any character")
r8 = nil
end
s5 << r8
end
if s5.last
r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
r5.extend(InlineModule0)
else
@index = i5
r5 = nil
end
if r5
r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
r3 = r5
else
@index = i3
r3 = nil
end
end
if r3
s2 << r3
else
break
end
end
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
s0 << r2
if r2
if (match_len = has_terminal?('}', false, index))
r9 = true
@index += match_len
else
terminal_parse_failure('\'}\'')
r9 = nil
end
s0 << r9
end
end
if s0.last
r0 = instantiate_node(InlineModule,input, i0...index, s0)
r0.extend(InlineModule1)
else
@index = i0
r0 = nil
end
node_cache[:inline_module][start_index] = r0
r0
end
module KeywordInsideGrammar0
end
def _nt_keyword_inside_grammar
start_index = index
if node_cache[:keyword_inside_grammar].has_key?(index)
cached = node_cache[:keyword_inside_grammar][index]
if cached
node_cache[:keyword_inside_grammar][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
i1 = index
if (match_len = has_terminal?('rule', false, index))
r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'rule\'')
r2 = nil
end
if r2
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
r1 = r2
else
if (match_len = has_terminal?('end', false, index))
r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'end\'')
r3 = nil
end
if r3
r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
r1 = r3
else
@index = i1
r1 = nil
end
end
s0 << r1
if r1
i4 = index
r5 = _nt_non_space_char
if r5
@index = i4
r4 = nil
else
@index = i4
r4 = instantiate_node(SyntaxNode,input, index...index)
end
s0 << r4
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(KeywordInsideGrammar0)
else
@index = i0
r0 = nil
end
node_cache[:keyword_inside_grammar][start_index] = r0
r0
end
module NonSpaceChar0
end
def _nt_non_space_char
start_index = index
if node_cache[:non_space_char].has_key?(index)
cached = node_cache[:non_space_char][index]
if cached
node_cache[:non_space_char][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0, s0 = index, []
i1 = index
r2 = _nt_space
if r2
@index = i1
r1 = nil
else
@index = i1
r1 = instantiate_node(SyntaxNode,input, index...index)
end
s0 << r1
if r1
if index < input_length
r3 = true
@index += 1
else
terminal_parse_failure("any character")
r3 = nil
end
s0 << r3
end
if s0.last
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(NonSpaceChar0)
else
@index = i0
r0 = nil
end
node_cache[:non_space_char][start_index] = r0
r0
end
def _nt_alpha_char
start_index = index
if node_cache[:alpha_char].has_key?(index)
cached = node_cache[:alpha_char][index]
if cached
node_cache[:alpha_char][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_char][start_index] = r0
r0
end
def _nt_alphanumeric_char
start_index = index
if node_cache[:alphanumeric_char].has_key?(index)
cached = node_cache[:alphanumeric_char][index]
if cached
node_cache[:alphanumeric_char][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
@index = cached.interval.end
end
return cached
end
i0 = index
r1 = _nt_alpha_char
if r1
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
r0 = r1
else
if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
r2 = true
@index += 1
else
terminal_parse_failure('[0-9]')
r2 = nil
end
if r2
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
r0 = r2
else
@index = i0
r0 = nil
end
end
node_cache[:alphanumeric_char][start_index] = r0
r0
end
def _nt_space
start_index = index
if node_cache[:space].has_key?(index)
cached = node_cache[:space][index]
if cached
node_cache[:space][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_white
if r2
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
r1 = r2
else
r3 = _nt_comment_to_eol
if r3
r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
r1 = r3
else
@index = i1
r1 = nil
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[:space][start_index] = r0
r0
end
module CommentToEol0
end
module CommentToEol1
end
def _nt_comment_to_eol
start_index = index
if node_cache[:comment_to_eol].has_key?(index)
cached = node_cache[:comment_to_eol][index]
if cached
node_cache[:comment_to_eol][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
s2, i2 = [], index
loop do
i3, s3 = index, []
i4 = index
if (match_len = has_terminal?("\n", false, index))
r5 = true
@index += match_len
else
terminal_parse_failure('"\\n"')
r5 = nil
end
if r5
@index = i4
r4 = nil
terminal_parse_failure('"\\n"', true)
else
@terminal_failures.pop
@index = i4
r4 = instantiate_node(SyntaxNode,input, index...index)
end
s3 << r4
if r4
if index < input_length
r6 = true
@index += 1
else
terminal_parse_failure("any character")
r6 = nil
end
s3 << r6
end
if s3.last
r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
r3.extend(CommentToEol0)
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(CommentToEol1)
else
@index = i0
r0 = nil
end
node_cache[:comment_to_eol][start_index] = r0
r0
end
def _nt_white
start_index = index
if node_cache[:white].has_key?(index)
cached = node_cache[:white][index]
if cached
node_cache[:white][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[ \\t\\n\\r]'] ||= Regexp.new(gr), :regexp, index)
r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
@index += 1
else
terminal_parse_failure('[ \\t\\n\\r]')
r0 = nil
end
node_cache[:white][start_index] = r0
r0
end
end
class MetagrammarParser < Treetop::Runtime::CompiledParser
include Metagrammar
end
end
end