🐛 corrigindo erros sintatico do senao (fix #810) #851
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
O seguinte gera o erro da issue #810
Ao tentar localizar o erro, foi percebido que o problema não é identificado pelo PortugolParser como um erro sintatico. Portanto ele tenta executar normalmente gerando um erro no gerador de ASA que não consegue encontrar os blocos do senao.
Ao mesmo tempo, foi percebido que o TerminalNode do SENAO vem instanciado na classe ErrorNodeImpl, quando analisado pelo geradorASA. Foi então suposto que ele identifica sim o problema, mas no Parser passa despercebido.
Por isso, foi feito uma captura dessa instancia no gerador e retornado como um RecognitionException, pois é o unico tipo que o gerador retorna. Porém o construtor dessa exceção não permite setar os tokens esperados, gerando um erro no tradutor de erros em tokens.
Como ele permite setar uma mensagem, foi utilizado uma para identificar no tradutor o novo tipo de erro e de lá conseguir enviar um erro padrão do sistema.
Essa solução resolve a exceção que é jogada para o usuário, entretanto não resolve o problema do PortugolParser ignorar o erro sintático. Esse erro pode também estar relacionado com as issues #834 e #759 em que o Portugol também ignora sintaticamente a utilização do senao de forma errada.