import re import os import queue def error(msg): print("ERROR: " + msg) exit() def check(inp, lst, pattern): q = queue.LifoQueue() out = [] keep = True for line in inp: x = re.findall(pattern, line) if len(x) > 0: if line.find("ENDIF_") != -1: if not q.empty(): e = q.get() if e[0] == x[0]: keep = e[1] elif line.find("IF_") != -1: q.put((x[0], keep)) if keep is True: keep = x[0] in lst elif line.find("E") != -1: if q.empty(): error("(ELSE) missing open statement!") e = q.get() q.put(e) if e[1] is True: keep = not keep else: if keep is True: out.append(line) return out def conv(inp, lst): #print(lst) out = check(inp, lst, r'\/\*(?:IF_|ELS|ENDIF_)([A-Z0-9\-_]+)?\*\/') return check(out, lst, r'\<\!\-\-(?:IF_|ELS|ENDIF_)([A-Z0-9\-_]+)?\-\-\>')