VI.6 –CATEGORIAS DE IDENTIFICADORES DA LSI131 01 – ID-PROGRAMA 02 – ID-CONSTANTE 03 – ID-VARIÁVEL 04 – ID-MÉTODO 05 – ID-PARÂMETRO • CATEGORIAS DE ID’s E SEUS ATRIBUTOS 01 – ID-PROGRAMA nome, categoria 02 – ID-CONSTANTE nome, categoria, nível tipo (pré-definido) e valor 03 – ID-VARIÁVEL nome, categoria, nível, deslocamento sub-categoria (tipo): pré-definido : tipo (inteiro, real caracter ou booleano) cadeia : tamanho vetor : tamanho (número de elementos) tipo dos elementos 04 – ID-MÉTODO nome, categoria, nível, endereço da 1a instrução número de parâmetros, ponteiro para lista de parâmetros tipo do resultado (pré-definido ou nulo) 05 – ID-PARÂMETRO nome, categoria, nível, deslocamento (relativo ao procedimento), mecanismo de passagem (valor ou referência), tipo (pré-definido) 1 VI.7 - REGRAS SEMÂNTICAS DA LSI131 • Declaração e Uso de Identificadores 01 - O identificador do programa não poderá ter nenhum outro uso. 02 – Todos os identificadores usados no programa devem ser previamente declarados. 03 - Identificadores não podem ser declarados mais de uma vez no mesmo nível (independentemente de sua categoria). 04 - Os identificadores só terão validade no escopo (nível) onde foram declarados e nos escopos (níveis) internos a ele. 05 – Identificadores declarados com valor inicial, devem ser considerados como constantes; 06 – Vetores e cadeias não podem ter valor inicial; 07 – A constante usada na inicialização de um identificador deve ser do mesmo tipo da declaração; 08 - Identificadores devem ser usados de acordo com a categoria na qual foram declarados, ex.: • id de variável só pode ser usado em contextos que aceitem variáveis, • Id de constante não pode ser usado no lado esquerdo de uma atribuição nem em comandos de leitura • Id de método sem tipo só pode ser usado em contextos que aceitem comandos • Id de método com tipo só pode ser usado em contextos que aceitem uma expressão 09 - Variáveis do tipo Vetor só podem ser usados de forma indexada e o índice deve ser uma expressão inteira; 10 - O tamanho de um vetor (número de elementos) deve ser estabelecido na declaração, por uma constante de tipo inteiro; 11 - Vetores não podem ser do tipo cadeia de caracteres 2 12 – Somente variáveis do tipo vetor e do tipo cadeia podem ser indexadas; no caso de cadeia, com o objetivo de acessar um caracter em particular; 13 - Variáveis do tipo Cadeia podem ser usadas de forma indexada ou não; se indexada, o tipo do índice deve ser inteiro; 14 – Identificadores de parâmetros podem ser usados em todos os contextos onde for válido o uso de variáveis. 15 – Parâmetros devem ser de tipo pré-definido. 16 – Constantes literais de tamanho 1, devem ser consideradas como sendo do tipo caracter; 17 – Referências a uma posição (um elemento) de uma variável cadeia, devem ser consideradas do tipo caracter; 18 - A constante usada na declaração de uma cadeia, deve ser inteira, positiva e menor que 256. COMANDOS SE e ENQUANTO 19 - A expressão de controle deve ser booleana ou inteira (neste caso, se = 0 considera-se FALSO, senão VERDADEIRO). LEIA / ESCREVA 20 - Os identificadores a serem lidos devem ser das categorias variável ou parâmetro e devem ser de tipo pré-definido (exceto booleano) ou cadeia. 21 – As expressões a serem impressas deverão ser de tipo pré-definido (exceto booleano) ou cadeia (literal). CHAMADA DE MÉTODO 22 - Deve haver correspondência em número e tipo (salvo exceções previstas) entre parâmetros atuais (reais) e formais. 23 - Parâmetros formais por referência devem ter um id (da categoria variável ou parâmetro) como parâmetro atual correspondente. 3 24 - Id de métodos sem tipo (procedimentos) só podem ser usados como comandos. 25 – Métodos sem tipo (procedimentos) não devem possuir comando de retorno (cláusula retorne). 26 - Id de métodos com tipo (funções) só podem ser usados em expressões. 27 – Todo método com tipo (função) deve possuir pelo menos um comando de retorno (cláusula retorne). 28 – O tipo da expressão usada na cláusula de retorno deve ser pré-definido e compatível com o tipo do método. COMANDO DE ATRIBUIÇÃO 29 – O id do lado esquerdo deve ser uma variável (simples ou indexada) ou um parâmetro. 30 - O tipo da expressão deve ser igual ao tipo do id usado no lado esquerdo da atribuição. EXCEÇÕES: REAL aceita INTEIRO CADEIA aceita CARACTER EXPRESSÕES OPERADORES RELACIONAIS 31 - Os operandos envolvidos devem ser do mesmo tipo (exceto real/int. e cadeia/caracter). OPERADORES ARITMÉTICOS 32 - Podem ser aplicados a operandos inteiros e reais (qualquer combinação). 33 – Expressões numéricas mistas (envolvendo inteiros e reais) resultarão em tipo real. 34 – O uso do operador “/” entre inteiros resultará em tipo real. 35 – O operador “div” só pode ser usado na divisão de inteiros e o tipo resultante será do tipo inteiro. 4 36 – O operador unário “-“ não pode ser usado consecutivamente. OPERADORES LÓGICOS 37 - Os operandos envolvidos devem ser booleanos. 38 – O operador “não” não pode ser usado consecutivamente. OPERANDOS CONSTANTES 39 - Literais de tamanho 1 devem ser considerados constantes do tipo caracter. 40 – Falso é menor que Verdadeiro. OPERANDOS VARIÁVEIS 41 - Devem ser de tipo pré-definido, cadeia ou elemento de um vetor. 42 – Identificadores da categoria “parâmetro” devem ser vistos como variáveis. 43 - Variáveis do tipo vetor devem ser referenciadas de forma indexada e a expressão usada como índice deve ser do tipo inteiro. Para verificação de tipo do operando, vale o tipo dos elementos (sempre um tipo pré-definido). 44 - Variáveis do tipo CADEIA, quando indexadas, resultam no tipo caracter. O índice deve ser uma expressão do tipo inteiro. OPERANDOS DESIGNADORES DE MÉTODOS COM TIPO 45 - O TIPO do RESULTADO do método deve ser válido (compatível) no contexto em que o método (função) está sendo chamado. AÇÕES SEMÂNTICAS • Implementam as verificações necessárias para a validação semântica do programa fonte; ou seja, verificam se as regras semânticas foram observadas. • Montam os descritores (tabela de símbolos) de todos os identificadores declarados, visando: o Verificação das regras semânticas o Geração de Código Intermediário • Montam as tabelas de constantes numéricas e literais a serem usadas na Geração de Código Intermediário 5