Boa tarde. Meu código passou em todos os testes do enunciado, menos do que pede para imprimir os itens contidos na lista de itens criados pelo método 'lexer'. Estou usando o Idle e o Shell entra em loop e não termina a execução. As listas de teste estão com comprimento curto, e os testes anteriores comprovam que ela contem itens da classe Item. Gostaria de saber exatamente como esse comando 'for' implementado desse jeito deveria funcionar. Segue abaixo o retorno do Shell para a bateria de testes dos comentários do método Lexer:
==== RESTART: C:\ProgramData\Anaconda3\Lib\idlelib\mac0122\calculadora.py ====
>>> hp=Calculadora()
>>> exp1 = "soma=soma + 2 # este é um comentario"
>>> exp2 = "2+3- 123 *3.14 # uma conta"
>>> itens1 = hp.lexer(exp1)
>>> itens2 = hp.lexer(exp2)
>>> type(itens1[0])
<class 'item_lexico.Item'>
>>> type(itens1[1])
<class 'item_lexico.Item'>
>>> itens1[0].lexema
'soma'
>>> itens1[0].tipo
'VAR'
>>> itens1[1].lexema
'='
>>> itens1[1].tipo
'OP'
>>> print(itens1[0])
'soma' (<class 'str'>): VAR
>>> print(itens1[1])
'=' (<class 'str'>): OP
>>> print(itens1[2])
'soma' (<class 'str'>): VAR
>>> print(itens1[3])
'+' (<class 'str'>): OP
>>> print(itens1[4])
2.0 (<class 'float'>): NUM
>>> print(itens1[5])
Traceback (most recent call last):
File "<pyshell#51>", line 1, in <module>
print(itens1[5])
IndexError: list index out of range
>>> for item in itens1: print(item)
KeyboardInterrupt
>>> for item in itens2: print(item)
KeyboardInterrupt
Como dito acima, as listas de itens estão com comprimento curto. Também testei com uma lista de números inteiros pequena e conhecida, e o Shell também falhou em executar o comando 'for' implementado desse jeito:
>>> len(itens1)
5
>>> len(itens2)
7
>>> l=[1,2,3,4]
>>> for a in l: print(a)
KeyboardInterrupt
Edit: Fiz um programa de teste importando a classe e testei o for sendo executado pelo programa. Funcionou como devia. Aparentemente é apenas problema do Shell falhando em entender o comando for.
¯\_(ツ)_/¯