Quadro Comparativo: Propostas de Avaliação Presencial Offline
Este documento detalha propostas de alterações estratégicas a serem solicitadas aos alunos em ambiente de laboratório (offline, sem IA e internet), com o objetivo de validar a real autoria e compreensão do compilador desenvolvido.
| Proposta | Alterações Mínimas Esperadas | Nível de Dificuldade | Por que é uma proposta inteligente / estratégica? |
|---|---|---|---|
1. Comando repeat ... until |
Léx/Sintático: Tokens repeat/until; nova regra de comando.AST: Nó RepeatCommand.Semântico: Validar expressão booleana. JVM (ASM): Inserir Label antes do bloco e instrução condicional voltando ao label. |
Média | Muito Inteligente (Equilibrada). É a escolha mais segura e clássica. Exige mexer em todas as camadas, mas o conceito é fácil de entender. Prova que o aluno entende o controle de fluxo da JVM (ASM Labels) e como conectar a regra do ANTLR até a geração final do Bytecode. |
2. Atribuição Composta (+=, -=) |
Léx/Sintático: Operadores +=, -=; regra de atribuição.AST: Nó CompoundAssign.Semântico: Validar se variável e expressão são números. JVM (ASM): iload (var), gerar expressão, iadd, istore (var). |
Baixa/Média | Inteligente focada na JVM. Diferente de x := a, o aluno precisa perceber que, na máquina de pilha, ele não pode só salvar (istore); ele precisa secretamente carregar o valor antigo na pilha (iload), somar, e depois salvar. Se só usou IA, ele tenderá a esquecer o iload. |
3. Laço loop <N> times do |
Léx/Sintático: Tokens loop, times, do; nova regra.AST: Nó LoopTimesCommand.Semântico: Expressão <N> deve ser Inteiro.JVM (ASM): Exige criar e gerenciar um índice contador “invisível”. |
Alta | Altamente Estratégica. Como a sintaxe não fornece uma variável contadora (i), o aluno terá que descobrir como usar a pilha da JVM para gerenciar o loop, duplicando o valor no topo (instrução dup) ou alocando uma variável temporária “escondida” na memória. Exige domínio avançado de bytecode. |
4. Operador Ternário (cond ? a : b) |
Léx/Sintático: Regra de expressão com ? e :.AST: Nó TernaryExpression.Semântico: Validar cond==bool, e que a e b tenham o mesmo tipo.JVM (ASM): Labels de desvio no meio de uma expressão. |
Muito Alta | Brilhante, mas arriscada. Tratar controle de fluxo dentro de expressões na pilha da JVM é extremamente complexo. Se o aluno não gerenciar os desvios perfeitamente, a JVM lança erro de VerifyError e quebra o executável. Excelente para filtrar alunos muito avançados, mas pode ter alta taxa de falha. |
5. Função nativa readln(var) |
Léx/Sintático: Palavra readln, regra ou func call.AST: Comando de leitura. Semântico: Validar se a variável existe. JVM (ASM): Fazer chamada ao Scanner ou System.in em Java puro. |
Alta (se offline) | Foco em Interoperabilidade. O aluno precisa interligar a linguagem dele com a do Java. O problema é que, estando offline, lembrar as assinaturas exatas internas do Java para bytecode (ex: Ljava/util/Scanner;) de cabeça é extremamente difícil. Não recomendada para formato offline. |
Recomendações de Execução
- A Prova Padrão: Recomenda-se utilizar a Proposta 1 (
repeat...until). Ela avalia o fluxo completo (Léxico > Sintático > AST > Semântico > ASM) e seu conceito é simples o suficiente para ser feito no laboratório no tempo de aula. - Distribuição para Prevenir Plágio: É possível entregar a Proposta 1 para metade da turma e a Proposta 2 (
+=) para a outra metade, garantindo que vizinhos de laboratório não consigam copiar a solução. - Avaliação Prática: A melhor forma de validar a prova é compilar e rodar um script da linguagem Minipascal usando a nova funcionalidade implementada pelo aluno e verificar a saída de compilação sem falhas no ClassLoader/Verifier do Java.