AST and semantics error
Jun 25, 2024 - ⧖ 2 minUm dos problemas que ainda temos na area de desenvolvimento é a curva de aprendizagem que envolve aprender a linguagem de programação. Essa barreira em muitos casos existe pois nossas ferramentas não são pensadas para o ensino mas são otimizadas como ferramentas profissionais. Minha idéia é escrever um pouco sobre compiladores e sobre interface de novos programadores com suas ferramentas.
Na minha dissertação de mestrado estou explorando a idéia de melhorar as mensagens de erros do Java, melhorar no sentido de criar mais contexto e ajudar ao desenvolvedor a compreender aonde ele errou e porque isso é um erro. Quando falamos de desenvolvedores profissionais isso não faz muito sentido pois deixaria o processo mais lento, porém para estudantes não estamos de falando de grandes codebases e por isso nosso foco é didático.
Erros não são todos iguais
O trabalho envolve muito de conceitos de compiladores, já que é nesse processo que queremos expandir as mensagens de erros. Essa preocupação não é nova e vemos alguns avanços em linguagens como Rust, porém é algo que exige muito trabalho em termos de ferramentas para avançarmos em outras linguagens. O primeiro conceito é entender os diferentes erros que existem , quando falamos de erros sintaticos são aqueles que não permitem que o Lexer finalize o parse e indetificam ou estruturas inválidas ou palavras incorretas na gramatica.
Porém existem uma categoria que geram mais confusão , que são os erros semanticos. Aonde o que você escreveu é válido na gramática mas não faz muito sentido em termos prático. Por exemplo atribuir um numero a uma variavel de texto, você usou todos os tokens corretamente mas isso não faz sentido no sistema de tipos. Esses erros normalmente tem messagens de erros bem localizadas e diretas que para quem desenvolve a mais tempo, fazem sentido ( nem sempre faz sentido como deveria ) e as pessoas desenvolvedoras acabam por aceitar. Um outro exemplo é utilizar uma variavel do tipo inteiro em um parametro de função do tipo flutuante, para um desenvolvedor experiente provavelmente fara um checagem na criação da variavel ( ou irá mudar a função e ver se funciona).