diff options
Diffstat (limited to 'subv.py')
| -rw-r--r-- | subv.py | 17 |
1 files changed, 9 insertions, 8 deletions
@@ -127,9 +127,9 @@ def classify(line): >>> classify('$some:label:') 'label' >>> classify('ff/op 0/subop/add 1/rd/x1 label[11:0]/imm12') - 'data' + 'instr' >>> classify('ff/8 0/3 2/5') - 'data' + 'instr' """ if line == '': return 'empty' @@ -138,7 +138,7 @@ def classify(line): elif line.endswith(':'): # label return 'label' else: - return 'data' + return 'instr' def parse(line): """ clean, classify and parse lines. @@ -157,10 +157,8 @@ def parse(line): parsed = parse_segment(clean) elif type == 'label': parsed = parse_label(clean) - elif type == 'data': + elif type == 'instr': parsed = parse_instr(clean) - if len(parsed[0]) > 1 and not num.match(parsed[0][-1]): - type = 'instr' else: parsed = None @@ -297,7 +295,8 @@ class LineIterator(object): def __init__(self, stream): self.stream = stream self.iter = enumerate(self.stream, start=1) - self.i, self.raw_line, self.line = 0, None, None + self.i, self.raw_line = 0, None + self.line, self.segment = None, None def __iter__(self): return self @@ -307,9 +306,11 @@ class LineIterator(object): self.line = None try: self.line = parse(self.raw_line) + if self.line['type'] == 'segment': + self.segment = self.line['segment'][0] except Exception as e: raise self.exception("failed to parse line") from e - return self.line + return (self.segment, self.line) def exception(self, msg): if self.line: |
