def parse_fugou
      s0 = @current_pos
      s1 = parse_place
      if s1 != :failed
        s2 = parse_piece
        if s2 != :failed
          s3 = parse_soutai
          s3 = nil if s3 == :failed
          s4 = parse_dousa
          s4 = nil if s4 == :failed
          s5 = match_str("成")
          s5 = match_str("不成") if s5 == :failed
          s5 = nil if s5 == :failed
          s6 = match_str("打")
          s6 = nil if s6 == :failed
          @reported_pos = s0
          transform_fugou(s1, s2, s3, s4, s5, s6)
        else
          @current_pos = s0
          :failed
        end
      else
        @current_pos = s0
        :failed
      end
    end
def parse_fugou
      s0 = @current_pos
      s1 = parse_place
      if s1 != :failed
        s2 = parse_piece
        if s2 != :failed
          s3 = parse_soutai
          s3 = nil if s3 == :failed
          s4 = parse_dousa
          s4 = nil if s4 == :failed
          s5 = match_str("成")
          s5 = match_str("不成") if s5 == :failed
          s5 = nil if s5 == :failed
          s6 = match_str("打")
          s6 = nil if s6 == :failed
          @reported_pos = s0
          transform_fugou(s1, s2, s3, s4, s5, s6)
        else
          @current_pos = s0
          :failed
        end
      else
        @current_pos = s0
        :failed
      end
    end
fugou : place piece soutai? dousa? ("成" | "不成")? "打"?