-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathModificações Necessárias.txt
executable file
·21 lines (15 loc) · 2.23 KB
/
Modificações Necessárias.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-> Alterar a tabela hash
-> criar o arquivo semantic.h e .c com as regras definidas na especificação:
que são..
Definições Semânticas:
• Há três tipos diferentes de identificadores:
escalares, vetores, funções
• Há cinco tipos de dados para declarações:
byte, short, long, float, double
• Há três tipos de literais:
inteiros, caracteres, strings
• Literais string só devem ser usados no comando print. Literais inteiros e em ponto flutuante são intercambiáveis, e podem aparecer em quaisquer expressões aritméticas, e serem atribuídos a dados numéricos (byte, short, long, float, double). Não é necessário verificar o tamanho (long ou short) nem a precisão (dados inteiros ou em ponto flutuante) nas expressões e atribuições - isso não deve gerar nem erro nem warning. No acesso a vetor, entretanto, é necessário garantir que o índice seja um valor inteiro. Expressões que potencialmente resultem em valores flutuantes, não podem ser usadas como índice de vetor, e devem gerar erro semântico.
• Os tipos de dados inteiros e flutuante podem ser usados e convertidos livremente em expressões aritméticas, ou seja, são compatíveis, podendo ser também usados como argumentos para parâmetros definidos assim. O resultado de cada operação sempre terá o tipo de dado mais amplo e preciso. Uma soma entre um long e um float, retorna, portanto, um flutuante.
• Nas expressões aritméticas, existe portanto apenas uma verificação necessária sobre os tipos de dados, que é entre tipos numéricos versus booleanos, que apenas são gerados pelos operadores booleanos
• Existe a possibilidade da identificação ser feita pelo tipo do nodo filho da árvore (tipo do operador) ou pelo tipo de dado (dataType) do identificador, se o nodo filho é um identificador (AST_SYMBOL). As operações booleanas podem ser verificadas somente no nodo local da árvore, em relação aos seus filhos.
• Para garantir que os índices de vetores sejam valores inteiros e não flutuantes, entretanto, é necessário que a árvore seja previamente percorrida das folhas até a raiz, anotando o tipo de dado correto nos nodos. Isso porque um operador + pode resultar tanto em um escalar inteiro como em um escalar flutuante, e isso só é possível descobrir e verificar recursivamente à partir das folhas.