Onov

ONOV (Only Names Of Variables) is a language made by User:Boyss where the whole code always consists only of names of variables.
==Definition==
Any string of characters tolerated by Python is a valid ONOV program. The execution goes like this:
#Accept that True is 1 and False is 0 
#The code is recursively separated into halves. 
#Products of the first operation are listed as "torches", which are boolean type variables with a list of "givers". Every two names of variables the second one will have the previous as their giver. All torches have their states set to False. 
#There is made a copy of all torches. 
#Every torches' states are set to False. 
#If there is something in the input list, the leftmost element gets popped and the first declared torch's state is set to it's value. 
#For every torch, if at least one of their givers' state is False in the copy their state becomes True. 
#The last declared torch's state is added to the right of the output queue. 
#If the output queue has less than 7 elements in it go back to point 4
#Else, if it's seven times True get console input. Clear the input list. For every character in the input, add string of bits representating it's number in ASCII to the right of the input list. Go back to point 4
#Else, if it's seven times False exit the program.
#Else, print the character that is in ASCII represented by the number which would output queue be in binary if readen from left to right.
#Erase everything from the output queue and go back to point 4
==Examples==
===Infinite cat===
Any code with an odd length will be a infinite cat program.
 A
==Inspiration==
The name for variables (torches) comes from negating block in redstone circuits in Minecraft
==Implementation==
Implementation in Python 2.7.10
 
 #Python 2.7.10
 #ONOV language interpreter
 from sys import stdout, exit
 from sre_constants import IN_IGNORE
 write=stdout.write
 
 def dec(binary_num):
 return int(binary_num, 2)
 
 def stringify(x):
 ret=bin(ord(character))[2:]
 while len(ret)<7:
 ret='0'+ret
 return ret
 
 
 def part(S):
 l=len(S)
 if l%4==0:
 return part(S[:l/2])+part(S[l/2:])
 elif l%2==0:
 return [part(S[:l/2]),part(S[l/2:])]
 else: return S
 
 def part1(S):
 x=part(S)
 if isinstance(x, list):
 return x
 else:
 return [x]
 
 class Torch:
 def __init__(self,giver,name):
 self.name=name
 self.state=False
 if giver:
 self.givers=[giver]
 else:
 self.givers=[]
 
 code=file(raw_input("""
 Please enter name of the file to interpret\n""")).read()
 parted=part1(code)
 torches=[]
 current=False
 for x in parted:
 repeated=False
 for torch in torches:
 if torch.name==x:
 if current: torch.givers.append(current)
 repeated=True
 if not repeated: torches.append(Torch(current,x))
 current=False if current else x
 out=''
 in_=[]
 while True:
 copy=torches
 for x in torches:
 x.state=False
 if in_:
 torches[0].state=True if int(in_.pop(0)) else False
 for x in torches:
 for name in x.givers:
 for torch in copy:
 if name==torch.name and not torch.state:
 x.state=True
 out+=str(int(torches[-1].state))
 if len(out)==7:
 if out=='0'*7:
 in_=[]
 for character in raw_input():
 for x in stringify(character):
 in_.append(x)
 elif out=='1'*7:
 exit()
 else:
 write(chr(dec(out)))
 out=''
 
Category:Languages
Category:2016
Category:Implemented