summaryrefslogtreecommitdiff
path: root/Asm.py
diff options
context:
space:
mode:
Diffstat (limited to 'Asm.py')
-rw-r--r--Asm.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/Asm.py b/Asm.py
index b193d3b..56aed45 100644
--- a/Asm.py
+++ b/Asm.py
@@ -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