Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Run with python compiler.py inputfile outputfile.
- letters = map(chr,range(65,91))
- letters.extend(map(chr, range(97,123)))
- import sys
- def cmplr(bitoven):
- compiled = """
- import sys
- class Register:
- def __init__(self):
- self.value = 0
- def add(self, num):
- self.value+=num
- self.value%=256
- def sub(self, num):
- self.value-=num
- self.value%=256
- def main(input_file):\n"""
- compiled = compiled[1:]
- depth = 0
- varlist = []
- for i in filter(lambda x:(x in letters) and not (x in varlist), bitoven):
- if i in varlist:
- continue
- varlist.append(i)
- compiled+='\t'+i+" = Register()\n"
- parsed_program = formatter(bitoven)
- depth = 1
- for i in parsed_program:
- if type(i)==str:
- if i[0]=='[':
- compiled+="\t"*depth+"while "+i[1]+".value:\n"
- depth+=1
- elif i==']':
- depth-=1
- compiled=="\n"
- elif i[0] in letters:
- variable = i[0]
- if i[1] == "?":
- compiled+="\t"*depth + variable +".value = ord(input_file.read(1))\n"
- elif i[1] == "!":
- compiled+="\t"*depth+"sys.stdout.write(chr("+variable+".value))\n"
- else:
- print "Invalid program"
- return None
- elif type(i)==tuple:
- variable = i[0][0]
- if i[0][1] in "+-":
- funct = {'+': 'add', '-': 'sub'}[i[0][1]]
- compiled+="\t"*depth + variable+"."+funct+"("+str(i[1])+")\n"
- r = """
- if __name__=="__main__":
- input = open(sys.argv[1], "r+")
- main(input)
- """
- r=r[1:-1]
- compiled+=r
- return compiled
- def formatter(inp):
- result = []
- i=0
- while i < len(inp):
- if inp[i]=='[':
- result.append(inp[i]+inp[i+1])
- i+=2
- continue
- elif inp[i]==']':
- result.append(']')
- elif inp[i] in letters:
- if inp[i+1] in "?!":
- result.append(inp[i]+inp[i+1])
- elif inp[i+1] in "+-":
- reg = inp[i]
- i+=1
- calculation = inp[i]
- count = 0
- while i<len(inp):
- if inp[i]==calculation:
- count+=1
- i+=1
- else:
- break
- i-=1
- result.append((reg+calculation,count))
- else:
- return -1
- i+=1
- return result
- if __name__ == "__main__":
- file_in = open(sys.argv[1], "r+")
- z = file_in.read()
- file_out = open(sys.argv[2], "w+")
- file_out.write(cmplr(z))
- file_in.close()
- file_out.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement