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. |