Buscar

sintaxe_linguagens_programacao

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Universidade Federal do Ceará 
Campus de Quixadá 
 
 
 Linguagens de Programação: 
Sintaxe e Semântica* 
 
 
 
 
 
 
 
 
 
 
 
 
Flávio R. C. Sousa 
 flaviosousa@ufc.br 
@flaviosousa 
www.es.ufc.br/~flavio 
 
 
* Material: George Darmiton da Cunha Cavalcanti 
 Sintaxe e Semântica 
 Provêm a definição da linguagem 
 Sintaxe 
 A forma ou estrutura das expressões, das instruções e 
das unidades de programas 
 Estrutura formada de acordo com Regras Gramaticais da 
Linguagem. (Estruturas Sintáticas) 
 Exemplo (condição diferente) 
 Pascal ( <> ) ; C = ( != ) ; Ada ( /= ) 
 
 Semântica 
 O significado das expressões, das instruções e das 
unidades de programas 
 Identificação das sequências de símbolos validos que 
constituem estruturas sintáticas 
 Sintaxe e Semântica 
 Exemplo: comando if na linguagem C 
 Sintaxe 
 if (<expr>) <instrução> 
 
 Semântica 
 Se o valor da expressão for verdadeiro, a instrução 
será executada 
Descrevendo a sintaxe: terminologia 
 Uma linguagem é uma conjunto de sentenças 
 Uma sentença é uma cadeia de tokens 
 Um lexema é a unidade sintática de mais baixo 
nível de uma linguagem 
 Exemplos: 
 *, sum, begin, if 
 
 Um token é uma categoria dos lexemas 
 Sequência de caracteres sobre um alfabeto 
 Exemplo: 
 identificador, op_mult 
Descrevendo a sintaxe: terminologia 
Descrevendo a sintaxe: terminologia 
 Exemplo (C) 
 Resultado = 45 + Cont * 5; 
Lexema Token 
resultado identificador 
= sinal_igual 
45 int_literal 
+ op_soma 
Cont Identificador 
* op_mult 
5 int_literal 
; ponto_e_virgula 
Definição formal de linguagens 
 Reconhecedores de linguagens 
 Dispositivo que recebe um token como entrada e verifica 
se o mesmo pertence a linguagem 
 Exemplo: 
 Análise Sintática (parte de um compilador) 
 
 Geradores de linguagens 
 Dispositivo que gera sentenças da linguagem 
 Determinando se a sintaxe de uma sentença em particular 
está correta 
 Através de comparações com a estrutura da linguagem 
gerada 
 If <condição = true> then <instrução> 
Métodos formais: descrever a sintaxe 
 Forma de Backus-Naur (BNF) 
 Método mais usado para descrever a sintaxe das 
linguagens de programação 
 Uma metalinguagem é usada para descrever 
outras linguagens 
 
 Extended Backus Naur Form (EBNF) 
 Por apresentar algumas inconveniências a BNF 
foi estendida 
 Aumenta Legibilidade e Capacidade escrita da 
BNF 
Gramáticas Livres de Contexto 
 Gramáticas Livres de Contexto 
 Desenvolvida por Noam Chomsky nos meados 
da década de 1950 
 Define uma classe de linguagens chamadas de 
linguagens livres de contexto 
 Objetivo 
 Descrever a sintaxe das linguagens naturais 
 São gramáticas onde as regras de produção são 
definidas de forma mais livre 
Backus-Naur Form (BNF) 
 Backus-Naur Form (1959) 
 Inventada por John Backus para descrever o 
Algol 58 (International Algorithmic Language) 
 BNF é equivalente a gramáticas livre de 
contexto 
 BNF é uma metalinguagem usada para 
descrever outras linguagens 
 Em BNF, abstrações são usadas para 
representar classes de estruturas sintáticas 
 Agem como variáveis sintáticas (também chamadas 
de símbolos não-terminais) 
BNF: Fundamentos 
 Terminais: lexemas e tokens 
 Não-terminais: BNF abstrações 
 Atual como variáveis 
 Gramática 
 Descreve linguagem através de coleção não vazia 
de regras de produção 
 Uma regra de produção possui 
 Lado esquerdo (LHS)  lado direito (RHS) 
Regras BNF 
 Uma regra possui um lado esquerdo (LHS) e 
um lado direito (RHS), e consiste de símbolos 
terminais e não-terminais 
 LHS só pode ter UM símbolo terminal ou não-
terminal 
 RHS, em geral, tem combinações deles 
 O símbolo | em RHS significa representação 
alternativa 
Regras BNF 
Listas Sintáticas 
 Listas sintáticas são descritas usando 
recursão 
<ident_list> -> ident 
 | ident , <ident_list> 
 
 Derivação 
 Aplicação de regras repetidas vezes, 
 começando com um símbolo inicial 
 finalizando com uma sentença (símbolos terminais) 
Gramática para uma linguagem 
 <program>  <stmts> 
 <stmts>  <stmt> | <stmt> ; <stmts> 
 <stmt>  <var> = <expr> 
 <var>  a | b | c | d 
 <expr>  <term> + <term> | <term> - <term> 
 <term>  <var> | const 
Exemplo gramática para uma linguagem 
<program> => <stmts> => <stmt> 
 => <var> = <expr> 
 => a = <expr> 
 => a = <term> + <term> 
 => a = <var> + <term> 
 => a = b + <term> 
 => a = b + const 
Árvore de Análise (Parse Tree) 
A = B * (A + C) 
Ambigüidade em gramáticas 
 Uma gramática é ambígua se e somente se ela 
gera uma sentença que possui duas ou mais 
árvores de análise distintas 
 
Gramática ambígua 
A = B * A + C 
Gramática não-ambígua 
 Se usarmos a árvore de análise sintática para indicar 
níveis de precedência dos operadores, não teremos a 
ambiguidade 
Associatividade de Operadores 
 Exemplo 
 <expr> -> <expr> + <expr> | const (ambígua) 
 <expr> -> <expr> + const | const (não-ambígua) 
 
Árvore de análise assoc. da adição 
 A = B + C + A 
BNF estendida 
 Partes opcionais são delimitadas por colchetes [ ] 
 <proc_call> -> ident [(<expr_list>)] 
 
 Partes alternativas de RHSs são colocadas entre 
parênteses e separadas com barras verticais 
 <term> → <term> (+|-) const 
 
 Repetições (0 ou mais) são colocadas entre 
chaves { } 
 <ident> → letter {letter|digit} 
BNF e EBNF 
 BNF 
 <expr>  <expr> + <term> 
 | <expr> - <term> 
 | <term> 
 <term>  <term> * <factor> 
 | <term> / <factor> 
 | <factor> 
 EBNF 
 <expr>  <term> {(+ | -) <term>} 
 <term>  <factor> {(* | /) <factor>}

Continue navegando