Published

26/06/2026

Modified

24/06/2026

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: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: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: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: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

  1. 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.
  2. 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.
  3. 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.
Back to top