Prévia do material em texto
Análise Sintática – Parte 1
COMPILADORES
• Introdução
• Princípios Fundamentais
• Papel da Análise Sintática
• Símbolos Terminais e Não-Terminais
• Produções e Regras Gramaticais
• Exemplos
ROTEIRO
● A análise sintática e as gramáticas formais
desempenham um papel essencial na
compreensão da estrutura e da sintaxe das
linguagens de programação.
● Elas são parte integrante do processo de
compilação, que transforma o código-fonte
escrito em linguagem de alto nível em código de
máquina executável.
INTRODUÇÃO
● A análise sintática lida com a estrutura hierárquica
de um programa e verifica se ele segue as regras
gramaticais da linguagem.
● As gramáticas formais são conjuntos de regras que
descrevem a estrutura sintática de uma linguagem.
● Essas regras são fundamentais para o
reconhecimento de padrões em programas de
computador.
PRINCÍPIOS FUNDAMENTAIS
● A análise sintática desempenha um papel crucial
na fase de análise do processo de compilação
● Ela recebe a saída da análise léxica (tokens) e
verifica se a sequência de tokens segue a
gramática da linguagem
● Caso contrário, identifica erros de sintaxe no
código-fonte.
PAPEL DA ANÁLISE SINTÁTICA
● As gramáticas formais distinguem entre:
● Símbolos terminais: tokens reais, como
palavras-chave e números
● Símbolos não-terminais: representações
abstratas de estruturas sintáticas, como
expressões ou declarações.
SÍMBOLOS TERMINAIS E NÃO-TERMINAIS
● As gramáticas formais distinguem entre:
● Os símbolos terminais, que representam os
elementos concretos do código
● palavras-chave, identificadores, números e
operadores
● Os símbolos não-terminais, que são partes da
gramática que representam estruturas mais
complexas
● declarações, comandos e expressões
● Durante a análise sintática, os símbolos terminais
são combinados de acordo com as regras dos
símbolos não-terminais para construir a árvore
sintática que representa a estrutura do programa.
SÍMBOLOS TERMINAIS E NÃO-TERMINAIS
● As gramáticas formais são compostas por
produções ou regras gramaticais que definem
como os símbolos podem ser combinados para
formar expressões válidas na linguagem
● Essas regras são expressas usando notação
como BNF (Backus-Naur Form) ou EBNF
(Extended Backus-Naur Form)
PRODUÇÕES E REGRAS GRAMATICAIS
● Um exemplo simples de gramática formal para
expressões aritméticas pode ser:
expressao -> expressao '+' termo
| expressao '-' termo
| termo
termo -> termo '*' fator
| termo '/' fator
| fator
fator -> '(' expressao ')'
| numero
● Esta gramática descreve como as expressões
aritméticas podem ser formadas a partir de números,
operadores e parênteses.
EXEMPLO DE GRAMÁTICA FORMAL
Considere o seguinte código
#include
int soma(int a, int b) {
return a + b;
}
int main() {
int x = 5;
int y = 7;
int resultado = soma(x, y);
printf("A soma de x e y é: %d\n", resultado);
return 0;
}
EXEMPLO EM CÓDIGO C
● Símbolos Não-Terminais
1.Programa
2.Inclusão de Biblioteca
3.Função Principal
4.Tipo de Retorno
5.Bloco de Comandos
6.Comandos
7.Comando
8.Declaração
9.Tipo
10.Identificador
11.Parâmetros
12.Parâmetro
13.Retorno
14.Expressao
15.Chamada de Função
16.Argumentos
17.String
EXEMPLO EM CÓDIGO C
● Símbolos Terminais
1.#include
2. int
3.soma
4.main
5. ()
6.{
7.}
8.return
9. ;
10.=
11.,
12.+
13."A soma de x e y é: %d\n"
14.0
15.x
16.5
17.y
18.7
19.resultado
EXEMPLO EM CÓDIGO C
1.Compiladores: princípios, técnicas e ferramentas
2.Compiladores: princípios e práticas
3.https://www.geeksforgeeks.org/introduction-to-syntax-analysis-in-compiler-
design/?ref=lbp
REFERÊNCIAS
https://plataforma.bvirtual.com.br/Acervo/Publicacao/280
https://integrada.minhabiblioteca.com.br/reader/books/9788522128532/pageid/0
https://www.geeksforgeeks.org/introduction-to-syntax-analysis-in-compiler-design/?ref=lbp