Você está na página 1de 26

Linguagens de Programao

Descrevendo Sintaxe e Semntica

Tpicos da Aula

Introduo Terminologias Mtodos formais para descrever sintaxe

Introduo

Sintaxe: forma ou estrutura das expresses, declaraes, e unidades de programa Semntica: o significado das expresses, declaraes e unidades de programa Sintaxe e semntica fornecem a definio da linguagem

Usurios da definio de uma linguagem


Outros projetistas de linguagens Implementadores Programadores (usurios da linguagem)


3

Descrio da Sintaxe: Terminologia

Uma sentena um conjunto de caracteres de algum alfabeto Uma linguagem um conjunto de sentenas Um lexema uma unidade sinttica de nvel mais baixo

=, *, for, begin Ex.: identifier, int_literal


4

Um token uma categoria de lexemas

Descrio da Sintaxe: Terminologia


Quais so os lexemas? Quais so os tokens? soma = total * cont + 1;

Definio Formal de Linguagens

Reconhecedores da linguagem

Um reconhecedor l um conjunto de caracteres de um alfabeto da linguagem e decide se o conjunto de caracteres faz parte da linguagem Exemplo: anlise sinttica de um compilador Gera sentenas de uma linguagem O reconhecedor pode determinar se a sintaxe de uma sentena particular est sintaticamente correta comparando-a com a estrutura do gerador
6

Geradores de linguagens

BNF e Gramticas Livres de Contexto

Gramticas livres de contexto


Desenvolvidas por Noam Chomsky em meados de 1950 Geradoras de linguagens, teis para descrever a sintaxe de linguagens naturais Define uma classe de linguagens chamadas linguagens livres de contexto Inventada por John Backus para descrever a ALGOL 58 BNF equivalente s gramticas livres de contexto
7

Forma de Backus-Naur (1959)


Fundamentos da BNF

Em BNF, abstraes so usadas para representar classes de estruturas sintticas


Abstraes agem como variveis sintticas Tambm chamadas smbolos no-terminais No-terminais so delimitados por colchetes angulares: < >

Terminais so lexemas ou tokens

Fundamentos da BNF

Exemplos de regras BNF:


<ident_list> identifier, <ident_list>

Uma regra tem um left-hand side (LHS), o qual um no-terminal, e um right-hand side (RHS), o qual um conjunto de terminais e/ou noterminais

Regras BNF

Uma abstrao (no-terminal) pode ter mais de um RHS

<if_stmt> if <expr_lgica> then <stmt> <if_stmt> if <expr_lgica> then <stmt> else <stmt>

ou
<if_stmt> if <expr_lgica> then <stmt> | if <expr_lgica> then <stmt> else <stmt>

10

Descrevendo Listas

Listas sintticas so descritas usando recurso


<ident_list> ident | ident, <ident_list>

11

Gramtica

Gramtica um conjunto de regras finito e no vazio

representada em uma definio BNF

O smbolo start um elemento especial dos no-terminais

Geralmente representa o programa com um todo

12

Gramtica: Exemplo
<program> <stmts> <stmts> <stmt> | <stmt> ; <stmts> <stmt> <var> = <expr> <var> a | b | c | d <expr> <term> + <term> | <term> - <term> <term> <var> | const

13

Derivao

Uma derivao uma aplicao repetida de regras, iniciando com o smbolo start e finalizando com uma sentena
<program> <stmts> <stmt> <var> = <expr> a = <expr> a = <term> + <term> a = <var> + <term> a = b + <term> a = b + const
14

Derivao

Cada uma das strings de derivao chamada de forma sentencial Uma sentena uma forma sentencial que tem somente smbolos Em uma derivao esquerda os noterminais da esquerda so substitudos primeiro Em uma derivao direita os no-terminais da direita so substitudos primeiro
15

rvore de Anlise (Parse Tree)

Representao hierrquica de uma derivao


<program> <stmts> <stmt> <var> =<expr> a <term> + <var> b
16

<term> const

Exemplo

Qual a derivao desta gramtica? Qual a rvore de anlise? A := B * ( A + C )


<atribuio> <id> := <expr> <id> A | B | C <expr> <id> + <expr> | <id> * <expr> | ( <expr> ) | <id>
17

Ambiguidade em gramticas

Uma gramtica ambgua se e somente se gera uma forma sentencial que tem duas ou mais rvores de anlise Impacto na execuo do programa

18

Ambiguidade em gramticas

<expr> <expr> <op> <expr> | const <op> / | <expr> <expr>

<expr> <op> <expr>

<expr> <op>

<expr>

<expr> <expr> <op>

<expr> <op> <expr>

const - const /

const

const -

const / const
19

Ambiguidade em gramticas

Qual a derivao desta gramtica? Qual a rvore de anlise? A := B * A + C


<atribuio> <id> := <expr> <id> A | B | C <expr> <expr> + <expr> | <expr> * <expr> | ( <expr> ) | <id>
20

Associatividade de Operadores

Como definir a precedncia de operadores?


A = 8 + 4 + 2 14 A = 8 / 4 / 2 1 ou 4 ? A = 8 - 4 / 2 2 ou 6 ?

Podemos modificar a gramtica para indicar a precedncia dos operadores

21

Associatividade de Operadores

<expr> <expr> <op> <expr> | const <op> / | <expr> <expr>

<expr> <op> <expr>

<expr> <op>

<expr>

<expr> <expr> <op>

<expr> <op> <expr>

const - const /

const

const -

const / const
22

Associatividade de Operadores

<expr> <expr> - <term> | <term> <term> <term> / const | const


<expr> <expr> <term> const

<term> <term> / const const

23

Associatividade de Operadores

Adio, subtrao, diviso e multiplicao so geralmente associadas esquerda

A=8/4/2 1

Exponenciao geralmente associada direita!

A = 3 ^ 2 ^ 3 6561 (no 729)

24

Associatividade de Operadores

<expr> <expr> - <term> | <term> <term> <term> / <factor> | <factor> <factor> const ^ <factor> | const
<expr> <term> <factor> 3 ^ <factor> 2 ^ <factor> 3
25

Resumo

Introduo Terminologias Mtodos formais para descrever sintaxe

BNF e rvores de anlise

26

Você também pode gostar