def match(pattern_element)
    @num_match_attempts += 1
    return :no_pattern_element unless pattern_element
    return :skipped if pattern_element.delimiter &&
      (
      if last_match
        last_match.delimiter       # don't match two delimiters in a row
      else
        @num_match_attempts > 1   # don't match a delimiter as the first element unless this is the first match attempt
      end
      )

    if result = pattern_element.parse(self)
      add_match result, pattern_element.name # success, but don't keep EmptyNodes
    end
  end
def match(pattern_element)
    @num_match_attempts += 1
    return :no_pattern_element unless pattern_element
    return :skipped if pattern_element.delimiter &&
      (
      if last_match
        last_match.delimiter       # don't match two delimiters in a row
      else
        @num_match_attempts > 1   # don't match a delimiter as the first element unless this is the first match attempt
      end
      )

    if result = pattern_element.parse(self)
      add_match result, pattern_element.name # success, but don't keep EmptyNodes
    end
  end
Attempts to match the pattern_element starting at the end of what has already been matched
 If successful, adds the resulting Node to matches.
 returns nil on if pattern_element wasn't matched; non-nil if it was skipped or matched