Repositório referente a atividade [RPNStacker Adhoc] da disciplina de Compiladores 2021.2 do Centro de Infórmatica da Universidade Federal de Pernambuco (CIn - UFPE). Cada etapa da atividade foi feita separadamente e os resultados para cada uma delas podem ser vistos de acordo as tags criadas neste repositório. Assim, o acompanhamento das entregas pode ser analisado de acordo com:
- Task 01: Primeira entrega da atividade contendo apenas um código simples em Java contendo a implementação da RPNStacker usando uma pilha como estrutura de dados;
- Task 02: Segunda entrega da atividade contendo a inserção do código em um Java project e realizada a implementação da feature de scanning;
- Task 03: Terceira entrega da atividade contendo o projeto Postfix (disponibilizado pelo professor com a base para a atividade) foi atualizado para dar suporte ao uso de variáveis/ids. Nessa versão, os projetos das Tasks 01 e 02 foram deletados e foi mantido apenas o projeto Postfix.
- Rever a Aula 07 sobre notação pósfixa [Reverse Polish Notation - RPN];
- Implementar uma linguagem RPNStacker em Java usando uma pilha como estrutura de dados;
- Desenvovler um programa que lê um arquivo com a expressão em RPN e avalia a mesma.
4
8
+
3
*
Saída: 36
- Rever a Aula 11 sobre Introdução à Análise Léxica [scanning]
- Evoluir o projeto da Task 01 para implementar uma feature de scanning:
- No geral, nosso programa lê um arquivo com a expressao em RPN e devolve a expressão avaliada;
- A feature de scanning deve retornar uma lista de tokens;
- A partir dessa lista de tokens que é realizada a interpretacao das expressões com uma pilha;
- A feature de scanning deve retornar um erro caso não reconheça um "num" [número] ou "op" [operador].
10
10
+
Saída: 20
A Lista de Tokens Reconhecida [Caso a Imprima]:
Token [type=NUM, lexeme=10]
Token [type=NUM, lexeme=10]
Token [type=PLUS, lexeme=+]
10
s
+
Error: Unexpected character: s
A Gramática da RPN para as Tasks 02 e 03 era a seguinte:
Expr = num
| Expr Expr op
Onde:
- op = [+-/*]
- num = [0-9]+
Agora, para a Task 03, a linguagem dará suporte para variáveis (IDs), por conseguinte, temos a seguinte mudança gramatical:
Expr = num
| id
| Expr Expr op
Onde:
- op = [+-/*]
- num = [0-9]+
- id = [_a-zA-Z][_a-zA-Z0-9]*
Assim, baseado na gramática acima [incluindo ID expr], o projeto Postfix (disponibilizado pelo professor com a base para a atividade) foi atualizado para dar suporte ao uso de variáveis/ids.
10
10
+
Saída: 20
10
y
+
Considerando que o ID y
foi dado como input e seu valor seja 10 (y = 10).
Saída: 20
10
w
+
Considerando que o ID w
não foi dado como input e, portanto, não estava no mapeamento.
Saída: [Interpreter] Error: 'w' cannot be resolved!