def read_database(filename): lines = open(filename, 'r').readlines() lines = filter_comments(lines) lines = genutil.process_continuations(lines) # returns a list and a dictionary (chips, chip_features_dict) = parse_lines(filename, lines) recursive_expand(chip_features_dict) return (chips, chip_features_dict)
def read_database(filename): lines = file(filename).readlines() lines = filter_comments(lines) lines = genutil.process_continuations(lines) # returns a list and a dictionary (chips, chip_features_dict) = parse_lines(filename, lines) expand_macro(chip_features_dict, expand_all_of_once) expand_macro_not(chip_features_dict) return (chips, chip_features_dict)
def _process_input_lines(self, fn): """We'll still have multiple pattern/operands/iform lines after reading this. Stores each record in a list of dictionaries. Each dictionary has key-value pairs and the value is always a list""" lines = open(fn).readlines() lines = genutil.process_continuations(lines) started = False recs = [] nt_name = "Unknown" i = 0 for line in lines: i = i + 1 if i > 500: sys.stderr.write(".") i = 0 line = patterns.comment_pattern.sub("", line) line = line.strip() if line == '': continue line = slash_expand.expand_all_slashes(line) if patterns.udelete_pattern.search(line): m = patterns.udelete_full_pattern.search(line) unamed = m.group('uname') self.deleted_unames[unamed] = True continue if patterns.delete_iclass_pattern.search(line): m = patterns.delete_iclass_full_pattern.search(line) iclass = m.group('iclass') self.deleted_instructions[iclass] = True continue line = self._expand_state_bits_one_line(line) p = patterns.nt_pattern.match(line) if p: nt_name = p.group('ntname') continue if patterns.left_curly_pattern.match(line): if started: die("Nested instructions") started = True d = collections.defaultdict(list) d['NTNAME'].append(nt_name) continue if patterns.right_curly_pattern.match(line): if not started: die("Mis-nested instructions") started = False recs.append(d) continue if started: key, value = line.split(":", 1) key = key.strip() value = value.strip() if value.startswith(':'): die("Double colon error {}".format(line)) if key == 'IFORM': # fill in missing iforms with empty strings x = len(d['PATTERN']) - 1 y = len(d['IFORM']) # if we have more patterns than iforms, add some # blank iforms while y < x: d['IFORM'].append('') y = y + 1 d[key].append(value) else: die("Unexpected: [{0}]".format(line)) sys.stderr.write("\n") return recs
def _process_input_lines(self, fn): """We'll still have multiple pattern/operands/iform lines after reading this. Stores each record in a list of dictionaries. Each dictionary has key-value pairs and the value is always a list""" lines = open(fn).readlines() lines = genutil.process_continuations(lines) started = False recs = [] nt_name = "Unknown" i = 0 for line in lines: i = i + 1 if i > 500: sys.stderr.write(".") i = 0 line = patterns.comment_pattern.sub("", line) line = line.strip() if line == '': continue line = slash_expand.expand_all_slashes(line) if patterns.udelete_pattern.search(line): m = patterns.udelete_full_pattern.search(line) unamed = m.group('uname') self.deleted_unames[unamed] = True continue if patterns.delete_iclass_pattern.search(line): m = patterns.delete_iclass_full_pattern.search(line) iclass = m.group('iclass') self.deleted_instructions[iclass] = True continue line = self._expand_state_bits_one_line(line) p = patterns.nt_pattern.match(line) if p: nt_name = p.group('ntname') continue if patterns.left_curly_pattern.match(line): if started: die("Nested instructions") started = True d = collections.defaultdict(list) d['NTNAME'].append(nt_name) continue if patterns.right_curly_pattern.match(line): if not started: die("Mis-nested instructions") started = False recs.append(d) continue if started: key, value = line.split(":", 1) key = key.strip() value = value.strip() if value.startswith(':'): die("Double colon error {}".format(line)) if key == 'PATTERN': # Since some patterns/operand sequences have # iforms and others do not, we can avoid tripping # ourselves up by always adding an iform when we # see the PATTERN token. And if do we see an IFORM # token, we can replace the last one in the list. d['IFORM'].append('') if key == 'IFORM': # Replace the last one in the list which was added # when we encountered the PATTERN token. d[key][-1] = value else: # for normal tokens we just append them d[key].append(value) else: die("Unexpected: [{0}]".format(line)) sys.stderr.write("\n") return recs