У меня возникают проблемы с написанием правила, которое может читать более одной строки кода в моем анализаторе.
когда я печатаю одну строку, результат в порядке, однако я получаю сообщение об ошибке, если пытаюсь напечатайте две строки.
raise ParsingError(None, lookahead.getsourcepos())
rply.errors.ParsingError: (None, SourcePosition(idx=12, lineno=2, colno=1))
Я следую решению, опубликованному на ( Как анализировать многострочный код с помощью библиотеки RPLY? ), но я не думаю, что понимаю ответ правильно. Я дважды изменил свой код ast.py и получил две разные ошибки
parse_gen.py
@self.pg.production('expression : PRINT OPEN_PAREN expression CLOSE_PAREN')
@self.pg.production('program : expression')
@self.pg.production('program : program expression')
def program(p):
return Program(p)
return Print(p[2])
ast.py
class Program():
def __init__(self, value):
self.value = value
def eval(self):
self.value.eval()
ошибка 1
AttributeError: 'list' object has no attribute 'eval'
ast.py
class Program():
def __init__(self, value):
self.value = value
def eval(self):
x = self.value
for i in x:
return i.eval()
error 2
AttributeError: 'Token' object has no attribute 'eval'
Я также попытался добавить a для l oop для p в программной функции, но это также вызывает вторая ошибка.