Это файл basic.py для языка программирования, который я делаю. В настоящий момент это ошибка.Нужна помощь в исправлении ошибки python
from sys import *
tokens = []
def open_file(filename):
data = open(filename, "r").read()
data += "<EOF>"
return data
def lex(filecontents):
tok = ""
state = 0
isexpr = 0
string = ""
expr = ""
n = ""
filecontents = list(filecontents)
for char in filecontents:
tok += char
if tok == " ":
if state == 0:
tok = ""
else:
tok = " "
elif tok == "\n" or tok == "<EOF>":
if expr != "" and isexpr == 1:
#print(expr + "EXPR")
tokens.append("EXPR:" + expr)
expr = ""
elif expr != "" and isexpr == 0:
#print(expr + "NUM")
tokens.append("NUM:" + expr)
expr = ""
tok = ""
elif tok.lower() == "print":
tokens.append("PRINT")
tok = ""
elif tok.isnumeric():
expr += tok
tok = ""
elif tok == "+":
isexpr = 1
expr += tok
tok = ""
elif tok == "\"":
if state == 0:
state = 1
elif state == 1:
tokens.append("STRING:" + string + "\"")
string = ""
state = 0
tok = ""
elif state == 1:
string += tok
tok = ""
print(tokens)
return tokens
def parse(toks):
i = 0
while(i < len(toks)):
if toks[i] + " " + toks[i+1][0:6] == "PRINT STRING" or toks[i] + " " + toks[i+1][0:3] == "PRINT NUM" or toks[i] + " " + toks[i+1][0:4] == "PRINT EXPR":
if toks[i+1][0:6] == "STRING":
print(toks[i+1][7:])
elif toks[i+1][0:3] == "NUM":
print(toks[i+1][4:])
elif toks[i+1][0:4] == "EXPR":
print(toks[i+1][5:])
i+=2
def run():
data = open_file(argv[1])
toks = lex(data)
parse(toks)
run()
здесь файл test.vil (мой язык программирования называется Виллар), что я передаю данные через:
STRING "HELLO WORLD"
string "Hey world!"
17 + 3
В результате я получаю IndexError: List index out of range
в строке 62.
Можете ли вы мне помочь? Мне бы хотелось получить советы о том, как его улучшить, если это разрешено здесь.
Ваш индекс списка за пределами допустимого диапазона. Вы используете 'i + 1', поэтому вы выйдете за пределы списка. –
Нет причин публиковать свою ошибку в виде скриншота. Просто скопируйте и вставьте текст здесь. –
Спасибо Daniel Roseman за это, новое для stackoverflow и спасибо L3viathan за редактирование. –