O objetivo desta tarefa é implementar um frontend. Mais precisamente, o objetivo é implementar as três fases de análise e um motor de execução.
- Implemente o analisador léxico, utilizando a ferramenta flex.
- Implemente o analisador sintático, utilizando a ferramenta bison.
- Implemente o analisador semântico.
- Implemente o motor de execução.
A linguagem é composta por:
- palavras reservadas: print
- identificadores: nome de variáveis
- números inteiros
- números reais
- símbolos: ( ) + - * / ^ , =1
Portanto o programa é composto por uma lista contendo expressões matemáticas e atribuições.
Exemplo 1:
a = (4-6) * 7 ^ 8
print a
Exemplo 2:
a = 10
b = 10,5
c = a + b
print c
Exemplo 3:
print 5*(5+7)
Exemplo 4:
5
Exemplo 5:
7 + 9
Todos estes exemplos são válidos.
- Sua gramática deve considerar precedência de operadores.
- Seu motor de execução deve processar a árvore sintática abstrata.
- A saída da sua implementação é o resultado do processamento da árvore.
- Seu frontend deve emitir erros de forma precisa, indicando linha e coluna além da descrição do erro.
- A entrada de seu programa é um arquivo.
./calculator -i <caminho_codigo> -d -a <arquivo_arvore>
Observação: a gramática atualmente não suporta linhas em branco entre as instruções