Erros de compilao Lxicos Sintticos Semnticos Anlise lxica

  • Slides: 11
Download presentation
Erros de compilação �Léxicos �Sintáticos �Semânticos

Erros de compilação �Léxicos �Sintáticos �Semânticos

Análise léxica � Objetivo: identificar as principais seqüências de caracteres que constituem unidades léxicas

Análise léxica � Objetivo: identificar as principais seqüências de caracteres que constituem unidades léxicas (tokens) � Funcionamento: � Lê, caractere a caractere, o texto fonte, verificando se os caracteres lidos pertencem ao alfabeto da linguagem, identificando tokens e desprezando comentários e brancos desnecessários. � Palavras reservadas da linguagem, delimitadores, identificadores etc.

Vamos causar um erro léxico � No exemplo abaixo, vamos escrever um caractere estranho

Vamos causar um erro léxico � No exemplo abaixo, vamos escrever um caractere estranho “@”no meio do código #include <stdio. h> int main(int argc, char *argv[]) { @ printf("Hello World!n"); return 0; } � Mensagem de erro stray ‘@’ in program

Vamos causar um erro léxico � No exemplo abaixo, vamos escrever de modo errado

Vamos causar um erro léxico � No exemplo abaixo, vamos escrever de modo errado o identificador mensagem. O # não pode fazer parte do nome do identificador. #include <stdio. h> int main(int argc, char *argv[]) { char mensagem#; printf("Hello World!n"); return 0; } � Mensagem de erro 4|error: syntax error at '#' token| Build finished: 1 errors, 0 warnings

Análise sintática � Objetivo: verificar se a estrutura gramatical do programa está correta (isto

Análise sintática � Objetivo: verificar se a estrutura gramatical do programa está correta (isto é: se a estrutura foi usada usando as regras da linguagem);

Vamos causar um erro sintático � No exemplo abaixo, vamos retirar o nome do

Vamos causar um erro sintático � No exemplo abaixo, vamos retirar o nome do módulo depois da diretiva #include int main(int argc, char *argv[]) { printf("Hello World!n"); return 0; } � Mensagem de erro 1|#include expects "FILENAME" or <FILENAME> Build finished: 1 errors, 0 warnings

Vamos causar um erro sintático � No exemplo abaixo, vamos retirar o fecha chaves

Vamos causar um erro sintático � No exemplo abaixo, vamos retirar o fecha chaves da última linha � Mensagem 1. #include <stdio. h> 2. s 3. int main(int argc, char *argv[]) 4. { 5. printf("Hello World!n"); 6. return 0; 7. de erro s 7|error: syntax error at end of input Build finished: 1 errors, 0 warnings

Análise semântica � Objetivo: verificar se as estruturas do programa irão fazer sentido durante

Análise semântica � Objetivo: verificar se as estruturas do programa irão fazer sentido durante a execução � Ex. : se um identificador declarado como variável é usado como tal, se existe compatibilidade entre operandos e operadores em expressões. . .

Análise semântica: exemplo de erro 1. 2. #include <stdio. h> #include <stdlib. h> 3.

Análise semântica: exemplo de erro 1. 2. #include <stdio. h> #include <stdlib. h> 3. 4. 5. 6. 7. 8. 9. 10. #define ano 2010 #define curso "Bacharelado em Sistemas de Informacao" int main () { ano = 2011; printf("Ano: %dn", ano); printf("Curso: %sn", curso); system("PAUSE"); return 0; 1. 2. 3. } 8 C: TestesConstantes. c invalid lvalue in assignment O erro ocorre porque ano é uma constante e não pode ter o seu valor mudado ao longo do programa.

Indentação � Consiste na inserção de espaços, parágrafos etc. em um código de linguagem

Indentação � Consiste na inserção de espaços, parágrafos etc. em um código de linguagem de programação (Dicionário Aulete)

Indentação � Objetivos: � Dar legibilidade ao código; � Facilitar a compreensão do código

Indentação � Objetivos: � Dar legibilidade ao código; � Facilitar a compreensão do código por outras pessoas; Código sem indentação