Compiladores

T2 - Analisador de expressão com tabela de símbolos

Última ocorrência: 2023/02 em Universidade Lasalle Canoas

Objetivo

Entender o processo de definição de uma linguagem de programação simples e a implementação utilizando tabelas de símbolos.

Tarefas

Dada a gramática livre de contexto:

\(\begin{align} & E \rightarrow TE^\prime \\ & E^\prime \rightarrow E \\ & E^\prime \rightarrow \varepsilon \\ & T \rightarrow FT^\prime \\ & T^\prime \rightarrow + E \\ & T^\prime \rightarrow - E \\ & T^\prime \rightarrow \varepsilon \\ & F \rightarrow VF^\prime \\ & F^\prime \rightarrow * E \\ & F^\prime \rightarrow / E \\ & F^\prime \rightarrow \varepsilon \\ & V \rightarrow num \\ & num \rightarrow [0-9][0-9]^{*} \\ \end{align}\)

onde $+$ representa a operação de soma, $-$ representa a operação de subtração, $*$ representa a operação de multiplicação e $/$ representa a operação de divisão; e que $[a-z]$ representa um conjunto de caracters ASCII iniciado em $a$ e terminado em $z$, e que $a^{*}$ representa zero ou mais repetições do caracter $a$.

Alterar a gramática para que seja possível realizar operações de potenciação com o operador $\^$, por exemplo $2\^5 = 32$, e operações de atribuição de valores a identificadores, onde os identificadores podem ser definidos como $id \rightarrow [_a-zA-Z][_a-zA-Z0-9]^{*}$, e que esses identificadores possam ser utilizados nas expressões, por exemplo $a = 2 * 3 + 4\ /\ b$.

Altere a implementação do trabalho T1 para que o avaliador de expressões utilize a nova gramática. O novo avaliador deve aceitar múltiplas expressões, sendo que cada expressão deve ser definida em uma linha, por exemplo:

b = 18 * 2

Artefatos

Deve ser entregue apenas o link para um repositório público no Github ou outro serviço de armazenamento de repositórios Git.

O repositório deverá conter a implementação do trabalho, e um arquivo README (sugere-se o formato Markdown e um arquivo README.md) contendo instruções para a execução do sistema.

A nova gramática deve estar descrita no arquivo README do repositório.

Caso o trabalho inclua questões a serem respondidas, essas questões devem ser respondidas no README.

Observações

Recursos para a elaboração deste trabalho