Projeto de um compilador para a linguagem mini pascal escrito em java. Compreende todas as etapas de analise léxica, sintática, contexto e geração de código.
Se você é da UNIVASF e está pagando compiladores, não esqueça de nos citar nos trabalhos :)
Se você achou isto útil, por favor não esqueça de deixar uma ⭐️ no repo, para ajudar a promover o projeto.
Siga-me no Twitter e GitHub para ficar atualizado sobre os projetos e outros.
Para a execução do compilador é necessário compila-lo e gerar um arquivo .jar.
Para funcionamento do compilador, são necessárias as inserções do caminho do programa fonte e a do caminho do programa objeto gerado após a geração de código, ambos em seus devido lugares localizados com um rótulo indicativo. Esses caminhos devem possuir o nome do arquivo .txt, exemplo: C:\Users\L\Desktop\nomedoarquivo.txt. Dessa forma será possível verificar o conteúdo do programa fonte e gerar, ou editar, o programa objeto. Após isso, é necessário escolher entre os botões presentes, qual a opção do compilador deverá ser executada. Existem 5 possibilidades:
- Análise Léxica: Executa a análise léxica do programa fonte, e será mostrada no campo rotulado como, “Impressão da Árvore e Análise Léxica”. Qualquer mensagem de erro será mostrada no console. Se houver qualquer mensagem de erro referente a um token inválido, a mensagem será mostrada na tela e léxica feita até o ponto de erro será mostrada.
- Análise Sintática: Executa a análise sintática, mostrando quaisquer erros, que venham a aparecer, na tela de console.
- Impressão da Árvore: Essa opção irá imprimir a árvore se a análise sintática estiver correta. A impressão será mostrada no campo rotulado como, “Impressão da Árvore e Análise Léxica”.
- Análise de Contexto: Executa a análise de contexto, mostrando quaisquer erros que venham acontecer, na tela de console. Além disso, a árvore também será imprimida, se a análise de sintática ocorrer de com sucesso.
- Geração de Código: É necessário, para executar essa função, inserir, no campo rotulado como “caminho do programa objeto”, o caminho aonde o programa objeto será gerado, por exemplo, C:\Users\L\Desktop\objeto.txt.
Diversas mensagens informando o usuário e possíveis problemas serão mostrados na tela de console. Abaixo é mostrado quais mensagens podem aparecer:
- "Error: Source File not found!": Programa fonte não encontrado.
- "Error row ‘x’ column ‘y’ Token “currentSpelling” is not acceptable.”: Indica um erro léxico, devido a detecção de um token não pertencente a gramática.
- "Syntaxe Error: row ‘x’ column ‘y’. Unexpected token ’currentSpelling’: Indica um erro léxico, devido a presença de um token em uma posição indevida.
- "Parser concluded": Indica que a análise sintática foi executada com sucesso.
- "Checker and Identifier Concluded": Indica que a análise de contexto foi realizada com sucesso.
- "Error: Program Object file was not found": Indica que o arquivo de destino do programa objeto não pode ser acessado. Para solucionar esse problema, insira um caminho especificando o arquivo objeto a ser gerado ou editado, um exemplo disso é C:\Users\L\Desktop\objeto.txt.
- "Code has been generated": Geração de código foi executada com sucesso.
- "Incorrect Types!": Atribuição com tipo diferente do definido ou operação onde operandos não possuem o mesmo tipo.
- "Missing Arguments on Declaration in line ‘x’": Indica a falta de argumentos em determinada chamada de rotina.
- "Exceded Arguments to Declaration in line ‘x’.": Indica chamada de rotina com excesso de argumentos.
- "Incorrect Type of Arguments on Declaration in line ‘x’.": Indica que o tipo dos argumentos está incorreto, ou seja, não é o mesmo que foi declarado.
- "Incompatible Types in If Expression ": Expressão presente no comando If não representa um booleano.
- "Literal operands in Array Declaration must be Integers": Indica que os indexadores do array devem ser número inteiros.
- "First Operand is larger than Second in Array Declaration": Indica que na declaração de arrays o valor mínimo é maior que o máximo.
- "Incompatible Types in While Expression": Indica que a expressão presente no comando While não é do tipo booleano.
- "Array Operands Must Be Integers.": Os valores que indicam a indexação do array devem ser inteiros.
- "Exceded Array Dimension in line ‘x’: Indica que a dimensão do array se excedeu. A maior dimensão possível é dois.
- "Variable # ‘x’ already declared in this scope!": Indica que uma variável foi redeclarada em um escopo.
- "Variable ‘x’ was not declared": Indica que determinada variável não foi declarada.
D.A Watt, D.F Brown. Programming Language Processors in Java, Prentice-Hall, Englewood Cliffs, NJ (2000). [link]
@oieusouweverton and all contributors
UNIVASF © Weverton Bruno