Skip to content

Instantly share code, notes, and snippets.

@masalt0
Last active May 24, 2022 22:37
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save masalt0/bc2353acc1d0578013e7f449e90f4634 to your computer and use it in GitHub Desktop.
Save masalt0/bc2353acc1d0578013e7f449e90f4634 to your computer and use it in GitHub Desktop.
The official interpreter for the Bird programming language. (v1.0)
file=open(input('.bird: ')+'.bird','r').readlines();import time;import os;cls=lambda:os.system('cls'if os.name in ('nt','dos')else'clear')
row=0
column=0
loopstartrow=0
loopstartcolumn=0
pointer=''
oldpointer='>'
datatype='lit'
stroutput=''
intoutput=''
strsymbol=''
file2=''
def move(t):
global row, column
if t[0]=='>':column+=1
if t[0]=='<':column-=1
if t[0]=='^':row-=1
if t[0]=='v':row+=1
cls()
while not (pointer=='~' and datatype=='lit'):
pointer=file[row][column]
if datatype=='lit':
if pointer=='x':
stroutput=''
if pointer=='.':
oldpointer+='.'
if pointer=='#':
oldpointer+='#'
if pointer=='@':
oldpointer+='@'
if pointer=='t':
oldpointer+='t'
if pointer=='>':
oldpointer='>'
elif pointer=='<':
oldpointer='<'
elif pointer=='^':
oldpointer='^'
elif pointer=='v':
oldpointer='v'
elif pointer=='/':
print(stroutput)
stroutput=''
elif pointer=="'":
datatype='str'
strsymbol="'"
if pointer=='"':
datatype='str'
strsymbol='"'
elif pointer=='[':
loopstartrow=row
loopstartcolumn=column
elif pointer==']':
row=loopstartrow
column=loopstartcolumn
elif pointer=='+':
oldpointer+='+'
elif pointer=='-':
oldpointer+='-'
elif pointer=='=':
oldpointer+='='
elif pointer=='g':
oldpointer+='g'
elif pointer=='l':
oldpointer+='l'
elif pointer=='?':
pointer=input('input: ')
if pointer in '0123456789':
if len(oldpointer)>1:
if oldpointer[1]=='+':intoutput+=pointer
if oldpointer[1]=='-':intoutput-=pointer
if oldpointer[1]=='=':intoutput=pointer
if oldpointer[1]=='t':time.sleep(float('0.'+pointer))
if oldpointer[1]=='@':
file2=stroutput
stroutput=open(stroutput, "r").readlines()
if len(stroutput)>0:
stroutput=stroutput[int(pointer)]
else: stroutput=''
if oldpointer[1]=='.':stroutput+=file[int(pointer)]
if len(oldpointer)>2:
if oldpointer[2]=='g':
if not pointer<intoutput:
move(oldpointer)
if oldpointer[2]=='l':
if not pointer>intoutput:
move(oldpointer)
if oldpointer[2]=='=':
if not pointer==intoutput:
move(oldpointer)
oldpointer=oldpointer[0]
elif pointer=='&':
if len(oldpointer)>1:
if oldpointer[1]=='=':
oldpointer=oldpointer[0]+'&='
if oldpointer[1]=='g':
oldpointer=oldpointer[0]+'&g'
if oldpointer[1]=='l':
oldpointer=oldpointer[0]+'&l'
if oldpointer[1]=='l':
oldpointer=oldpointer[0]+'&l'
elif len(oldpointer)>1:
if oldpointer[1]=='#':
f = open(file2, 'r+')
f.truncate(0)
f.write(stroutput)
oldpointer=oldpointer[0]
elif pointer==strsymbol:datatype='lit'
else:stroutput+=pointer
move(oldpointer)
time.sleep(2.5)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment