Beispiel #1
0
  def HandleLine(self, line):
    loc = sum([x.Size() for x in self.instructions])

    for replace,value in self.defines.iteritems():
      line = re.sub(replace, value, line)

    if re.match("^\s*$", line) is not None:
      return

    try:
      m = re.match(
          r'''^\s*\.DEFINE\s*(?P<label>[_a-zA-Z0-9]+)\s*(?P<value>.*)$''',
          line)
      if m is not None:
        self.defines[m.group('label')] = m.group('value')
        return

      m = re.match(
          r'''^\s*\.STRING\s*(?P<label>[_a-zA-Z0-9]+)\s*(?P<str>".*")''',
          line)
      if m is not None:
        self.RegisterDataLabel(m.group('label'), eval(m.group('str')))
        return
      m = re.match("^\s*(?P<label>[_a-zA-Z0-9]+):\.*$", line)
      if m is not None:
        self.RegisterLabel(m.group('label'), loc)
        return
      m = re.match("^\s*#.*$", line)
      if m is not None:
        return

      inst = Instruction.parseline(self, loc, line)
      self.instructions.append(inst)
    except Exception as e:
      return None
Beispiel #2
0
  def HandleLine(self, line):
    loc = sum([x.Size() for x in self.instructions])
    for replace,value in self.defines.iteritems():
      line = re.sub(replace, value, line)

    if re.match("^\s*$", line) is not None:
      return

    try:
      m = re.match(
          r'''^\s*\.DEFINE\s*(?P<label>[_a-zA-Z0-9]+)\s*(?P<value>.*)$''',
          line)
      if m is not None:
        self.defines[m.group('label')] = m.group('value')
        return

      m = re.match(
          r'''^\s*\.STRING\s*(?P<label>[_a-zA-Z0-9]+)\s*(?P<str>".*")''',
          line)
      if m is not None:
        self.RegisterDataLabel(m.group('label'), eval(m.group('str')))
        return
           
      m = re.match(
          r'''^\s*\.WORD\s*(?P<label>[_a-zA-Z0-9]+)\s*''',
          line)
      if m is not None:
        self.RegisterIntLabel(m.group('label'))
        return
        
      m = re.match("^\s*(?P<label>[_a-zA-Z0-9]+):\.*$", line)
      if m is not None:
        #print "reg label"
        self.RegisterLabel(m.group('label'), loc)
        return
      m = re.match("^\s*#.*$", line)
      if m is not None:
        return

      inst = Instruction.parseline(self, loc, line)
      self.instructions.append(inst)
    except Exception as e:
      print
      print traceback.format_exc(e)
      print "*** Invalid line: '%s'"%(line)
      print
      sys.exit(1)
Beispiel #3
0
    def handle_line(self, line):
        loc = sum([x.size() for x in self.instructions])

        for replace, value in self.defines.iteritems():
            line = re.sub(replace, value, line)

        if re.match("^\s*$", line) is not None:
            return

        try:
            m = re.match(
                r'''^\s*\.DEFINE\s*(?P<label>[_a-zA-Z0-9]+)\s*(?P<value>.*)$''',
                line)
            if m is not None:
                self.defines[m.group('label')] = m.group('value')
                return

            m = re.match(
                r'''^\s*\.STRING\s*(?P<label>[_a-zA-Z0-9]+)\s*(?P<str>".*")''',
                line)
            if m is not None:
                self.reg_data_label(m.group('label'), eval(m.group('str')))
                return

            m = re.match("^\s*(?P<label>[_a-zA-Z0-9]+):\.*$", line)
            if m is not None:
                self.reg_label(m.group('label'), loc)
                return

            # Ignore remaining parts
            m = re.match("^\s*#.*$", line)
            if m is not None:
                return

            inst = Instruction.parseline(self, loc, line)
            self.instructions.append(inst)

        # Raise exception if match fails
        except Exception as e:
            print traceback.format_exc(e)
            sys.exit(1)