Compiladores

T1 - Analisador recursivo descendente

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

Objetivo

Compreender as estruturas básicas de implementação de um parser.

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

Implemente um avaliador de expressões aritméticas utilizando a gramática apresentada. Para implementar o avaliador, utilize um analisador sintático recursivo descendente para realizar a análise sintática da expressão.

Responda também às seguintes questões:

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.

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