# Autogenerated from a Treetop grammar. Edits may be lost. module Mail module RFC2822 include Treetop::Runtime def root @root ||= :ALPHA end include RFC2822Obsolete def _nt_ALPHA start_index = index if node_cache[:ALPHA].has_key?(index) cached = node_cache[:ALPHA][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end if has_terminal?('\G[a-zA-Z]', true, index) r0 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else 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 cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end if has_terminal?('\G[0-9]', true, index) r0 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else r0 = nil end node_cache[:DIGIT][start_index] = r0 r0 end def _nt_DQUOTE start_index = index if node_cache[:DQUOTE].has_key?(index) cached = node_cache[:DQUOTE][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end if has_terminal?('"', false, index) r0 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure('"') r0 = nil end node_cache[:DQUOTE][start_index] = r0 r0 end def _nt_LF start_index = index if node_cache[:LF].has_key?(index) cached = node_cache[:LF][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end if has_terminal?("\n", false, index) r0 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("\n") r0 = nil end node_cache[:LF][start_index] = r0 r0 end def _nt_CR start_index = index if node_cache[:CR].has_key?(index) cached = node_cache[:CR][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end if has_terminal?("\r", false, index) r0 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("\r") r0 = nil end node_cache[:CR][start_index] = r0 r0 end def _nt_CRLF start_index = index if node_cache[:CRLF].has_key?(index) cached = node_cache[:CRLF][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end if has_terminal?("\r\n", false, index) r0 = instantiate_node(SyntaxNode,input, index...(index + 2)) @index += 2 else terminal_parse_failure("\r\n") r0 = nil end node_cache[:CRLF][start_index] = r0 r0 end def _nt_WSP start_index = index if node_cache[:WSP].has_key?(index) cached = node_cache[:WSP][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end if has_terminal?('\G[\\x09\\x20]', true, index) r0 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else r0 = nil end node_cache[:WSP][start_index] = r0 r0 end module FWS0 def CRLF elements[1] end end module FWS1 def CRLF elements[0] end end def _nt_FWS start_index = index if node_cache[:FWS].has_key?(index) cached = node_cache[:FWS][index] if cached 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 r3 = _nt_WSP if r3 s2 << r3 else break end end r2 = instantiate_node(SyntaxNode,input, i2...index, s2) s1 << r2 if r2 r4 = _nt_CRLF s1 << r4 if r4 s5, i5 = [], index loop do r6 = _nt_WSP 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 s1 << r5 end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(FWS0) else @index = i1 r1 = nil end if r1 r0 = r1 else i7, s7 = index, [] r8 = _nt_CRLF s7 << r8 if r8 s9, i9 = [], index loop do r10 = _nt_WSP if r10 s9 << r10 else break end end if s9.empty? @index = i9 r9 = nil else r9 = instantiate_node(SyntaxNode,input, i9...index, s9) end s7 << r9 end if s7.last r7 = instantiate_node(SyntaxNode,input, i7...index, s7) r7.extend(FWS1) else @index = i7 r7 = nil end if r7 r0 = r7 else r11 = _nt_obs_FWS if r11 r0 = r11 else @index = i0 r0 = nil end end end node_cache[:FWS][start_index] = r0 r0 end module CFWS0 def comment elements[1] end end module CFWS1 end def _nt_CFWS start_index = index if node_cache[:CFWS].has_key?(index) cached = node_cache[:CFWS][index] if cached 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, [] s3, i3 = [], index loop do r4 = _nt_FWS if r4 s3 << r4 else break end end r3 = instantiate_node(SyntaxNode,input, i3...index, s3) s2 << r3 if r3 r5 = _nt_comment s2 << r5 end if s2.last r2 = instantiate_node(SyntaxNode,input, i2...index, s2) r2.extend(CFWS0) 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_FWS if r7 r6 = r7 else r6 = instantiate_node(SyntaxNode,input, index...index) end s0 << r6 end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(CFWS1) else @index = i0 r0 = nil end node_cache[:CFWS][start_index] = r0 r0 end def _nt_NO_WS_CTL start_index = index if node_cache[:NO_WS_CTL].has_key?(index) cached = node_cache[:NO_WS_CTL][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index if has_terminal?('\G[\\x01-\\x08]', true, index) r1 = true @index += 1 else r1 = nil end if r1 r0 = r1 else if has_terminal?('\G[\\x0B-\\x0C]', true, index) r2 = true @index += 1 else r2 = nil end if r2 r0 = r2 else if has_terminal?('\G[\\x0E-\\x1F]', true, index) r3 = true @index += 1 else r3 = nil end if r3 r0 = r3 else if has_terminal?('\G[\\x7f]', true, index) r4 = true @index += 1 else r4 = nil end if r4 r0 = r4 else @index = i0 r0 = nil end end end end node_cache[:NO_WS_CTL][start_index] = r0 r0 end def _nt_specials start_index = index if node_cache[:specials].has_key?(index) cached = node_cache[:specials][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index if has_terminal?("(", false, index) r1 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("(") r1 = nil end if r1 r0 = r1 else if has_terminal?(")", false, index) r2 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(")") r2 = nil end if r2 r0 = r2 else if has_terminal?("<", false, index) r3 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("<") r3 = nil end if r3 r0 = r3 else if has_terminal?(">", false, index) r4 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(">") r4 = nil end if r4 r0 = r4 else if has_terminal?("[", false, index) r5 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("[") r5 = nil end if r5 r0 = r5 else if has_terminal?("]", false, index) r6 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("]") r6 = nil end if r6 r0 = r6 else if has_terminal?(":", false, index) r7 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(":") r7 = nil end if r7 r0 = r7 else if has_terminal?(";", false, index) r8 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(";") r8 = nil end if r8 r0 = r8 else if has_terminal?("@", false, index) r9 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("@") r9 = nil end if r9 r0 = r9 else if has_terminal?('\\', false, index) r10 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure('\\') r10 = nil end if r10 r0 = r10 else if has_terminal?(",", false, index) r11 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(",") r11 = nil end if r11 r0 = r11 else if has_terminal?(".", false, index) r12 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(".") r12 = nil end if r12 r0 = r12 else r13 = _nt_DQUOTE if r13 r0 = r13 else @index = i0 r0 = nil end end end end end end end end end end end end end node_cache[:specials][start_index] = r0 r0 end def _nt_ctext start_index = index if node_cache[:ctext].has_key?(index) cached = node_cache[:ctext][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_NO_WS_CTL if r1 r0 = r1 else if has_terminal?('\G[\\x21-\\x27]', true, index) r2 = true @index += 1 else r2 = nil end if r2 r0 = r2 else if has_terminal?('\G[\\x2a-\\x5b]', true, index) r3 = true @index += 1 else r3 = nil end if r3 r0 = r3 else if has_terminal?('\G[\\x5d-\\x7e]', true, index) r4 = true @index += 1 else r4 = nil end if r4 r0 = r4 else @index = i0 r0 = nil end end end end node_cache[:ctext][start_index] = r0 r0 end def _nt_ccontent start_index = index if node_cache[:ccontent].has_key?(index) cached = node_cache[:ccontent][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_ctext if r1 r0 = r1 else r2 = _nt_quoted_pair if r2 r0 = r2 else r3 = _nt_comment if r3 r0 = r3 else @index = i0 r0 = nil end end end node_cache[:ccontent][start_index] = r0 r0 end module Comment0 def ccontent elements[1] end end module Comment1 end def _nt_comment start_index = index if node_cache[:comment].has_key?(index) cached = node_cache[:comment][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] if has_terminal?("(", false, index) r1 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("(") r1 = nil end s0 << r1 if r1 s2, i2 = [], index loop do i3, s3 = index, [] r5 = _nt_FWS if r5 r4 = r5 else r4 = instantiate_node(SyntaxNode,input, index...index) end s3 << r4 if r4 r6 = _nt_ccontent s3 << r6 end if s3.last r3 = instantiate_node(SyntaxNode,input, i3...index, s3) r3.extend(Comment0) 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 r8 = _nt_FWS if r8 r7 = r8 else r7 = instantiate_node(SyntaxNode,input, index...index) end s0 << r7 if r7 if has_terminal?(")", false, index) r9 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(")") r9 = nil end s0 << r9 end end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(Comment1) else @index = i0 r0 = nil end node_cache[:comment][start_index] = r0 r0 end def _nt_atext start_index = index if node_cache[:atext].has_key?(index) cached = node_cache[:atext][index] if cached 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 r0 = r1 else r2 = _nt_DIGIT if r2 r0 = r2 else if has_terminal?("!", false, index) r3 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("!") r3 = nil end if r3 r0 = r3 else if has_terminal?("#", false, index) r4 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("#") r4 = nil end if r4 r0 = r4 else if has_terminal?("$", false, index) r5 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("$") r5 = nil end if r5 r0 = r5 else if has_terminal?("%", false, index) r6 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("%") r6 = nil end if r6 r0 = r6 else if has_terminal?("&", false, index) r7 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("&") r7 = nil end if r7 r0 = r7 else if has_terminal?("'", false, index) r8 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("'") r8 = nil end if r8 r0 = r8 else if has_terminal?("*", false, index) r9 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("*") r9 = nil end if r9 r0 = r9 else if has_terminal?("+", false, index) r10 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("+") r10 = nil end if r10 r0 = r10 else if has_terminal?("-", false, index) r11 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("-") r11 = nil end if r11 r0 = r11 else if has_terminal?("/", false, index) r12 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("/") r12 = nil end if r12 r0 = r12 else if has_terminal?("=", false, index) r13 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("=") r13 = nil end if r13 r0 = r13 else if has_terminal?("?", false, index) r14 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("?") r14 = nil end if r14 r0 = r14 else if has_terminal?("^", false, index) r15 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("^") r15 = nil end if r15 r0 = r15 else if has_terminal?("_", false, index) r16 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("_") r16 = nil end if r16 r0 = r16 else if has_terminal?("`", false, index) r17 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("`") r17 = nil end if r17 r0 = r17 else if has_terminal?("{", false, index) r18 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("{") r18 = nil end if r18 r0 = r18 else if has_terminal?("|", false, index) r19 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("|") r19 = nil end if r19 r0 = r19 else if has_terminal?("}", false, index) r20 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("}") r20 = nil end if r20 r0 = r20 else if has_terminal?("~", false, index) r21 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("~") r21 = nil end if r21 r0 = r21 else @index = i0 r0 = nil end end end end end end end end end end end end end end end end end end end end end node_cache[:atext][start_index] = r0 r0 end def _nt_mtext start_index = index if node_cache[:mtext].has_key?(index) cached = node_cache[:mtext][index] if cached 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_atext if r2 r1 = r2 else if has_terminal?(".", false, index) r3 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(".") r3 = nil end if r3 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[:mtext][start_index] = r0 r0 end module Atom0 end def _nt_atom start_index = index if node_cache[:atom].has_key?(index) cached = node_cache[:atom][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r2 = _nt_CFWS if r2 r1 = r2 else r1 = instantiate_node(SyntaxNode,input, index...index) end s0 << r1 if r1 s3, i3 = [], index loop do r4 = _nt_atext if r4 s3 << r4 else break end end if s3.empty? @index = i3 r3 = nil else r3 = instantiate_node(SyntaxNode,input, i3...index, s3) end s0 << r3 if r3 r6 = _nt_CFWS if r6 r5 = r6 else r5 = instantiate_node(SyntaxNode,input, index...index) end s0 << r5 end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(Atom0) else @index = i0 r0 = nil end node_cache[:atom][start_index] = r0 r0 end module DotAtom0 def dot_atom_text elements[1] end end def _nt_dot_atom start_index = index if node_cache[:dot_atom].has_key?(index) cached = node_cache[:dot_atom][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r2 = _nt_CFWS if r2 r1 = r2 else r1 = instantiate_node(SyntaxNode,input, index...index) end s0 << r1 if r1 r3 = _nt_dot_atom_text s0 << r3 if r3 r5 = _nt_CFWS if r5 r4 = r5 else r4 = instantiate_node(SyntaxNode,input, index...index) end s0 << r4 end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(DotAtom0) else @index = i0 r0 = nil end node_cache[:dot_atom][start_index] = r0 r0 end module LocalDotAtom0 def local_dot_atom_text elements[1] end end def _nt_local_dot_atom start_index = index if node_cache[:local_dot_atom].has_key?(index) cached = node_cache[:local_dot_atom][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r2 = _nt_CFWS if r2 r1 = r2 else r1 = instantiate_node(SyntaxNode,input, index...index) end s0 << r1 if r1 r3 = _nt_local_dot_atom_text s0 << r3 if r3 r5 = _nt_CFWS if r5 r4 = r5 else r4 = instantiate_node(SyntaxNode,input, index...index) end s0 << r4 end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(LocalDotAtom0) else @index = i0 r0 = nil end node_cache[:local_dot_atom][start_index] = r0 r0 end def _nt_message_id_text start_index = index if node_cache[:message_id_text].has_key?(index) cached = node_cache[:message_id_text][index] if cached 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_mtext 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[:message_id_text][start_index] = r0 r0 end module DotAtomText0 def domain_text elements[0] end end def _nt_dot_atom_text start_index = index if node_cache[:dot_atom_text].has_key?(index) cached = node_cache[:dot_atom_text][index] if cached 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_domain_text s1 << r2 if r2 if has_terminal?(".", false, index) r4 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(".") r4 = nil end if r4 r3 = r4 else r3 = instantiate_node(SyntaxNode,input, index...index) end s1 << r3 end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(DotAtomText0) else @index = i1 r1 = nil 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[:dot_atom_text][start_index] = r0 r0 end module LocalDotAtomText0 def domain_text elements[1] end end def _nt_local_dot_atom_text start_index = index if node_cache[:local_dot_atom_text].has_key?(index) cached = node_cache[:local_dot_atom_text][index] if cached 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, [] s2, i2 = [], index loop do if has_terminal?(".", false, index) r3 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(".") r3 = nil end if r3 s2 << r3 else break end end r2 = instantiate_node(SyntaxNode,input, i2...index, s2) s1 << r2 if r2 r4 = _nt_domain_text s1 << r4 end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(LocalDotAtomText0) else @index = i1 r1 = nil 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[:local_dot_atom_text][start_index] = r0 r0 end module DomainText0 def quoted_domain elements[1] end end module DomainText1 def DQUOTE1 elements[0] end def DQUOTE2 elements[3] end end def _nt_domain_text start_index = index if node_cache[:domain_text].has_key?(index) cached = node_cache[:domain_text][index] if cached 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_DQUOTE s1 << r2 if r2 s3, i3 = [], index loop do i4, s4 = index, [] r6 = _nt_FWS if r6 r5 = r6 else r5 = instantiate_node(SyntaxNode,input, index...index) end s4 << r5 if r5 r7 = _nt_quoted_domain s4 << r7 end if s4.last r4 = instantiate_node(SyntaxNode,input, i4...index, s4) r4.extend(DomainText0) else @index = i4 r4 = nil end if r4 s3 << r4 else break end end if s3.empty? @index = i3 r3 = nil else r3 = instantiate_node(SyntaxNode,input, i3...index, s3) end s1 << r3 if r3 r9 = _nt_FWS if r9 r8 = r9 else r8 = instantiate_node(SyntaxNode,input, index...index) end s1 << r8 if r8 r10 = _nt_DQUOTE s1 << r10 end end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(DomainText1) else @index = i1 r1 = nil end if r1 r0 = r1 else s11, i11 = [], index loop do r12 = _nt_atext if r12 s11 << r12 else break end end if s11.empty? @index = i11 r11 = nil else r11 = instantiate_node(SyntaxNode,input, i11...index, s11) end if r11 r0 = r11 else @index = i0 r0 = nil end end node_cache[:domain_text][start_index] = r0 r0 end module QuotedDomain0 def text elements[1] end end def _nt_quoted_domain start_index = index if node_cache[:quoted_domain].has_key?(index) cached = node_cache[:quoted_domain][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_qdcontent if r1 r0 = r1 else i2, s2 = index, [] if has_terminal?("\\", false, index) r3 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("\\") r3 = nil end s2 << r3 if r3 r4 = _nt_text s2 << r4 end if s2.last r2 = instantiate_node(SyntaxNode,input, i2...index, s2) r2.extend(QuotedDomain0) else @index = i2 r2 = nil end if r2 r0 = r2 else @index = i0 r0 = nil end end node_cache[:quoted_domain][start_index] = r0 r0 end def _nt_qdcontent start_index = index if node_cache[:qdcontent].has_key?(index) cached = node_cache[:qdcontent][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_NO_WS_CTL if r1 r0 = r1 else if has_terminal?('\G[\\x21]', true, index) r2 = true @index += 1 else r2 = nil end if r2 r0 = r2 else if has_terminal?('\G[\\x23-\\x45]', true, index) r3 = true @index += 1 else r3 = nil end if r3 r0 = r3 else if has_terminal?('\G[\\x47-\\x5b]', true, index) r4 = true @index += 1 else r4 = nil end if r4 r0 = r4 else if has_terminal?('\G[\\x5d-\\x7e]', true, index) r5 = true @index += 1 else r5 = nil end if r5 r0 = r5 else @index = i0 r0 = nil end end end end end node_cache[:qdcontent][start_index] = r0 r0 end def _nt_phrase start_index = index if node_cache[:phrase].has_key?(index) cached = node_cache[:phrase][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_obs_phrase if r1 r0 = r1 else s2, i2 = [], index loop do r3 = _nt_word 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 if r2 r0 = r2 else @index = i0 r0 = nil end end node_cache[:phrase][start_index] = r0 r0 end def _nt_word start_index = index if node_cache[:word].has_key?(index) cached = node_cache[:word][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_atom if r1 r0 = r1 else r2 = _nt_quoted_string if r2 r0 = r2 else @index = i0 r0 = nil end end node_cache[:word][start_index] = r0 r0 end module PhraseList0 def phrase_value elements[2] end end module PhraseList1 def first_phrase elements[0] end def other_phrases elements[1] end end def _nt_phrase_list start_index = index if node_cache[:phrase_list].has_key?(index) cached = node_cache[:phrase_list][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_phrase s0 << r1 if r1 s2, i2 = [], index loop do i3, s3 = index, [] if has_terminal?(",", false, index) r4 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(",") r4 = nil end s3 << r4 if r4 s5, i5 = [], index loop do r6 = _nt_FWS if r6 s5 << r6 else break end end r5 = instantiate_node(SyntaxNode,input, i5...index, s5) s3 << r5 if r5 r7 = _nt_phrase s3 << r7 end end if s3.last r3 = instantiate_node(SyntaxNode,input, i3...index, s3) r3.extend(PhraseList0) 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(PhraseList1) else @index = i0 r0 = nil end node_cache[:phrase_list][start_index] = r0 r0 end module DomainLiteral0 def dcontent elements[1] end end module DomainLiteral1 end def _nt_domain_literal start_index = index if node_cache[:domain_literal].has_key?(index) cached = node_cache[:domain_literal][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r2 = _nt_CFWS if r2 r1 = r2 else r1 = instantiate_node(SyntaxNode,input, index...index) end s0 << r1 if r1 if has_terminal?("[", false, index) r3 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("[") r3 = nil end s0 << r3 if r3 s4, i4 = [], index loop do i5, s5 = index, [] r7 = _nt_FWS if r7 r6 = r7 else r6 = instantiate_node(SyntaxNode,input, index...index) end s5 << r6 if r6 r8 = _nt_dcontent s5 << r8 end if s5.last r5 = instantiate_node(SyntaxNode,input, i5...index, s5) r5.extend(DomainLiteral0) else @index = i5 r5 = nil end if r5 s4 << r5 else break end end r4 = instantiate_node(SyntaxNode,input, i4...index, s4) s0 << r4 if r4 r10 = _nt_FWS if r10 r9 = r10 else r9 = instantiate_node(SyntaxNode,input, index...index) end s0 << r9 if r9 if has_terminal?("]", false, index) r11 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("]") r11 = nil end s0 << r11 if r11 r13 = _nt_CFWS if r13 r12 = r13 else r12 = instantiate_node(SyntaxNode,input, index...index) end s0 << r12 end end end end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(DomainLiteral1) else @index = i0 r0 = nil end node_cache[:domain_literal][start_index] = r0 r0 end def _nt_dcontent start_index = index if node_cache[:dcontent].has_key?(index) cached = node_cache[:dcontent][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_dtext if r1 r0 = r1 else r2 = _nt_quoted_pair if r2 r0 = r2 else @index = i0 r0 = nil end end node_cache[:dcontent][start_index] = r0 r0 end def _nt_dtext start_index = index if node_cache[:dtext].has_key?(index) cached = node_cache[:dtext][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_NO_WS_CTL if r1 r0 = r1 else if has_terminal?('\G[\\x21-\\x5a]', true, index) r2 = true @index += 1 else r2 = nil end if r2 r0 = r2 else if has_terminal?('\G[\\x5e-\\x7e]', true, index) r3 = true @index += 1 else r3 = nil end if r3 r0 = r3 else @index = i0 r0 = nil end end end node_cache[:dtext][start_index] = r0 r0 end module AngleAddr0 def addr_spec elements[2] end end def _nt_angle_addr start_index = index if node_cache[:angle_addr].has_key?(index) cached = node_cache[:angle_addr][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index i1, s1 = index, [] r3 = _nt_CFWS if r3 r2 = r3 else r2 = instantiate_node(SyntaxNode,input, index...index) end s1 << r2 if r2 if has_terminal?("<", false, index) r4 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("<") r4 = nil end s1 << r4 if r4 r5 = _nt_addr_spec s1 << r5 if r5 if has_terminal?(">", false, index) r6 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(">") r6 = nil end s1 << r6 if r6 r8 = _nt_CFWS if r8 r7 = r8 else r7 = instantiate_node(SyntaxNode,input, index...index) end s1 << r7 end end end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(AngleAddr0) else @index = i1 r1 = nil end if r1 r0 = r1 else r9 = _nt_obs_angle_addr if r9 r0 = r9 else @index = i0 r0 = nil end end node_cache[:angle_addr][start_index] = r0 r0 end module AddrSpec0 def local_part elements[0] end def domain elements[2] end end def _nt_addr_spec start_index = index if node_cache[:addr_spec].has_key?(index) cached = node_cache[:addr_spec][index] if cached 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_local_part s1 << r2 if r2 if has_terminal?("@", false, index) r3 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("@") r3 = nil end s1 << r3 if r3 r4 = _nt_domain s1 << r4 end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(AddrSpec0) else @index = i1 r1 = nil end if r1 r0 = r1 else r5 = _nt_local_part if r5 r0 = r5 else @index = i0 r0 = nil end end node_cache[:addr_spec][start_index] = r0 r0 end def _nt_local_part start_index = index if node_cache[:local_part].has_key?(index) cached = node_cache[:local_part][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_local_dot_atom if r1 r0 = r1 else r2 = _nt_quoted_string if r2 r0 = r2 else r3 = _nt_obs_local_part if r3 r0 = r3 else @index = i0 r0 = nil end end end node_cache[:local_part][start_index] = r0 r0 end def _nt_domain start_index = index if node_cache[:domain].has_key?(index) cached = node_cache[:domain][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_dot_atom if r1 r0 = r1 else r2 = _nt_domain_literal if r2 r0 = r2 else r3 = _nt_obs_domain if r3 r0 = r3 else @index = i0 r0 = nil end end end node_cache[:domain][start_index] = r0 r0 end module Group0 def group_name elements[0] end def group_list elements[2] end end def _nt_group start_index = index if node_cache[:group].has_key?(index) cached = node_cache[:group][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_display_name s0 << r1 if r1 if has_terminal?(":", false, index) r2 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(":") r2 = nil end s0 << r2 if r2 i4 = index r5 = _nt_mailbox_list_group if r5 r4 = r5 else r6 = _nt_CFWS if r6 r4 = r6 else @index = i4 r4 = nil end end if r4 r3 = r4 else r3 = instantiate_node(SyntaxNode,input, index...index) end s0 << r3 if r3 if has_terminal?(";", false, index) r7 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(";") r7 = nil end s0 << r7 if r7 r9 = _nt_CFWS 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(Group0) else @index = i0 r0 = nil end node_cache[:group][start_index] = r0 r0 end module MailboxListGroup0 def addresses [first_addr] + other_addr.elements.map { |o| o.addr_value } end end def _nt_mailbox_list_group start_index = index if node_cache[:mailbox_list_group].has_key?(index) cached = node_cache[:mailbox_list_group][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end r0 = _nt_mailbox_list r0.extend(MailboxListGroup0) node_cache[:mailbox_list_group][start_index] = r0 r0 end module QuotedString0 def qcontent elements[1] end end module QuotedString1 def DQUOTE1 elements[1] end def quoted_content elements[2] end def DQUOTE2 elements[4] 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 cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r2 = _nt_CFWS if r2 r1 = r2 else r1 = instantiate_node(SyntaxNode,input, index...index) end s0 << r1 if r1 r3 = _nt_DQUOTE s0 << r3 if r3 s4, i4 = [], index loop do i5, s5 = index, [] r7 = _nt_FWS if r7 r6 = r7 else r6 = instantiate_node(SyntaxNode,input, index...index) end s5 << r6 if r6 r8 = _nt_qcontent s5 << r8 end if s5.last r5 = instantiate_node(SyntaxNode,input, i5...index, s5) r5.extend(QuotedString0) 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 s0 << r4 if r4 r10 = _nt_FWS if r10 r9 = r10 else r9 = instantiate_node(SyntaxNode,input, index...index) end s0 << r9 if r9 r11 = _nt_DQUOTE s0 << r11 if r11 r13 = _nt_CFWS if r13 r12 = r13 else r12 = instantiate_node(SyntaxNode,input, index...index) end s0 << r12 end end end end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(QuotedString1) else @index = i0 r0 = nil end node_cache[:quoted_string][start_index] = r0 r0 end def _nt_qcontent start_index = index if node_cache[:qcontent].has_key?(index) cached = node_cache[:qcontent][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_qtext if r1 r0 = r1 else r2 = _nt_quoted_pair if r2 r0 = r2 else @index = i0 r0 = nil end end node_cache[:qcontent][start_index] = r0 r0 end module QuotedPair0 def text elements[1] end end def _nt_quoted_pair start_index = index if node_cache[:quoted_pair].has_key?(index) cached = node_cache[:quoted_pair][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index i1, s1 = index, [] if has_terminal?("\\", false, index) r2 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("\\") r2 = nil end s1 << r2 if r2 r3 = _nt_text s1 << r3 end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(QuotedPair0) else @index = i1 r1 = nil end if r1 r0 = r1 else r4 = _nt_obs_qp if r4 r0 = r4 else @index = i0 r0 = nil end end node_cache[:quoted_pair][start_index] = r0 r0 end def _nt_qtext start_index = index if node_cache[:qtext].has_key?(index) cached = node_cache[:qtext][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_NO_WS_CTL if r1 r0 = r1 else if has_terminal?('\G[\\x21]', true, index) r2 = true @index += 1 else r2 = nil end if r2 r0 = r2 else if has_terminal?('\G[\\x23-\\x5b]', true, index) r3 = true @index += 1 else r3 = nil end if r3 r0 = r3 else if has_terminal?('\G[\\x5d-\\x7e]', true, index) r4 = true @index += 1 else r4 = nil end if r4 r0 = r4 else @index = i0 r0 = nil end end end end node_cache[:qtext][start_index] = r0 r0 end def _nt_text start_index = index if node_cache[:text].has_key?(index) cached = node_cache[:text][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index if has_terminal?('\G[\\x01-\\x09]', true, index) r1 = true @index += 1 else r1 = nil end if r1 r0 = r1 else if has_terminal?('\G[\\x0b-\\x0c]', true, index) r2 = true @index += 1 else r2 = nil end if r2 r0 = r2 else if has_terminal?('\G[\\x0e-\\x7e]', true, index) r3 = true @index += 1 else r3 = nil end if r3 r0 = r3 else r4 = _nt_obs_text if r4 r0 = r4 else @index = i0 r0 = nil end end end end node_cache[:text][start_index] = r0 r0 end def _nt_display_name start_index = index if node_cache[:display_name].has_key?(index) cached = node_cache[:display_name][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end r0 = _nt_phrase node_cache[:display_name][start_index] = r0 r0 end module NameAddr0 def display_name elements[0] end def angle_addr elements[1] end end def _nt_name_addr start_index = index if node_cache[:name_addr].has_key?(index) cached = node_cache[:name_addr][index] if cached 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_display_name s1 << r2 if r2 r3 = _nt_angle_addr s1 << r3 end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(NameAddr0) else @index = i1 r1 = nil end if r1 r0 = r1 else r4 = _nt_angle_addr if r4 r0 = r4 else @index = i0 r0 = nil end end node_cache[:name_addr][start_index] = r0 r0 end module MailboxList0 def addr_value elements[1] end end module MailboxList1 def first_addr elements[0] end def other_addr elements[1] end end def _nt_mailbox_list start_index = index if node_cache[:mailbox_list].has_key?(index) cached = node_cache[:mailbox_list][index] if cached 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_mailbox s1 << r2 if r2 s3, i3 = [], index loop do i4, s4 = index, [] if has_terminal?(",", false, index) r5 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(",") r5 = nil end s4 << r5 if r5 r6 = _nt_mailbox s4 << r6 end if s4.last r4 = instantiate_node(SyntaxNode,input, i4...index, s4) r4.extend(MailboxList0) 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(SyntaxNode,input, i1...index, s1) r1.extend(MailboxList1) else @index = i1 r1 = nil end if r1 r0 = r1 else r7 = _nt_obs_mbox_list if r7 r0 = r7 else @index = i0 r0 = nil end end node_cache[:mailbox_list][start_index] = r0 r0 end def _nt_mailbox start_index = index if node_cache[:mailbox].has_key?(index) cached = node_cache[:mailbox][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_name_addr if r1 r0 = r1 else r2 = _nt_addr_spec if r2 r0 = r2 else @index = i0 r0 = nil end end node_cache[:mailbox][start_index] = r0 r0 end module Address0 def dig_comments(comments, elements) elements.each { |elem| if elem.respond_to?(:comment) comments << elem.comment end dig_comments(comments, elem.elements) if elem.elements } end def comments comments = [] dig_comments(comments, elements) comments end end module Address1 def dig_comments(comments, elements) elements.each { |elem| if elem.respond_to?(:comment) comments << elem.comment end dig_comments(comments, elem.elements) if elem.elements } end def comments comments = [] dig_comments(comments, elements) comments end end def _nt_address start_index = index if node_cache[:address].has_key?(index) cached = node_cache[:address][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_group r1.extend(Address0) if r1 r0 = r1 else r2 = _nt_mailbox r2.extend(Address1) if r2 r0 = r2 else @index = i0 r0 = nil end end node_cache[:address][start_index] = r0 r0 end module AddressList0 def addr_value elements[2] end end module AddressList1 def first_addr elements[0] end def other_addr elements[1] end end def _nt_address_list start_index = index if node_cache[:address_list].has_key?(index) cached = node_cache[:address_list][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_address s0 << r1 if r1 s2, i2 = [], index loop do i3, s3 = index, [] if has_terminal?(",", false, index) r4 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(",") r4 = nil end s3 << r4 if r4 s5, i5 = [], index loop do r6 = _nt_FWS if r6 s5 << r6 else break end end r5 = instantiate_node(SyntaxNode,input, i5...index, s5) s3 << r5 if r5 r7 = _nt_address s3 << r7 end end if s3.last r3 = instantiate_node(SyntaxNode,input, i3...index, s3) r3.extend(AddressList0) 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(AddressList1) else @index = i0 r0 = nil end node_cache[:address_list][start_index] = r0 r0 end module DateTime0 def day_of_week elements[0] end end module DateTime1 def date elements[1] end def FWS elements[2] end def time elements[3] end end def _nt_date_time start_index = index if node_cache[:date_time].has_key?(index) cached = node_cache[:date_time][index] if cached 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_day_of_week s2 << r3 if r3 if has_terminal?(",", false, index) r4 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(",") r4 = nil end s2 << r4 end if s2.last r2 = instantiate_node(SyntaxNode,input, i2...index, s2) r2.extend(DateTime0) 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_date s0 << r5 if r5 r6 = _nt_FWS s0 << r6 if r6 r7 = _nt_time s0 << r7 if r7 r9 = _nt_CFWS 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(DateTime1) else @index = i0 r0 = nil end node_cache[:date_time][start_index] = r0 r0 end module DayOfWeek0 def day_name elements[1] end end def _nt_day_of_week start_index = index if node_cache[:day_of_week].has_key?(index) cached = node_cache[:day_of_week][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index i1, s1 = index, [] r3 = _nt_FWS if r3 r2 = r3 else r2 = instantiate_node(SyntaxNode,input, index...index) end s1 << r2 if r2 r4 = _nt_day_name s1 << r4 end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(DayOfWeek0) else @index = i1 r1 = nil end if r1 r0 = r1 else r5 = _nt_obs_day_of_week if r5 r0 = r5 else @index = i0 r0 = nil end end node_cache[:day_of_week][start_index] = r0 r0 end def _nt_day_name start_index = index if node_cache[:day_name].has_key?(index) cached = node_cache[:day_name][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index if has_terminal?("Mon", false, index) r1 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Mon") r1 = nil end if r1 r0 = r1 else if has_terminal?("Tue", false, index) r2 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Tue") r2 = nil end if r2 r0 = r2 else if has_terminal?("Wed", false, index) r3 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Wed") r3 = nil end if r3 r0 = r3 else if has_terminal?("Thu", false, index) r4 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Thu") r4 = nil end if r4 r0 = r4 else if has_terminal?("Fri", false, index) r5 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Fri") r5 = nil end if r5 r0 = r5 else if has_terminal?("Sat", false, index) r6 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Sat") r6 = nil end if r6 r0 = r6 else if has_terminal?("Sun", false, index) r7 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Sun") r7 = nil end if r7 r0 = r7 else @index = i0 r0 = nil end end end end end end end node_cache[:day_name][start_index] = r0 r0 end module Date0 def day elements[0] end def month elements[1] end def year elements[2] end end def _nt_date start_index = index if node_cache[:date].has_key?(index) cached = node_cache[:date][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_day s0 << r1 if r1 r2 = _nt_month s0 << r2 if r2 r3 = _nt_year s0 << r3 end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(Date0) else @index = i0 r0 = nil end node_cache[:date][start_index] = r0 r0 end module Year0 def DIGIT1 elements[0] end def DIGIT2 elements[1] end def DIGIT3 elements[2] end def DIGIT4 elements[3] end end def _nt_year start_index = index if node_cache[:year].has_key?(index) cached = node_cache[:year][index] if cached 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_DIGIT s1 << r2 if r2 r3 = _nt_DIGIT s1 << r3 if r3 r4 = _nt_DIGIT s1 << r4 if r4 r5 = _nt_DIGIT s1 << r5 end end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(Year0) else @index = i1 r1 = nil end if r1 r0 = r1 else r6 = _nt_obs_year if r6 r0 = r6 else @index = i0 r0 = nil end end node_cache[:year][start_index] = r0 r0 end module Month0 def FWS1 elements[0] end def month_name elements[1] end def FWS2 elements[2] end end def _nt_month start_index = index if node_cache[:month].has_key?(index) cached = node_cache[:month][index] if cached 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_FWS s1 << r2 if r2 r3 = _nt_month_name s1 << r3 if r3 r4 = _nt_FWS s1 << r4 end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(Month0) else @index = i1 r1 = nil end if r1 r0 = r1 else r5 = _nt_obs_month if r5 r0 = r5 else @index = i0 r0 = nil end end node_cache[:month][start_index] = r0 r0 end def _nt_month_name start_index = index if node_cache[:month_name].has_key?(index) cached = node_cache[:month_name][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index if has_terminal?("Jan", false, index) r1 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Jan") r1 = nil end if r1 r0 = r1 else if has_terminal?("Feb", false, index) r2 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Feb") r2 = nil end if r2 r0 = r2 else if has_terminal?("Mar", false, index) r3 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Mar") r3 = nil end if r3 r0 = r3 else if has_terminal?("Apr", false, index) r4 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Apr") r4 = nil end if r4 r0 = r4 else if has_terminal?("May", false, index) r5 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("May") r5 = nil end if r5 r0 = r5 else if has_terminal?("Jun", false, index) r6 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Jun") r6 = nil end if r6 r0 = r6 else if has_terminal?("Jul", false, index) r7 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Jul") r7 = nil end if r7 r0 = r7 else if has_terminal?("Aug", false, index) r8 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Aug") r8 = nil end if r8 r0 = r8 else if has_terminal?("Sep", false, index) r9 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Sep") r9 = nil end if r9 r0 = r9 else if has_terminal?("Oct", false, index) r10 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Oct") r10 = nil end if r10 r0 = r10 else if has_terminal?("Nov", false, index) r11 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Nov") r11 = nil end if r11 r0 = r11 else if has_terminal?("Dec", false, index) r12 = instantiate_node(SyntaxNode,input, index...(index + 3)) @index += 3 else terminal_parse_failure("Dec") r12 = nil end if r12 r0 = r12 else @index = i0 r0 = nil end end end end end end end end end end end end node_cache[:month_name][start_index] = r0 r0 end module Day0 def DIGIT elements[1] end end def _nt_day start_index = index if node_cache[:day].has_key?(index) cached = node_cache[:day][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index i1, s1 = index, [] r3 = _nt_FWS if r3 r2 = r3 else r2 = instantiate_node(SyntaxNode,input, index...index) end s1 << r2 if r2 r4 = _nt_DIGIT s1 << r4 if r4 r6 = _nt_DIGIT if r6 r5 = r6 else r5 = instantiate_node(SyntaxNode,input, index...index) end s1 << r5 end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(Day0) else @index = i1 r1 = nil end if r1 r0 = r1 else r7 = _nt_obs_day if r7 r0 = r7 else @index = i0 r0 = nil end end node_cache[:day][start_index] = r0 r0 end module Time0 def time_of_day elements[0] end def FWS elements[1] end def zone elements[2] end end def _nt_time start_index = index if node_cache[:time].has_key?(index) cached = node_cache[:time][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_time_of_day s0 << r1 if r1 r2 = _nt_FWS s0 << r2 if r2 r3 = _nt_zone s0 << r3 end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(Time0) else @index = i0 r0 = nil end node_cache[:time][start_index] = r0 r0 end module TimeOfDay0 def second elements[1] end end module TimeOfDay1 def hour elements[0] end def minute elements[2] end end def _nt_time_of_day start_index = index if node_cache[:time_of_day].has_key?(index) cached = node_cache[:time_of_day][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_hour s0 << r1 if r1 if has_terminal?(":", false, index) r2 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(":") r2 = nil end s0 << r2 if r2 r3 = _nt_minute s0 << r3 if r3 i5, s5 = index, [] if has_terminal?(":", false, index) r6 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(":") r6 = nil end s5 << r6 if r6 r7 = _nt_second s5 << r7 end if s5.last r5 = instantiate_node(SyntaxNode,input, i5...index, s5) r5.extend(TimeOfDay0) 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(TimeOfDay1) else @index = i0 r0 = nil end node_cache[:time_of_day][start_index] = r0 r0 end module Hour0 def DIGIT1 elements[0] end def DIGIT2 elements[1] end end def _nt_hour start_index = index if node_cache[:hour].has_key?(index) cached = node_cache[:hour][index] if cached 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_DIGIT s1 << r2 if r2 r3 = _nt_DIGIT s1 << r3 end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(Hour0) else @index = i1 r1 = nil end if r1 r0 = r1 else r4 = _nt_obs_hour if r4 r0 = r4 else @index = i0 r0 = nil end end node_cache[:hour][start_index] = r0 r0 end module Minute0 def DIGIT1 elements[0] end def DIGIT2 elements[1] end end def _nt_minute start_index = index if node_cache[:minute].has_key?(index) cached = node_cache[:minute][index] if cached 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_DIGIT s1 << r2 if r2 r3 = _nt_DIGIT s1 << r3 end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(Minute0) else @index = i1 r1 = nil end if r1 r0 = r1 else r4 = _nt_obs_minute if r4 r0 = r4 else @index = i0 r0 = nil end end node_cache[:minute][start_index] = r0 r0 end module Second0 def DIGIT1 elements[0] end def DIGIT2 elements[1] end end def _nt_second start_index = index if node_cache[:second].has_key?(index) cached = node_cache[:second][index] if cached 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_DIGIT s1 << r2 if r2 r3 = _nt_DIGIT s1 << r3 end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(Second0) else @index = i1 r1 = nil end if r1 r0 = r1 else r4 = _nt_obs_second if r4 r0 = r4 else @index = i0 r0 = nil end end node_cache[:second][start_index] = r0 r0 end module Zone0 def DIGIT1 elements[1] end def DIGIT2 elements[2] end def DIGIT3 elements[3] end def DIGIT4 elements[4] end end def _nt_zone start_index = index if node_cache[:zone].has_key?(index) cached = node_cache[:zone][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index i1, s1 = index, [] i2 = index if has_terminal?("+", false, index) r3 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("+") r3 = nil end if r3 r2 = r3 else if has_terminal?("-", false, index) r4 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("-") r4 = nil end if r4 r2 = r4 else @index = i2 r2 = nil end end s1 << r2 if r2 r5 = _nt_DIGIT s1 << r5 if r5 r6 = _nt_DIGIT s1 << r6 if r6 r7 = _nt_DIGIT s1 << r7 if r7 r8 = _nt_DIGIT s1 << r8 end end end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(Zone0) else @index = i1 r1 = nil end if r1 r0 = r1 else r9 = _nt_obs_zone if r9 r0 = r9 else @index = i0 r0 = nil end end node_cache[:zone][start_index] = r0 r0 end module Return0 def path elements[0] end def CRLF elements[1] end end def _nt_return start_index = index if node_cache[:return].has_key?(index) cached = node_cache[:return][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_path s0 << r1 if r1 r2 = _nt_CRLF s0 << r2 end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(Return0) else @index = i0 r0 = nil end node_cache[:return][start_index] = r0 r0 end module Path0 end def _nt_path start_index = index if node_cache[:path].has_key?(index) cached = node_cache[:path][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index i1, s1 = index, [] r3 = _nt_CFWS if r3 r2 = r3 else r2 = instantiate_node(SyntaxNode,input, index...index) end s1 << r2 if r2 if has_terminal?("<", false, index) r4 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("<") r4 = nil end s1 << r4 if r4 i5 = index r7 = _nt_CFWS if r7 r6 = r7 else r6 = instantiate_node(SyntaxNode,input, index...index) end if r6 r5 = r6 else r8 = _nt_addr_spec if r8 r5 = r8 else @index = i5 r5 = nil end end s1 << r5 if r5 if has_terminal?(">", false, index) r9 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(">") r9 = nil end s1 << r9 if r9 r11 = _nt_CFWS if r11 r10 = r11 else r10 = instantiate_node(SyntaxNode,input, index...index) end s1 << r10 end end end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(Path0) else @index = i1 r1 = nil end if r1 r0 = r1 else r12 = _nt_obs_path if r12 r0 = r12 else @index = i0 r0 = nil end end node_cache[:path][start_index] = r0 r0 end module Received0 def name_val_list elements[0] end def date_time elements[2] end def CRLF elements[3] end end def _nt_received start_index = index if node_cache[:received].has_key?(index) cached = node_cache[:received][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_name_val_list s0 << r1 if r1 if has_terminal?(";", false, index) r2 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(";") r2 = nil end s0 << r2 if r2 r3 = _nt_date_time s0 << r3 if r3 r4 = _nt_CRLF s0 << r4 end end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(Received0) else @index = i0 r0 = nil end node_cache[:received][start_index] = r0 r0 end module NameValList0 def CFWS elements[0] end def name_val_pair elements[1] end end module NameValList1 def name_val_pair elements[0] end end module NameValList2 end def _nt_name_val_list start_index = index if node_cache[:name_val_list].has_key?(index) cached = node_cache[:name_val_list][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r2 = _nt_CFWS if r2 r1 = r2 else r1 = instantiate_node(SyntaxNode,input, index...index) end s0 << r1 if r1 i3, s3 = index, [] r4 = _nt_name_val_pair s3 << r4 if r4 s5, i5 = [], index loop do i6, s6 = index, [] r7 = _nt_CFWS s6 << r7 if r7 r8 = _nt_name_val_pair s6 << r8 end if s6.last r6 = instantiate_node(SyntaxNode,input, i6...index, s6) r6.extend(NameValList0) 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(NameValList1) else @index = i3 r3 = nil end s0 << r3 end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(NameValList2) else @index = i0 r0 = nil end node_cache[:name_val_list][start_index] = r0 r0 end module NameValPair0 def item_name elements[0] end def CFWS elements[1] end def item_value elements[2] end end def _nt_name_val_pair start_index = index if node_cache[:name_val_pair].has_key?(index) cached = node_cache[:name_val_pair][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_item_name s0 << r1 if r1 r2 = _nt_CFWS s0 << r2 if r2 r3 = _nt_item_value s0 << r3 end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(NameValPair0) else @index = i0 r0 = nil end node_cache[:name_val_pair][start_index] = r0 r0 end module ItemName0 end module ItemName1 def ALPHA elements[0] end end def _nt_item_name start_index = index if node_cache[:item_name].has_key?(index) cached = node_cache[:item_name][index] if cached 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, s3 = index, [] if has_terminal?("-", false, index) r5 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("-") r5 = nil end if r5 r4 = r5 else r4 = instantiate_node(SyntaxNode,input, index...index) end s3 << r4 if r4 i6 = index r7 = _nt_ALPHA if r7 r6 = r7 else r8 = _nt_DIGIT if r8 r6 = r8 else @index = i6 r6 = nil end end s3 << r6 end if s3.last r3 = instantiate_node(SyntaxNode,input, i3...index, s3) r3.extend(ItemName0) 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(ItemName1) else @index = i0 r0 = nil end node_cache[:item_name][start_index] = r0 r0 end def _nt_item_value start_index = index if node_cache[:item_value].has_key?(index) cached = node_cache[:item_value][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index s1, i1 = [], index loop do r2 = _nt_angle_addr if r2 s1 << r2 else break end end if s1.empty? @index = i1 r1 = nil else r1 = instantiate_node(SyntaxNode,input, i1...index, s1) end if r1 r0 = r1 else r3 = _nt_addr_spec if r3 r0 = r3 else r4 = _nt_atom if r4 r0 = r4 else r5 = _nt_domain if r5 r0 = r5 else r6 = _nt_msg_id if r6 r0 = r6 else @index = i0 r0 = nil end end end end end node_cache[:item_value][start_index] = r0 r0 end module MessageIds0 def CFWS elements[0] end def msg_id_value elements[1] end end module MessageIds1 def first_msg_id elements[0] end def other_msg_ids elements[1] end end def _nt_message_ids start_index = index if node_cache[:message_ids].has_key?(index) cached = node_cache[:message_ids][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_msg_id s0 << r1 if r1 s2, i2 = [], index loop do i3, s3 = index, [] r4 = _nt_CFWS s3 << r4 if r4 r5 = _nt_msg_id s3 << r5 end if s3.last r3 = instantiate_node(SyntaxNode,input, i3...index, s3) r3.extend(MessageIds0) 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(MessageIds1) else @index = i0 r0 = nil end node_cache[:message_ids][start_index] = r0 r0 end module MsgId0 def msg_id_value elements[2] end end def _nt_msg_id start_index = index if node_cache[:msg_id].has_key?(index) cached = node_cache[:msg_id][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r2 = _nt_CFWS if r2 r1 = r2 else r1 = instantiate_node(SyntaxNode,input, index...index) end s0 << r1 if r1 if has_terminal?("<", false, index) r3 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("<") r3 = nil end s0 << r3 if r3 r4 = _nt_msg_id_value s0 << r4 if r4 if has_terminal?(">", false, index) r5 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(">") r5 = nil end s0 << r5 if r5 r7 = _nt_CFWS if r7 r6 = r7 else r6 = instantiate_node(SyntaxNode,input, index...index) end s0 << r6 end end end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(MsgId0) else @index = i0 r0 = nil end node_cache[:msg_id][start_index] = r0 r0 end module MsgIdValue0 def id_left elements[0] end def id_right elements[2] end end def _nt_msg_id_value start_index = index if node_cache[:msg_id_value].has_key?(index) cached = node_cache[:msg_id_value][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_id_left s0 << r1 if r1 if has_terminal?("@", false, index) r2 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("@") r2 = nil end s0 << r2 if r2 r3 = _nt_id_right s0 << r3 end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(MsgIdValue0) else @index = i0 r0 = nil end node_cache[:msg_id_value][start_index] = r0 r0 end def _nt_id_left start_index = index if node_cache[:id_left].has_key?(index) cached = node_cache[:id_left][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_message_id_text if r1 r0 = r1 else r2 = _nt_no_fold_quote if r2 r0 = r2 else r3 = _nt_obs_id_left if r3 r0 = r3 else @index = i0 r0 = nil end end end node_cache[:id_left][start_index] = r0 r0 end def _nt_id_right start_index = index if node_cache[:id_right].has_key?(index) cached = node_cache[:id_right][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0 = index r1 = _nt_msg_id_dot_atom_text if r1 r0 = r1 else r2 = _nt_no_fold_literal if r2 r0 = r2 else r3 = _nt_obs_id_right if r3 r0 = r3 else @index = i0 r0 = nil end end end node_cache[:id_right][start_index] = r0 r0 end module MsgIdDotAtomText0 def msg_id_domain_text elements[0] end end def _nt_msg_id_dot_atom_text start_index = index if node_cache[:msg_id_dot_atom_text].has_key?(index) cached = node_cache[:msg_id_dot_atom_text][index] if cached 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_msg_id_domain_text s1 << r2 if r2 if has_terminal?(".", false, index) r4 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure(".") r4 = nil end if r4 r3 = r4 else r3 = instantiate_node(SyntaxNode,input, index...index) end s1 << r3 end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(MsgIdDotAtomText0) else @index = i1 r1 = nil 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[:msg_id_dot_atom_text][start_index] = r0 r0 end module MsgIdDomainText0 def quoted_domain elements[1] end end module MsgIdDomainText1 def DQUOTE1 elements[0] end def DQUOTE2 elements[3] end end def _nt_msg_id_domain_text start_index = index if node_cache[:msg_id_domain_text].has_key?(index) cached = node_cache[:msg_id_domain_text][index] if cached 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_DQUOTE s1 << r2 if r2 s3, i3 = [], index loop do i4, s4 = index, [] r6 = _nt_FWS if r6 r5 = r6 else r5 = instantiate_node(SyntaxNode,input, index...index) end s4 << r5 if r5 r7 = _nt_quoted_domain s4 << r7 end if s4.last r4 = instantiate_node(SyntaxNode,input, i4...index, s4) r4.extend(MsgIdDomainText0) else @index = i4 r4 = nil end if r4 s3 << r4 else break end end if s3.empty? @index = i3 r3 = nil else r3 = instantiate_node(SyntaxNode,input, i3...index, s3) end s1 << r3 if r3 r9 = _nt_FWS if r9 r8 = r9 else r8 = instantiate_node(SyntaxNode,input, index...index) end s1 << r8 if r8 r10 = _nt_DQUOTE s1 << r10 end end end if s1.last r1 = instantiate_node(SyntaxNode,input, i1...index, s1) r1.extend(MsgIdDomainText1) else @index = i1 r1 = nil end if r1 r0 = r1 else s11, i11 = [], index loop do r12 = _nt_msg_id_atext if r12 s11 << r12 else break end end if s11.empty? @index = i11 r11 = nil else r11 = instantiate_node(SyntaxNode,input, i11...index, s11) end if r11 r0 = r11 else @index = i0 r0 = nil end end node_cache[:msg_id_domain_text][start_index] = r0 r0 end def _nt_msg_id_atext start_index = index if node_cache[:msg_id_atext].has_key?(index) cached = node_cache[:msg_id_atext][index] if cached 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 r0 = r1 else r2 = _nt_DIGIT if r2 r0 = r2 else if has_terminal?("!", false, index) r3 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("!") r3 = nil end if r3 r0 = r3 else if has_terminal?("#", false, index) r4 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("#") r4 = nil end if r4 r0 = r4 else if has_terminal?("$", false, index) r5 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("$") r5 = nil end if r5 r0 = r5 else if has_terminal?("%", false, index) r6 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("%") r6 = nil end if r6 r0 = r6 else if has_terminal?("&", false, index) r7 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("&") r7 = nil end if r7 r0 = r7 else if has_terminal?("'", false, index) r8 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("'") r8 = nil end if r8 r0 = r8 else if has_terminal?("*", false, index) r9 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("*") r9 = nil end if r9 r0 = r9 else if has_terminal?("+", false, index) r10 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("+") r10 = nil end if r10 r0 = r10 else if has_terminal?("-", false, index) r11 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("-") r11 = nil end if r11 r0 = r11 else if has_terminal?("/", false, index) r12 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("/") r12 = nil end if r12 r0 = r12 else if has_terminal?("=", false, index) r13 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("=") r13 = nil end if r13 r0 = r13 else if has_terminal?("?", false, index) r14 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("?") r14 = nil end if r14 r0 = r14 else if has_terminal?("^", false, index) r15 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("^") r15 = nil end if r15 r0 = r15 else if has_terminal?("_", false, index) r16 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("_") r16 = nil end if r16 r0 = r16 else if has_terminal?("`", false, index) r17 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("`") r17 = nil end if r17 r0 = r17 else if has_terminal?("{", false, index) r18 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("{") r18 = nil end if r18 r0 = r18 else if has_terminal?("|", false, index) r19 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("|") r19 = nil end if r19 r0 = r19 else if has_terminal?("}", false, index) r20 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("}") r20 = nil end if r20 r0 = r20 else if has_terminal?("~", false, index) r21 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("~") r21 = nil end if r21 r0 = r21 else if has_terminal?("@", false, index) r22 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("@") r22 = nil end if r22 r0 = r22 else @index = i0 r0 = nil end end end end end end end end end end end end end end end end end end end end end end node_cache[:msg_id_atext][start_index] = r0 r0 end module NoFoldQuote0 def DQUOTE1 elements[0] end def DQUOTE2 elements[2] end end def _nt_no_fold_quote start_index = index if node_cache[:no_fold_quote].has_key?(index) cached = node_cache[:no_fold_quote][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] r1 = _nt_DQUOTE s0 << r1 if r1 s2, i2 = [], index loop do i3 = index r4 = _nt_qtext if r4 r3 = r4 else r5 = _nt_quoted_pair if r5 r3 = r5 else @index = i3 r3 = nil end 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 r6 = _nt_DQUOTE s0 << r6 end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(NoFoldQuote0) else @index = i0 r0 = nil end node_cache[:no_fold_quote][start_index] = r0 r0 end module NoFoldLiteral0 end def _nt_no_fold_literal start_index = index if node_cache[:no_fold_literal].has_key?(index) cached = node_cache[:no_fold_literal][index] if cached cached = SyntaxNode.new(input, index...(index + 1)) if cached == true @index = cached.interval.end end return cached end i0, s0 = index, [] if has_terminal?("[", false, index) r1 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("[") r1 = nil end s0 << r1 if r1 s2, i2 = [], index loop do i3 = index r4 = _nt_dtext if r4 r3 = r4 else r5 = _nt_quoted_pair if r5 r3 = r5 else @index = i3 r3 = nil end 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 has_terminal?("]", false, index) r6 = instantiate_node(SyntaxNode,input, index...(index + 1)) @index += 1 else terminal_parse_failure("]") r6 = nil end s0 << r6 end end if s0.last r0 = instantiate_node(SyntaxNode,input, i0...index, s0) r0.extend(NoFoldLiteral0) else @index = i0 r0 = nil end node_cache[:no_fold_literal][start_index] = r0 r0 end end class RFC2822Parser < Treetop::Runtime::CompiledParser include RFC2822 end end