Title: Sintaxe e Sem
1 Sintaxe e Semântica
Universidade Federal Rural de Pernambuco Departame
nto de Estatística e Informática
Prof. Gláucya Carreiro Boechat
glaucyacboechat_at_gmail.com
2 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 ( ltgt ) C ( ! ) Ada ( / )
- Semântica
- O significado das expressões, das instruções e
das unidades de programas - Identificação das seqüências de símbolos validos
que constituem estruturas sintáticas
3 Sintaxe e Semântica
- Exemplo comando if na linguagem C
- Sintaxe
- if (ltexprgt) ltinstruçãogt
- Semântica
- Se o valor da expressão for verdadeiro, a
instrução será executada
4Descrevendo 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
- Seqüência de caracteres sobre um alfabeto
- Exemplo
- identificador, op_mult
5Descrevendo 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
6Definiçã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 ltcondição truegt then ltinstruçãogt
7Métodos formais para 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
8Gramá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
9Backus-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)
10BNF - Fundamentos
- Terminais lexemas e tokens
- Não-terminais BNF abstrações
- Atual como variáveis
- Gramática uma coleção de regras
- Exemplos de regras BNF
- Atribuição em C(Representada pela abstração)
- ltAtribuiçãogt --gt ltvargt ltexpressãogt
- ltident_listgt -gt identifier identifier ,
ltident_listgt - ltif_stmtgt -gt if ltexpr_logicagt then ltstmtgt
- ltif_stmtgt -gt if ltexpr_logicagt then ltstmtgt else
ltstmtgt
11Regras BNF
- Uma regra possui
- um lado esquerdo (LHS - Left Hand Side)
- consiste de símbolos não-terminais
- um lado direito (RHS - Right Hand Side),
- consiste de símbolos terminais e não-terminais
- Uma gramática é um conjunto não vazio de regras
- Uma abstração (ou símbolo não-terminal) pode ter
mais de um RHS - ltstmtgt -gt ltsingle_stmtgt
- begin ltstmt_listgt end
12Listas Sintáticas
- Listas sintáticas são descritas usando recursão
- ltident_listgt -gt ident
- ident , ltident_listgt
- Derivação
- Aplicação de regras repetidas vezes,
- começando com um símbolo inicial
- finalizando com uma sentença (símbolos terminais)
13Uma gramática para uma pequenalinguagem
- ltprogramgt -gt begin ltstmtsgt end
- ltstmtsgt -gt ltstmtgt
- ltstmtgt ltstmtsgt
- ltstmtgt -gt ltvargt ltexprgt
- ltvargt -gt a b c d
- ltexprgt -gt lttermgt lttermgt
- lttermgt - lttermgt
- lttermgt -gt ltvargt const
14Exemplo gramática para uma pequena linguagem
ltprogramgt
ltstmtsgt ltstmtgt
ltvargt ltexprgt a
lttermgt lttermgt
ltvargt const
b
- ltprogramgt gt ltstmtsgt
- gt ltstmtgt
- gt ltvargt ltexprgt
- gt a ltexprgt
- gt a lttermgt lttermgt
- gt a ltvargt lttermgt
- gt a b lttermgt
- gt a b const
15Uma gramática para instruções deatribuição
simples
- ltassigngt -gt ltidgt ltexprgt
- ltidgt -gt A B C
- ltexprgt -gt ltidgt ltexprgt
- ltidgt ltexprgt
- ( ltexprgt )
- ltidgt
16Árvore de Análise (Parse Tree)
17Ambigü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
18Uma gramática ambígua parainstruções de
atribuição simples
- ltassigngt -gt ltidgt ltexprgt
- ltexprgt -gt ltexprgt ltexprgt
- ltexprgt ltexprgt
- ( ltexprgt )
- ltidgt
- ltidgt -gt A B C
19Duas árvores de análise para amesma sentença
20Uma gramática não-ambígua para expressões
- indicar os níveis de precedência de operadores,
não teremos ambigüidade - ltassigngt -gt ltidgt ltexprgt
- ltexprgt -gt ltexprgt lttermgt
- lttermgt
- lttermgt -gt lt term gt ltfactorgt
- ltfactorgt
- ltfactorgt -gt ( ltexprgt )
- ltidgt
- ltidgt -gt A B C
21A árvore de análise única para a expressão
22Exemplo Sintaxe para expressões
- Calculadora simples
- Com -gt Expr
- Expr -gt Num
- Expr Num
- Expr - Num
- Expr Num
- Expr / Num
- Num -gt Dig
- Num Dig
- Dig -gt 0 1 2 3 4 5 6 7 8 9
23Exemplo2 Priorização em linguagens de
Programação
- 1ª Prioridade , /, and, ...
- 2ª Prioridade , -, or, ...
- 3ª Prioridade , gt, lt, ...
- Expr -gt tExpr
- tExpr tExpr
- tExpr lt tExpr
- tExpr gt tExpr
24Exemplo2 Priorização em linguagens de
Programação
- tExpr -gt sExpr
- tExpr sExpr
- tExpr - sExpr
- tExpr or sExpr
- sExpr -gt pExpr
- sExpr pExpr
- sExpr / pExpr
- sExpr and pExpr
- pExpr -gt Lit
- Var
- (Exp)
25Associatividade de Operadores
- Associatividade de operadores podem ser indicados
pela gramática - Exemplo
- A B C A (adição é associativa)
- A B / C / A (divisão não é associativa)
26Associatividade de Operadores
- Exemplo
- ltexprgt -gt ltexprgt ltexprgt const (ambígua)
- ltexprgt -gt ltexprgt const const (não-ambígua)
27Árvore de análise associatividade da adição
28BNF estendida
- Adição de novas extensões
- Uso de Colchetes no RHS
- Partes opcionais
- ltproc_callgt -gt ident ( ltexpr_listgt )
- ltseleçãogt -gt if ( ltexpressãogt ) ltinstruçãogt else
ltinstruçãogt
29BNF estendida
- Uso de parenteses ( ) no RHS
- Opções de múltipla escolha, são colocadas dentro
de parênteses e separadas por barras verticais - lttermgt -gt lttermgt ( - ) const
- ltfor_stmtgt -gt for ltvargt ltexprgt ( to downto )
ltexprgt do ltstmtgt - Uso de chaves no RHS
- Indica zero ou repetição indefinida
- ltidentgt -gt letter letter digit
- ltlista_identgt -gt ltidentificadorgt ,
ltidentificadorgt
30BNF e EBNF
- BNF
- ltexprgt -gt ltexprgt lttermgt
- ltexprgt - lttermgt
- lttermgt
- lttermgt -gt lttermgt ltfactorgt
- lttermgt / ltfactorgt
- ltfactorgt
- ltfactorgt -gt ltexpgt ltfactorgt
- ltexpgt
- ltexpgt -gt ( ltexprgt )
- id
- EBNF
- ltexprgt -gt lttermgt ( -) lttermgt
- lttermgt -gt ltfactorgt ( / ) ltfactorgt
- ltfactorgt -gt ltexpgt ltexpgt
- ltexpgt -gt ( ltexprgt )
- id
31Exercícios
- Traduzir as seguintes seqüências
- 5 6 7
- 5 6 7
- 5 6 7
- 5 3 2 7
- A and B C
- A or B C
32Exercícios
- Modificar a sintaxe previamente estabelecida para
as expressões sejam avaliadas tendo as
comparações com maior precedência (Ex. A and
(BC)). Refaça a tradução das expressões
considerando a nova sintaxe estabelecida.
33Exercícios
- Adicionar os operadores unários , -- e
not. Os operadores e -- devem ter a
mesma prioridade dos seus correspondentes
binários, e devem ser permitidos como pré ou
pós. O operador not deve possuir uma
prioridade mais alta do que todos os operadores
já definidos. - Represente as expressões --ab, ab--,
ab e not A and B