Compreender as estruturas básicas de implementação de um parser.
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:
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.