tmail/tmail/mailp.rb

require 'racc/parser'
#
# mailp.rb
#
#   Copyright (c) 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
#
#   This program is free software.
#   You can distribute/modify this program under the terms of
#   the GNU Lesser General Public License version 2 or later.
#

require 'tmail/mails'


module TMail


class Mailp < Racc::Parser

  MAILP_DEBUG = false

  def initialize
    self.debug = MAILP_DEBUG
  end

  def debug=( flag )
    @yydebug = flag && DEBUG_PARSER
    @scanner_debug = flag
  end

  def debug
    @yydebug
  end


  def Mailp.parse( str, obj, ident )
    new.parse( str, obj, ident )
  end


  def parse( str, obj, ident )
    return if /\A\s*\z/ === str

    @field = obj

    case obj
    when MsgidH
      msgid_parse str
    when RefH
      refs_parse str
    else
      unless ident then
        ident = obj.type.name.split('::')[-1].to_s
        cmt = []
        obj.comments.replace cmt
      else
        cmt = nil
      end

      @scanner = MailScanner.new( str, ident, cmt )
      @scanner.debug = @scanner_debug
      @first = [ ident.intern, ident ]
      @pass_array = [nil, nil]

      do_parse
    end
  end


  private


  def next_token
    if @first then
      ret = @first
      @first = nil
      ret
    else
      @scanner.scan @pass_array
    end
  end
  
  def on_error( tok, val, vstack )
    raise ParseError,
      "\nparse error in '#{@field.name}' header, on token #{val.inspect}"
  end


  def refs_parse( str )
    arr = []

    while ::TMail::MSGID === str do
      p   = $`
      m   = $&
      str = $'

      p.strip!
      arr.push p
      arr.push m
    end
    str.strip!
    arr.push str unless str.empty?

    @field.refs.replace arr
  end

  def msgid_parse( str )
    if ::TMail::MSGID === str then
      @field.msgid = $&
    else
      raise ParseError, "wrong Message-ID format: #{str}"
    end
  end


##### racc 0.10.10 generates ###

Racc_reduce_table = [
0, 0, :racc_error,
2, 42, :_reduce_1,
2, 42, :_reduce_none,
2, 42, :_reduce_none,
2, 42, :_reduce_4,
2, 42, :_reduce_5,
2, 42, :_reduce_6,
2, 42, :_reduce_7,
2, 42, :_reduce_8,
2, 42, :_reduce_9,
2, 42, :_reduce_10,
2, 42, :_reduce_none,
2, 42, :_reduce_none,
2, 42, :_reduce_none,
2, 42, :_reduce_none,
2, 42, :_reduce_none,
2, 42, :_reduce_16,
2, 42, :_reduce_17,
6, 41, :_reduce_18,
0, 57, :_reduce_none,
2, 57, :_reduce_none,
3, 58, :_reduce_21,
5, 58, :_reduce_22,
1, 59, :_reduce_23,
7, 43, :_reduce_24,
0, 60, :_reduce_none,
2, 60, :_reduce_26,
4, 60, :_reduce_27,
3, 60, :_reduce_28,
0, 61, :_reduce_none,
2, 61, :_reduce_30,
0, 62, :_reduce_none,
2, 62, :_reduce_32,
0, 63, :_reduce_33,
3, 63, :_reduce_34,
0, 64, :_reduce_none,
2, 64, :_reduce_36,
2, 64, :_reduce_37,
0, 65, :_reduce_none,
2, 65, :_reduce_39,
0, 66, :_reduce_none,
2, 66, :_reduce_41,
2, 44, :_reduce_none,
1, 44, :_reduce_43,
1, 45, :_reduce_44,
3, 45, :_reduce_45,
1, 46, :_reduce_none,
1, 46, :_reduce_none,
1, 47, :_reduce_48,
3, 47, :_reduce_49,
1, 48, :_reduce_none,
1, 48, :_reduce_none,
2, 48, :_reduce_52,
4, 69, :_reduce_53,
4, 68, :_reduce_54,
3, 68, :_reduce_55,
2, 71, :_reduce_none,
2, 72, :_reduce_57,
4, 72, :_reduce_58,
3, 56, :_reduce_59,
1, 56, :_reduce_60,
1, 73, :_reduce_61,
3, 73, :_reduce_62,
1, 67, :_reduce_63,
3, 67, :_reduce_64,
1, 75, :_reduce_none,
1, 75, :_reduce_none,
1, 75, :_reduce_none,
3, 49, :_reduce_68,
1, 70, :_reduce_none,
2, 70, :_reduce_70,
1, 74, :_reduce_none,
1, 74, :_reduce_none,
1, 74, :_reduce_none,
1, 50, :_reduce_none,
3, 50, :_reduce_none,
1, 51, :_reduce_76,
2, 51, :_reduce_77,
3, 52, :_reduce_78,
4, 53, :_reduce_79,
2, 53, :_reduce_80,
0, 77, :_reduce_none,
5, 77, :_reduce_82,
1, 78, :_reduce_none,
1, 78, :_reduce_none,
1, 54, :_reduce_85,
2, 55, :_reduce_86,
0, 79, :_reduce_none,
3, 79, :_reduce_none,
0, 80, :_reduce_none,
3, 80, :_reduce_90,
1, 76, :_reduce_none,
1, 76, :_reduce_none,
1, 76, :_reduce_none,
1, 76, :_reduce_none,
1, 76, :_reduce_none,
1, 76, :_reduce_none,
1, 76, :_reduce_none ]

Racc_reduce_n = 98

Racc_shift_n = 164

Racc_action_table = [
     8,     2,    15,     1,     6,     5,    13,     4,    19,     3,
     4,     6,     2,     8,    12,    10,    18,     9,     9,    12,
    16,    11,     7,    14,    14,    13,     5,    15,     3,    16,
    10,    18,    17,    17,    -1,   -98,    37,    20,    -1,   -98,
    31,    21,    27,    24,    30,    25,    33,    29,    36,    33,
    20,    32,    29,    31,    28,    34,    21,    37,    24,    36,
    -1,   -98,    31,    21,    27,    24,    30,    25,    36,    33,
    20,    32,    29,    31,    28,    34,    21,    37,    24,    36,
    -1,   -98,    31,    21,    27,    24,    30,    25,    36,    33,
    20,    32,    29,    31,    28,    34,    21,    37,    24,    36,
    -1,   -98,    31,    21,    27,    24,    30,    25,    33,    29,
    36,    33,    20,    32,    29,    31,    28,    34,    21,    37,
    24,    36,    -1,   -98,    33,    47,    -1,   -98,     0,    49,
    -1,   -98,    20,   -19,    21,    52,    -1,   -98,    31,    21,
    27,    24,    30,    25,    33,    29,    36,    33,    20,    32,
    29,    31,    28,    34,    21,    37,    24,    36,    -1,   -98,
    31,    21,    27,    24,    30,    25,    36,    33,    20,    32,
    29,    31,    28,    34,    21,    37,    24,    36,    -1,   -98,
    37,    57,    -1,   -98,    33,    59,    -1,   -98,    20,    61,
    -1,   -98,    31,    21,    27,    24,    30,    25,    33,    29,
    36,    33,    20,    32,    29,    31,    28,    34,    21,    37,
    24,    36,    -1,   -98,    31,    21,    27,    24,    30,    25,
    33,    29,    36,    33,    20,    32,    29,    31,    28,    34,
    21,    37,    24,    36,    -1,   -98,    24,    69,    -1,   -25,
    37,    71,    -1,   -98,    11,    72,    -1,   -98,    -1,   -13,
    38,    73,    -1,   -81,    -1,   -97,    22,   -61,    35,   -61,
    32,   -61,    34,   -61,     0,   -61,    25,   -61,    -1,   -69,
    35,    75,    25,    76,    -1,   -60,    -1,   -93,    -1,   -96,
    -1,   -51,    -1,    -7,    -1,   -71,    31,    21,    27,    24,
    30,    25,    36,    33,    20,    32,    29,    31,    25,    80,
    28,    34,    21,    37,    24,    36,    -1,   -98,    -1,   -50,
    -1,   -95,    -1,   -73,    -1,   -72,    -1,   -94,    31,    21,
    27,    24,    30,    25,    33,    29,    36,    33,    20,    32,
    29,    31,    28,    34,    21,    37,    24,    36,    -1,   -98,
    -1,   -92,    -1,   -91,    -1,   -61,    -1,   -17,    31,    21,
    27,    24,    30,    25,    36,    33,    20,    32,    29,    31,
    28,    34,     0,   -76,    21,    37,    24,    36,    -1,   -98,
    -1,   -11,    -1,   -47,    -1,   -46,    -1,    -5,    31,    21,
    27,    24,    23,    84,    30,    25,    33,    29,    36,    33,
    20,    32,    29,    31,    28,    34,    21,    37,    24,    36,
    -1,   -98,    -1,   -43,    31,    21,    27,    24,    30,    25,
    36,    33,    20,    32,    29,    31,    34,    85,    25,    80,
    28,    34,    21,    37,    24,    36,    -1,   -98,    -1,    -3,
     0,    86,    -1,   -98,    -1,    -1,    20,    87,    -1,   -98,
    22,    88,    -1,   -98,    -1,   -16,    -1,   -69,    31,    21,
    27,    24,    30,    25,    36,    33,    20,    32,    29,    31,
    28,    34,    21,    37,    24,    36,    -1,   -74,    22,    89,
     0,   -10,    -1,   -98,    -1,   -85,    -1,   -14,    31,    21,
    27,    24,    30,    25,    36,    33,    20,    32,    29,    31,
    28,    34,    21,    37,    24,    36,    -1,   -98,    -1,    -8,
    35,    91,    -1,   -98,    -1,   -12,    -1,   -48,    22,    92,
     0,    -6,    -1,   -98,    22,    93,     0,    -4,    -1,   -98,
    -1,   -44,    -1,    -2,    27,    94,    -1,   -29,    31,    21,
    27,    24,    30,    25,    26,    97,    20,    99,    29,    31,
    28,    34,    21,    37,    24,    36,    -1,   -98,    -1,   -15,
    -1,   -87,    -1,    -9,    37,   102,    -1,   -98,    32,   103,
     0,   -80,    -1,   -98,    31,    21,    27,    24,    30,    25,
    36,    33,    20,    32,    29,    31,    28,    34,    21,    37,
    24,    36,    -1,   -98,    31,    21,    27,    24,    30,    25,
    26,    97,    20,    99,    29,    31,    28,    34,    21,    37,
    24,    36,    -1,   -98,    22,   106,    23,   107,    -1,   -98,
    34,   108,    -1,   -98,    31,    21,    27,    24,    30,    25,
    36,    33,    20,    32,    29,    31,    28,    34,    21,    37,
    24,    36,    -1,   -98,    31,    21,    27,    24,    30,    25,
    26,    97,    20,    99,    29,    31,    28,    34,    21,    37,
    24,    36,    -1,   -98,    -1,   -70,    -1,   -52,    -1,   -77,
    31,    21,    27,    24,    30,    25,    33,    29,    36,    33,
    20,    32,    29,    31,    28,    34,    21,    37,    24,    36,
    -1,   -98,    -1,   -42,    -1,   164,    21,   112,    -1,   -98,
    -1,   -20,    31,    21,    27,    24,    30,    25,    36,    33,
    20,    32,    29,    31,    28,    34,    21,    37,    24,    36,
    -1,   -98,    34,   114,    -1,   -98,    20,   115,    -1,   -98,
    31,    21,    27,    24,    30,    25,    33,    29,    36,    33,
    20,    32,    29,    31,    28,    34,    21,    37,    24,    36,
    -1,   -98,    31,    21,    27,    24,    30,    25,    33,    29,
    36,    33,    20,    32,    29,    31,    28,    34,    21,    37,
    24,    36,    -1,   -98,    31,    21,    27,    24,    30,    25,
    26,    97,    20,    99,    29,    31,    28,    34,    21,    37,
    24,    36,    -1,   -98,    28,   120,    -1,   -31,    35,   121,
    26,   122,    25,   123,    -1,   -26,    -1,   -66,    -1,   -65,
    -1,   -67,    -1,   -63,    32,   124,     0,   -86,    -1,   -98,
    -1,   -81,    37,   126,    -1,   -98,    -1,   -62,    35,   121,
    -1,   -59,    25,   127,    -1,   -98,    -1,   -56,    -1,   -55,
    34,   128,    -1,   -98,    35,   121,    -1,   -57,    22,    92,
    32,   129,    -1,   -98,    20,   130,    -1,   -98,    31,    21,
    27,    24,    30,    25,    36,    33,    20,    32,    29,    31,
    28,    34,    21,    37,    24,    36,    -1,   -75,    -1,   -68,
    -1,   -78,    -1,   -49,    -1,   -45,    35,   121,    -1,   -30,
    -1,   -33,    21,   132,    -1,   -98,    31,    21,    27,    24,
    30,    25,    26,    97,    20,    99,    29,    31,    28,    34,
    21,    37,    24,    36,    -1,   -98,    -1,   -28,    31,    21,
    27,    24,    30,    25,    26,    97,    20,    99,    29,    31,
    28,    34,    21,    37,    24,    36,    -1,   -98,    37,   136,
    -1,   -89,    32,   103,     0,   -79,    -1,   -98,    39,   137,
    -1,   -98,    31,    21,    27,    24,    30,    25,    26,    97,
    20,    99,    29,    31,    28,    34,    21,    37,    24,    36,
    -1,   -98,    -1,   -54,    -1,   -53,    20,   140,    -1,   -98,
    30,   141,    29,   142,    -1,   -35,    -1,   -32,    -1,   -64,
    35,   121,    -1,   -27,    -1,   -88,    39,   144,    -1,   -98,
    36,   146,    37,   147,    -1,   -98,    35,   121,    -1,   -58,
    21,   148,    -1,   -98,    23,   150,    -1,   -98,    33,    59,
    21,   152,    -1,   -98,    21,   153,    -1,   -98,    31,   154,
    -1,   -38,    36,   146,    37,   147,    -1,   -98,    -1,   -82,
    -1,   -84,    -1,   -83,    -1,   -23,    -1,   -18,    20,   157,
    -1,   -98,    -1,   -36,    -1,   -37,    -1,   -34,    31,    21,
    27,    24,    30,    25,    33,    29,    36,    33,    20,    32,
    29,    31,    28,    34,    21,    37,    24,    36,    -1,   -98,
    32,   159,     0,   -40,    -1,   -98,    -1,   -90,    23,   161,
    21,   -21,    -1,   -98,    -1,   -39,    20,   -19,    21,    52,
    -1,   -98,    -1,   -24,    20,   163,    -1,   -98,    -1,   -41,
    -1,   -22 ]

Racc_action_table_ptr = [
     0,    36,    40,    62,    82,   102,   124,   128,   132,   138,
   160,   180,   184,   188,   192,   214,   236,   240,   244,   248,
   250,   254,   256,   270,   276,   278,   280,   282,   284,   286,
   308,   310,   312,   314,   316,   318,   340,   342,   344,   346,
   348,   370,   372,   374,   376,   378,   402,   404,   428,   430,
   434,   436,   440,   444,   446,   448,   468,   474,   476,   478,
   498,   500,   504,   506,   508,   514,   520,   522,   524,   528,
   548,   550,   552,   554,   558,   564,   584,   604,   610,   614,
   634,   654,   656,   658,   660,   682,   684,   686,   690,   692,
   712,   716,   720,   742,   764,   784,   788,   796,   798,   800,
   802,   804,   810,   812,   816,   818,   822,   826,   828,   830,
   834,   838,   844,   848,   868,   870,   872,   874,   876,   880,
   882,   886,   906,   908,   928,   932,   938,   942,   962,   964,
   966,   970,   976,   978,   980,   984,   986,   990,   996,  1000,
  1004,  1008,  1014,  1018,  1022,  1028,  1030,  1032,  1034,  1036,
  1038,  1042,  1044,  1046,  1048,  1070,  1076,  1078,  1084,  1086,
  1092,  1094,  1098,  1100 ]


Racc_goto_table = [
    42,     7,    53,    19,    74,    22,    73,    23,    68,    26,
    48,    27,    76,    28,    56,    30,    70,    35,    74,    38,
    73,    23,    76,    28,    56,    39,    74,    40,    76,    28,
    51,    41,    74,    22,    73,    23,    69,    42,    68,    26,
    48,    43,    76,    28,    56,    30,    46,    44,    70,    45,
    68,    46,    44,    48,    41,    50,    57,    51,    74,    22,
    73,    23,    68,    26,    48,    53,    76,    28,    56,    30,
    70,    35,    74,    54,    76,    28,    70,    55,    50,    56,
    54,    58,    49,    60,    52,    62,    74,    22,    73,    23,
    68,    26,    48,    63,    76,    28,    56,    30,    70,    35,
    47,    64,    74,    22,    73,    23,    45,    65,    69,    42,
    68,    26,    48,    43,    76,    28,    56,    30,    46,    66,
    70,    45,    43,    67,    60,    68,    55,    70,    77,    74,
    74,    38,    73,    23,    72,    77,    76,    28,    56,    78,
    71,    79,    74,    81,    68,    82,    76,    28,    74,    83,
    76,    28,    74,    81,    68,    82,    76,    28,    74,    38,
    73,    23,    72,    77,    76,    28,    56,    78,    71,    79,
    74,    81,    76,    28,    74,    38,    73,    23,    76,    28,
    56,    90,    61,    95,    67,    96,    76,    98,    75,   100,
    79,   101,    74,   104,    76,    28,    67,   105,    76,    98,
    75,   100,    74,    38,    73,    23,    76,    28,    56,   109,
    67,   110,    76,    98,    75,   100,    74,    22,    73,    23,
    68,    26,    48,    63,    76,    28,    56,    30,    70,    35,
    47,   111,    74,    54,    76,    28,    70,   113,    74,    22,
    73,    23,    68,    26,    48,   116,    76,    28,    56,    30,
    70,    35,    74,    22,    73,    23,    69,    42,    68,    26,
    48,    43,    76,    28,    56,    30,    46,   117,    70,    45,
    67,   118,    76,    98,    75,   100,    62,   119,    77,   125,
    74,    81,    76,    28,    63,   131,    76,    98,    75,   133,
    67,   134,    76,    98,    75,   100,    80,   135,    67,   138,
    76,    98,    75,   100,    58,   139,    64,   143,    78,   145,
    59,   149,    49,   151,    65,   155,    78,   156,    74,    22,
    73,    23,    69,    42,    68,    26,    48,    43,    76,    28,
    56,    30,    46,   158,    70,    45,    66,   160,    41,   162,
    57,    51,    -1,    -1 ]

Racc_goto_table_ptr = [
     0,     2,     4,    18,    26,    32,    50,    -1,    54,    58,
    72,    80,    82,    84,    86,   102,   122,   126,    -1,    -1,
   128,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   130,
    -1,    -1,    -1,    -1,    -1,   142,    -1,    -1,    -1,    -1,
   148,    -1,    -1,    -1,    -1,   152,    -1,   158,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,   170,    -1,    -1,    -1,   174,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   182,   184,
    -1,   190,    -1,    -1,    -1,   192,   196,    -1,    -1,   202,
   210,    -1,    -1,    -1,   216,    -1,    -1,    -1,    -1,   232,
    -1,    -1,   238,   252,   270,   276,    -1,    -1,    -1,    -1,
    -1,    -1,   278,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,   280,    -1,    -1,    -1,    -1,    -1,   284,
    -1,   286,    -1,   290,   296,    -1,    -1,   298,    -1,    -1,
   304,   306,    -1,    -1,    -1,    -1,    -1,   308,    -1,   310,
    -1,   312,    -1,   314,   316,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,   318,   336,    -1,    -1,    -1,   338,
    -1,    -1,    -1,    -1 ]


Racc_token_table = {
 false => 0,
 Object.new => 1,
 :DateH => 2,
 :RecvH => 3,
 :RetpathH => 4,
 :MaddrH => 5,
 :SaddrH => 6,
 :MmboxH => 7,
 :SmboxH => 8,
 :MsgidH => 9,
 :RefH => 10,
 :refs => 11,
 :KeyH => 12,
 :EncH => 13,
 :VersionH => 14,
 :CTypeH => 15,
 :CEncodingH => 16,
 :CDispositionH => 17,
 :Mbox => 18,
 :Spec => 19,
 :DIGIT => 20,
 :ATOM => 21,
 "," => 22,
 ":" => 23,
 :FROM => 24,
 "@" => 25,
 :DOMLIT => 26,
 :BY => 27,
 :VIA => 28,
 :WITH => 29,
 :ID => 30,
 :FOR => 31,
 ";" => 32,
 "<" => 33,
 ">" => 34,
 "." => 35,
 :QUOTED => 36,
 :TOKEN => 37,
 "/" => 38,
 "=" => 39 }

Racc_debug_parser = false

##### racc system variables end #####

 # reduce 0 omitted

 module_eval( '', 'mailp.y', 16 ) {
  def _reduce_1( val, _values, result )
 @field.date  = val[1]
   result
  end
 }

 # reduce 2 omitted

 # reduce 3 omitted

 module_eval( '', 'mailp.y', 19 ) {
  def _reduce_4( val, _values, result )
 @field.addrs.replace val[1]
   result
  end
 }

 module_eval( '', 'mailp.y', 20 ) {
  def _reduce_5( val, _values, result )
 @field.addr  = val[1]
   result
  end
 }

 module_eval( '', 'mailp.y', 21 ) {
  def _reduce_6( val, _values, result )
 @field.addrs.replace val[1]
   result
  end
 }

 module_eval( '', 'mailp.y', 22 ) {
  def _reduce_7( val, _values, result )
 @field.addr  = val[1]
   result
  end
 }

 module_eval( '', 'mailp.y', 23 ) {
  def _reduce_8( val, _values, result )
 @field.msgid = val[1]
   result
  end
 }

 module_eval( '', 'mailp.y', 24 ) {
  def _reduce_9( val, _values, result )
 @field.refs.replace val[1]
   result
  end
 }

 module_eval( '', 'mailp.y', 25 ) {
  def _reduce_10( val, _values, result )
 @field.keys.replace val[1]
   result
  end
 }

 # reduce 11 omitted

 # reduce 12 omitted

 # reduce 13 omitted

 # reduce 14 omitted

 # reduce 15 omitted

 module_eval( '', 'mailp.y', 33 ) {
  def _reduce_16( val, _values, result )
        mb = val[1]
        @field.phrase = mb.phrase
        @field.setroute mb.route
        @field.local  = mb.local
        @field.domain = mb.domain
   result
  end
 }

 module_eval( '', 'mailp.y', 41 ) {
  def _reduce_17( val, _values, result )
        mb = val[1]
        @field.local  = mb.local
        @field.domain = mb.domain
   result
  end
 }

 module_eval( '', 'mailp.y', 51 ) {
  def _reduce_18( val, _values, result )
      t = Time.gm( val[3].to_i, val[2], val[1].to_i, 0, 0, 0 )
      result = (t + val[4] - val[5]).localtime
   result
  end
 }

 # reduce 19 omitted

 # reduce 20 omitted

 module_eval( '', 'mailp.y', 61 ) {
  def _reduce_21( val, _values, result )
 result = (result.to_i * 60 * 60) + (val[2].to_i * 60)
   result
  end
 }

 module_eval( '', 'mailp.y', 63 ) {
  def _reduce_22( val, _values, result )
 result = (result.to_i * 60 * 60) + (val[2].to_i * 60) + val[4].to_i
   result
  end
 }

 module_eval( '', 'mailp.y', 66 ) {
  def _reduce_23( val, _values, result )
 result = ::TMail.zonestr2i( val[0] ) * 60
   result
  end
 }

 module_eval( '', 'mailp.y', 71 ) {
  def _reduce_24( val, _values, result )
        @field.from  = val[0] if val[0]
        @field.by    = val[1] if val[1]
        @field.via   = val[2] if val[2]
        @field.with.replace val[3]
        @field.msgid = val[4] if val[4]
        @field.for_  = val[5] if val[5]
        @field.date  = val[6] if val[6]
   result
  end
 }

 # reduce 25 omitted

 module_eval( '', 'mailp.y', 84 ) {
  def _reduce_26( val, _values, result )
        result = val[1].join('.')
   result
  end
 }

 module_eval( '', 'mailp.y', 88 ) {
  def _reduce_27( val, _values, result )
        result = val[3].join('.')
   result
  end
 }

 module_eval( '', 'mailp.y', 92 ) {
  def _reduce_28( val, _values, result )
        result = val[1].join('.')
   result
  end
 }

 # reduce 29 omitted

 module_eval( '', 'mailp.y', 99 ) {
  def _reduce_30( val, _values, result )
        result = val[1].join('.')
   result
  end
 }

 # reduce 31 omitted

 module_eval( '', 'mailp.y', 106 ) {
  def _reduce_32( val, _values, result )
        result = val[1]
   result
  end
 }

 module_eval( '', 'mailp.y', 112 ) {
  def _reduce_33( val, _values, result )
        result = []
   result
  end
 }

 module_eval( '', 'mailp.y', 116 ) {
  def _reduce_34( val, _values, result )
        result.push val[2]
   result
  end
 }

 # reduce 35 omitted

 module_eval( '', 'mailp.y', 123 ) {
  def _reduce_36( val, _values, result )
        result = val[1]
   result
  end
 }

 module_eval( '', 'mailp.y', 127 ) {
  def _reduce_37( val, _values, result )
        result = val[1]
   result
  end
 }

 # reduce 38 omitted

 module_eval( '', 'mailp.y', 132 ) {
  def _reduce_39( val, _values, result )
 result = val[1].address
   result
  end
 }

 # reduce 40 omitted

 module_eval( '', 'mailp.y', 136 ) {
  def _reduce_41( val, _values, result )
 result = val[1]
   result
  end
 }

 # reduce 42 omitted

 module_eval( '', 'mailp.y', 142 ) {
  def _reduce_43( val, _values, result )
        @field.route.replace result.route
        @field.addr = result.addr
   result
  end
 }

 module_eval( '', 'mailp.y', 147 ) {
  def _reduce_44( val, _values, result )
 result = val
   result
  end
 }

 module_eval( '', 'mailp.y', 148 ) {
  def _reduce_45( val, _values, result )
 result.push val[2]
   result
  end
 }

 # reduce 46 omitted

 # reduce 47 omitted

 module_eval( '', 'mailp.y', 153 ) {
  def _reduce_48( val, _values, result )
 result = val
   result
  end
 }

 module_eval( '', 'mailp.y', 154 ) {
  def _reduce_49( val, _values, result )
 result.push val[2]
   result
  end
 }

 # reduce 50 omitted

 # reduce 51 omitted

 module_eval( '', 'mailp.y', 161 ) {
  def _reduce_52( val, _values, result )
        val[1].phrase = HFdecoder.decode( result )
        result = val[1]
   result
  end
 }

 module_eval( '', 'mailp.y', 166 ) {
  def _reduce_53( val, _values, result )
 result = AddressGroup.new( result, val[2] )
   result
  end
 }

 module_eval( '', 'mailp.y', 173 ) {
  def _reduce_54( val, _values, result )
        result = val[2]
        result.route = val[1]
   result
  end
 }

 module_eval( '', 'mailp.y', 178 ) {
  def _reduce_55( val, _values, result )
        result = val[1]
   result
  end
 }

 # reduce 56 omitted

 module_eval( '', 'mailp.y', 184 ) {
  def _reduce_57( val, _values, result )
 result = [ val[1] ]
   result
  end
 }

 module_eval( '', 'mailp.y', 185 ) {
  def _reduce_58( val, _values, result )
 result.push val[3]
   result
  end
 }

 module_eval( '', 'mailp.y', 188 ) {
  def _reduce_59( val, _values, result )
 result = Address.new( val[0], val[2] )
   result
  end
 }

 module_eval( '', 'mailp.y', 189 ) {
  def _reduce_60( val, _values, result )
 result = Address.new( result, nil )
   result
  end
 }

 module_eval( '', 'mailp.y', 194 ) {
  def _reduce_61( val, _values, result )
        result = val
   result
  end
 }

 module_eval( '', 'mailp.y', 198 ) {
  def _reduce_62( val, _values, result )
        result.push val[2]
   result
  end
 }

 module_eval( '', 'mailp.y', 204 ) {
  def _reduce_63( val, _values, result )
        result = val
   result
  end
 }

 module_eval( '', 'mailp.y', 208 ) {
  def _reduce_64( val, _values, result )
        result.push val[2]
   result
  end
 }

 # reduce 65 omitted

 # reduce 66 omitted

 # reduce 67 omitted

 module_eval( '', 'mailp.y', 219 ) {
  def _reduce_68( val, _values, result )
        val[1] = val[1].addr
        result = val.join('')
   result
  end
 }

 # reduce 69 omitted

 module_eval( '', 'mailp.y', 225 ) {
  def _reduce_70( val, _values, result )
 result << ' ' << val[1]
   result
  end
 }

 # reduce 71 omitted

 # reduce 72 omitted

 # reduce 73 omitted

 # reduce 74 omitted

 # reduce 75 omitted

 module_eval( '', 'mailp.y', 249 ) {
  def _reduce_76( val, _values, result )
        @field.encrypter = val[0]
   result
  end
 }

 module_eval( '', 'mailp.y', 253 ) {
  def _reduce_77( val, _values, result )
        @field.encrypter = val[0]
        @field.keyword   = val[1]
   result
  end
 }

 module_eval( '', 'mailp.y', 260 ) {
  def _reduce_78( val, _values, result )
        @field.major = val[0].to_i
        @field.minor = val[2].to_i
   result
  end
 }

 module_eval( '', 'mailp.y', 267 ) {
  def _reduce_79( val, _values, result )
        @field.main = val[0]
        @field.sub  = val[2]
   result
  end
 }

 module_eval( '', 'mailp.y', 272 ) {
  def _reduce_80( val, _values, result )
        @field.main = val[0]
        @field.sub  = ''
   result
  end
 }

 # reduce 81 omitted

 module_eval( '', 'mailp.y', 280 ) {
  def _reduce_82( val, _values, result )
        @field.params[ val[2].downcase ] = val[4]
   result
  end
 }

 # reduce 83 omitted

 # reduce 84 omitted

 module_eval( '', 'mailp.y', 286 ) {
  def _reduce_85( val, _values, result )
 @field.encoding = val[0]
   result
  end
 }

 module_eval( '', 'mailp.y', 289 ) {
  def _reduce_86( val, _values, result )
 @field.disposition = val[0]
   result
  end
 }

 # reduce 87 omitted

 # reduce 88 omitted

 # reduce 89 omitted

 module_eval( '', 'mailp.y', 297 ) {
  def _reduce_90( val, _values, result )
 @field.params[ val[0].downcase ] = val[2]
   result
  end
 }

 # reduce 91 omitted

 # reduce 92 omitted

 # reduce 93 omitted

 # reduce 94 omitted

 # reduce 95 omitted

 # reduce 96 omitted

 # reduce 97 omitted

end

end   # module TMail