Prévia do material em texto
Type checking Análise Semântica ● Verifica se o programa "faz sentido" ○ Variáveis/funções são definidas corretamente ○ Expressões respeitam o sistema de tipos ○ etc. etc. ● Última chance para o compilador descartar programas inválidos Type Checking //using java semantics int a = 10 float b = 20.5; float c = a + b; int d = a + b; Type Checking //using java semantics int a = 10 float b = 20.5; //int is promoted to a float float c = a + b; //OK! int d = a + b; Type Checking //using java semantics int a = 10 float b = 20.5; float c = a + b; //OK! //float cannot be "downgraded" to //int without losing data! int d = a + b; //ERROR! Exercícios ● O terceiro exercício usará a gramática neste link como base ● A gramática descreve uma linguagem bastante simples similar à C. int g = 9; // a global variable int fact(int x) { // factorial function if x==0 then return 1; return x * fact(x-1); } Exercício 1 ● Adicione suporte na gramática para: ○ Tipos booleanos ○ Tipos String ○ Arrays ○ Operadores de comparação (<, >, !=, <=, >=) ○ Expressões usando os tipos acima (&&, ||, +) ● Ex: boolean a = true; int[] b = new int[10]; String foo(boolean x, String b) { if x==0 || x then return "miss"; return "result: " + b + x; } Exercício 2 ● Implemente um type-checker para a linguagem definida pela gramática extendida no exercício anterior ● Ao detectar uma violação, o type-checker deve imprimir uma mensagem de erro informando o local da ocorrência (linha/coluna), e continuar a análise (use o tipo da variável declarada caso necessário). Exercício 2 - ex: > int x = 10; > boolean y = (10 < x) + x; > int z = false; $ error at line 2, pos 13: operator '+' is undefined for types: boolean, int. $ error at line 3, pos 8: cannot convert from boolean to int Exercício 2 - obs: ● Use as mesmas regras semânticas de Java: ○ int + float => float ○ String + int => String ○ etc. (procurem o resto) Exercício - entrega: ● Enviem um email para mab@cin ○ assunto = "[if688] atividade da aula prática 3" ○ até a próxima terça (16/07) ● O anexo deve conter o projeto do eclipse com: ○ gramática utilizada na geração do visitor/parser/lexer ○ um arquivo README na raiz contendo uma breve explicação do que foi feito e como rodar o projeto ● Grupos de até 4 pessoas