Merge pull request #49 from RRZE-HPC/coherent_label_parsing

Coherent label parsing
This commit is contained in:
Jan
2020-08-03 18:25:20 +02:00
committed by GitHub
14 changed files with 21 additions and 17 deletions

View File

@@ -1,6 +1,5 @@
#!/usr/bin/env python3
import re
import string
import pyparsing as pp
@@ -34,8 +33,13 @@ class ParserX86ATT(BaseParser):
+ pp.Optional(relocation).setResultsName('relocation')
).setResultsName('identifier')
# Label
numeric_identifier = pp.Group(
pp.Word(pp.nums).setResultsName('name') + pp.Optional(pp.oneOf('b f', caseless=True).setResultsName('suffix'))
).setResultsName('identifier')
self.label = pp.Group(
identifier.setResultsName('name') + pp.Literal(':') + pp.Optional(self.comment)
(identifier | numeric_identifier).setResultsName('name')
+ pp.Literal(':')
+ pp.Optional(self.comment)
).setResultsName(self.LABEL_ID)
# Register: pp.Regex('^%[0-9a-zA-Z]+{}{z},?')
self.register = pp.Group(
@@ -132,7 +136,7 @@ class ParserX86ATT(BaseParser):
pp.alphanums
).setResultsName('mnemonic')
# Combine to instruction form
operand_first = pp.Group(self.register ^ immediate ^ memory ^ identifier)
operand_first = pp.Group(self.register ^ immediate ^ memory ^ identifier ^ numeric_identifier)
operand_rest = pp.Group(self.register ^ immediate ^ memory)
self.instruction_parser = (
mnemonic
@@ -305,7 +309,7 @@ class ParserX86ATT(BaseParser):
def process_label(self, label):
"""Post-process label asm line"""
# remove duplicated 'name' level due to identifier
label['name'] = label['name']['name']
label['name'] = label['name'][0]['name']
return AttrDict({self.LABEL_ID: label})
def process_immediate(self, immediate):