Example #1
0
	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
Example #2
0
    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
Example #3
0
	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)
Example #4
0
    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)