diff options
-rw-r--r-- | Asm.py | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -23,7 +23,9 @@ import re class Asm(object): def __init__(self): self.level = 0 - self.re_identifier = re.compile("^[0-9a-zA-Z_][0-9a-zA-Z_]*$") + re_id = "[0-9a-zA-Z_][0-9a-zA-Z_]*" + self.re_identifier = re.compile("^" + re_id + "$") + self.re_label = re.compile("^\s*" + re_id + "\s*:") def is_identifier(self, text): return self.re_identifier.match(text) def format_line(self, line, label="", indent_size=-1): @@ -36,6 +38,8 @@ class Asm(object): label += ": " else: label += ":" + # strip the previous label and indentation + line = self.re_label.sub("", line).rstrip("") # whitespace is generated if indent_size > 0 indent = indent_size * " " return indent + label + line @@ -57,8 +61,14 @@ class Asm(object): indent_size = len(instruction) - len(new_instruction) return self.format_line(new_instruction, label, indent_size) def has_label(self, line): - """"Returns True if a line appears to contain a label, False otherwise""" - return self.is_identifier(line.split(":", 1)[0].strip()) + """Returns True if a line appears to contain a label, False otherwise""" + return self.get_label(line) != "" + def get_label(self, line): + """Returns the label if any""" + label = self.re_label.match(line) + if label is None: + return "" + return label[0].strip(": ") def noop(self, label, register="R0"): """Returns a labelled no operation operator |