Este repositório tem como objetivo o desenvolvimento de um compilador que recebe como entrada um arquivo fonte em uma linguagem Mgol, realiza a fase de análise, síntese e semântica gerando um arquivo objeto em linguagem C. O arquivo final deverá ser compilável em compilador C, ou seja, o código gerado deverá estar completo para compilação e execução.
Este repositório tem como objetivo o desenvolvimento de um compilador que aceitará como entrada um arquivo fonte escrito na linguagem de programação Mgol (uma linguagem criada especificamente para este estudo de caso). O compilador passará pelas etapas de análise e síntese, produzindo como saída um arquivo objeto na linguagem C. Esse arquivo resultante estará pronto para ser compilado e executado em um compilador C, ou seja, o código gerado será completo e funcional para fins de compilação e execução.
Os módulos a serem implementados contemplam:
Esta etapa visa o desenvolvimento de um analisador léxico e da tabela de símbolos. Resultando na leitura do arquivo fonte e produção de tokens para a análise léxica e tabela de símbolos.
Esta etapa visa o desenvolvimento do analisador sintático ascendente SLR(1) para verificação de sintaxe com dados obtidos do analisador léxico e também a recuperação do erro com reestabelecimento da análise. Resultando na obtenção dos tokens, produção da árvore sintática através do modelo de análise sintática e implementação de rotina de tratamento e recuperação do erro sintático.
Esta etapa visa o desenvolvimento do analisador semântico e geração de código final a partir do método tradução dirigida pela sintaxe. Resultando na realização de análise semântica e produção de código final em conjunto com a análise sintática.
!
Ao final de todos teremos como sistema e resultado do estudo de caso, um pequeno compilador que compilará o programa fonte (linguagem Mgol), Fonte.ALG (a) em PROGRAMA.C (b).
| Definições | Significado |
|---|---|
| Dígitos | 0,1,2,3,4,5,6,7,8,9 |
| Letras (maiúsculas e minúsculas) | A, B, ...,Z ,a ,..., z |
| Demais caracteres | ,(vírgula), ;(ponto e vírgula), :(dois pontos), .(ponto), !, ?, , * ,+ ,- , / , (, ), {, }, [,], <, >, =‘(aspas simples), “ (aspas duplas), _(underline) |
| Token | Significado |
|---|---|
| inicio | Delimita o início do programa |
| varinicio | Delimita o início da declaração de variáveis |
| varfim | Delimita o fim da declaração de variáveis |
| escreva | Imprime na saída padrão |
| leia | Lê da saída padrão |
| se | Estrutura condicional |
| entao | Elemento de estrutura condicional |
| fimse | Elemento de estrutura condicional |
| repita | Elemento de estrutura de repetição |
| fimrepita | Elemento de estrutura de repetição |
| fim | Delimita o fim do programa |
| inteiro | Tipo de dado inteiro |
| literal | Tipo de dado literal |
| real | Tipo de dado real |
| Token | Significado | Características/Padrão |
|---|---|---|
| Num | Constante numérica | D+ (. D + )? ((E|e)(+|−)? D + ) ? |
| Lit | Constante literal | ".*" |
| id | Identificador | L(L|D|_)∗ |
| Comentário | Texto entre { } | {.*} |
| EOF | Final de Arquivo | Flag da linguagem (EOF é um único símbolo) |
| OPR | Operadores relacionais | <, >, >= , <= , =, <> |
| RCB | Atribuição | <- |
| OPM | Operadores aritméticos | + , -, *, / |
| AB_P | Abre Parênteses | ( |
| FC_P | Fecha Parênteses | ) |
| PT_V | Ponto e vírgula | ; |
| ERRO | Qualquer símbolo diferente de qualquer palavra definida. | |
| Vir | Vírgula | , |
| Ignorar | Tabulação, Espaço, Salto de Linha | Reconhecidos e ignorados. |


