module Arithmetic

def _nt_additive_op

def _nt_additive_op
  start_index = index
  cached = node_cache[:additive_op][index]
  if cached
    @index = cached.interval.end
    return cached
  end
  
  i0 = index
  r1 = parse_terminal('+', SyntaxNode, AdditiveOp0)
  if r1.success?
    r0 = r1
  else
    r2 = parse_terminal('-', SyntaxNode, AdditiveOp1)
    if r2.success?
      r0 = r2
    else
      self.index = i0
      r0 = ParseFailure.new(input, i0)
    end
  end
  
  node_cache[:additive_op][start_index] = r0
  
  return r0
end