diff options
author | Peter Wu <lekensteyn@gmail.com> | 2011-12-02 13:57:32 +0000 |
---|---|---|
committer | Peter Wu <lekensteyn@gmail.com> | 2011-12-02 13:57:32 +0000 |
commit | 83d06610b8c070759598a0bb2bd4dca4d61973f0 (patch) | |
tree | e998023d097f6cbab5f674d13f3df97d0d6f3910 | |
parent | f1eece6b17e37a8db60c4ddcb49dd93ce1422f10 (diff) | |
download | pp2cc-83d06610b8c070759598a0bb2bd4dca4d61973f0.tar.gz |
Remove old label when setting a new one, add method for getting a label
-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 |