Entender o processo de definição de uma linguagem de programação simples e a implementação utilizando tabelas de símbolos.
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
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.