def parse_content(self, content, bootloader=False,filename='~'): ndh_preproc = NdhPreproc(content) lines = ndh_preproc.process_content(filename=filename) #print '\n'.join([l[2] for l in lines]) # insert bootloader if required if bootloader: lines = [('~',0,".label __entrypoint"),('~',0,'jmpl :main')]+lines out = [] offset = 0x8000 for filename,line,raw in lines: if len(raw.strip())>0: raw = raw.strip() if raw[0]!=';': if self.is_meta(raw): _meta = self.parse_meta(filename,line, raw) _meta.setOffset(offset) #if isinstance(_meta, Label): # print '%s: %04X' % (_meta.getName(), _meta.getOffset()) if isinstance(_meta,Data): offset += _meta.getSize() out.append(_meta) else: _inst = self.parse_inst(filename,line, raw) if _inst is None: raise NdhSyntaxError(filename=filename,line=line,msg='Invalid instruction: %s'%raw) _inst.setOffset(offset) offset += _inst.getSize() out.append(_inst) return out
def parse_content(self, content, bootloader=False, filename='~'): ndh_preproc = NdhPreproc(content) lines = ndh_preproc.process_content(filename=filename) #print '\n'.join([l[2] for l in lines]) # insert bootloader if required if bootloader: lines = [('~', 0, ".label __entrypoint"), ('~', 0, 'jmpl :main')] + lines out = [] offset = 0x8000 for filename, line, raw in lines: if len(raw.strip()) > 0: raw = raw.strip() if raw[0] != ';': if self.is_meta(raw): _meta = self.parse_meta(filename, line, raw) _meta.setOffset(offset) #if isinstance(_meta, Label): # print '%s: %04X' % (_meta.getName(), _meta.getOffset()) if isinstance(_meta, Data): offset += _meta.getSize() out.append(_meta) else: _inst = self.parse_inst(filename, line, raw) if _inst is None: raise NdhSyntaxError( filename=filename, line=line, msg='Invalid instruction: %s' % raw) _inst.setOffset(offset) offset += _inst.getSize() out.append(_inst) return out
def check_syntax(self, filename): try: self.filename = os.path.basename(filename) # remove preproc directives before checking syntax content = open(filename,'r').read() preproc = NdhPreproc(content) _content = preproc.process_content() #print _content #_content = preproc.remove_directives() # check main file syntax insts = self.parse_content(_content, preproc=False) # loop on every included file preproc = NdhPreproc(content) included_files = preproc.get_includes() for f in included_files: self.check_syntax(f) except InvalidDirective,e: raise NdhSyntaxError(filename=self.filename,line=e.line,msg='Invalid directive: %s'%e.directive)
def check_syntax(self, filename): try: self.filename = os.path.basename(filename) # remove preproc directives before checking syntax content = open(filename, 'r').read() preproc = NdhPreproc(content) _content = preproc.process_content() #print _content #_content = preproc.remove_directives() # check main file syntax insts = self.parse_content(_content, preproc=False) # loop on every included file preproc = NdhPreproc(content) included_files = preproc.get_includes() for f in included_files: self.check_syntax(f) except InvalidDirective, e: raise NdhSyntaxError(filename=self.filename, line=e.line, msg='Invalid directive: %s' % e.directive)