anchor.diff:  
   def initialize():
       global functions, params, pins, options, comp_name, names, docs, variables
  +    global modparams
   
       functions = []; params = []; pins = []; options = {}; variables = []
  -    docs = []
  +    modparams = []; docs = []
       comp_name = None
   
       names = {}
  
positive.code:         Error("Duplicate item name %s" % name)
      names[name] = None
      variables.append((type, name, array, default))
  
  def removeprefix(s,p):
      if s.startswith(p): return s[len(p):]
  
negative.code:                 | NAME {{ return NAME }}
                  | FPNUMBER {{ return float(FPNUMBER.rstrip("f")) }}
                  | NUMBER {{ return int(NUMBER,0) }}
      rule SValue: "yes" {{ return "yes" }} | "no" {{ return "no" }}  
                  | "true" {{ return "true" }} | "false" {{ return "false" }}  
                  | "TRUE" {{ return "TRUE" }} | "FALSE" {{ return "FALSE" }}  
                  | NAME {{ return NAME }}
                  | FPNUMBER {{ return FPNUMBER }}
                  | NUMBER {{ return NUMBER }}
      rule OptValue: Value {{ return Value }}
                  | {{ return 1 }}
      rule OptSValue: SValue {{ return SValue }}
                  | {{ return 1 }}
  %%
  
  mp_decl_map = {'int': 'RTAPI_MP_INT', 'dummy': None}
  
  def parse(rule, text, filename=None):
      global P, S
  