-
Notifications
You must be signed in to change notification settings - Fork 218
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
🐛 corrigindo Parser ignora tokens indesejados (fix #834 fix #759 fix #867 fix #810 fix #759 fix #190) #871
Conversation
@AdsonEsteves, na gramática antiga eu incluía o nome dos contextos manualmente em cada parte da gramática. Deixava difícil de ler e manter, mas permitia um maior controle sobre os erros Depois que o @elieserdejesus mudou a implementação para ANTLR4 eu não sei como ficou essa parte. Acredito que ele removeu as informações de contexto da gramática pois a própria árvore gerada pelo ANTLR já contém algumas informações contextuais Talvez seja o caso de incluirmos essas informações na gramática somente em pontos específicos, como o caso do |
@noschang Aproveitando o embalo, tratei os erros do senao e dos parametros de funcao. Agora ele deve resolver as issues: #834 #759 #867 #810 #759 #190 Se puderem testar por favor os problemas com o senao e com os parametros de função e verificar as mensagens de erro. Adicional: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Não achei no código onde está esta frase, mas ao testar a #190, a mensagem está errada.
Mensagem atual: Você pulou uma linha ao escrever uma cadeia. Cadeias apenas podem ser escritas em na mesma linha.
Testei todos os outros fix, e estão certos 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
Disclaimer:
Esse Pull Request ajuda a resolver varias issues (#834 #759 #867 #810 #761 #759 #308), invalida o pull request #851 e resolve a #190.
Atenção no ajuda. O que esse pull request faz principalmente é encontrar erros que não eram encontrados antes ou geravam erros que as soluções não eram práticas.
Portanto, as issues ainda precisam ser resolvidas, tratando os erros gerados e futuros erros desconhecidos que essas mudanças podem pegar.
O que era:
O PortugolParser possui um ErrorHandler que joga exceções quando encontra erros no código
Portugol-Studio/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/AnalisadorSintatico.java
Lines 127 to 153 in 2a12511
Entretanto esse Handler não possui todas as funções implementadas, sendo uma delas a necessária para identificar "Tokens Indesejados".
Ao se implementar as funções restantes, o Portugol conseguiu encontrar esses problemas e gerar as exceções pelo Parser.
Portugol-Studio/core/src/main/java/br/univali/portugol/nucleo/analise/sintatica/AnalisadorSintatico.java
Lines 129 to 182 in 980a71a
Para frente:
Essas modificações vão começar a identificar diversos erros que eram ignorados. Para alguns usuários vai parecer que "do Nada", o programa dele não funciona e agora gera um erro que não faz sentido. É importante que mais testes sejam feitos antes de um novo release para encontrar e tratar mais mensagens sem sentido.
Muitas das mensagens de erro se tornaram "o nome da funcao não foi retornado". Isso acontece pois o tradutor de erros utiliza o contexto dos tokens para identificar o problema, porém alguns tokens não possuem "contexto" no sintatico (como o
senao
) e portanto o Parser retorna como contexto, o contexto "Pai", muitas vezes uma funcao.Dependendo do problema, pode ser necessário alterar o g4 para criar um contexto para esses tokens. idk.