Você está na página 1de 20

Aula o3 Sintaxe e Semntica Critrios de Avaliao de Linguagems

PAULO SRGIO CUSTDIO

Critrios de Avaliao de Linguagens


Legibilidade Simplicidade global Ortogonalidade Instrues de controle Tipos de Dados e Estrutura

Projeto da Sintaxe
Suporte para Abstrao Expressividade Verificao de tipos Manipulao de excees Apelidos restritos

Legibilidade
Este critrio determina a facilidade com que os programas

podem ser escritos e entendidos. Por volta dos anos 70, o conceito de ciclo de vida do software surgiu => a manuteno passa a ser considerada parte essencial do ciclo de vida do software. Em grande parte, a manuteno facilitada na mesma medida em que a legibilidade da linguagem maior. Se um programa tiver sido escrito em uma linguagem no-projetada para aquele uso, o programa pode se tornar ilegvel.

Caractersticas determinantes da legibilidade


Simplicidade global

Ortogonalidade
Instrues de controle Tipos de dados e estruturas

Sintaxe

Simplicidade global
A simplicidade global de uma linguagem de programao afeta a

sua legibilidade. Uma linguagem com grande nmero de componentes bsicos mais difcil de ser aprendida do que com poucos desses componentes. Os programadores que precisam de uma linguagem grande tendem a aprender um subconjunto dela e a ignorar demais recursos. Ocorrero problemas de legibilidade sempre que um autor de um programa tiver aprendido um subconjunto diferente daquele aprendido pelo leitor do programa. Multiplicidade de recursos: Por exemplo, em C, h 4 modos diferentes para incrementarmos uma varivel: Const = Const +1, Const += 1, Const++, ++Const

Simplicidade global II
Outro problema global a sobrecarga de operador, onde um

nico smbolo tem mais de um significado. Na maioria das vezes, tal sobrecarga simplifica uma linguagem, reduzindo o nmero de operadores. A forma e o significado das instrues em linguagem de montagem so modelos de simplicidade, mas como faltam estruturas de controle mais complexas, o nmero de instrues simples para a realizao de um programa enorme se comparado a uma mesma escrita em linguagem de alto nvel. Isso para no contar que os endereos dos registradores so explcitos na linguagem de montagem o que no ocorre com linguagens de alto nvel.

Ortogonalidade

Sintaxe

Linguagem G_inteiro
Por exemplo, a linguagem definida pela gramtica G_inteiro o

conjunto de todas as strings que so sequncias finitas de cdigos decimais, formando assim a categoria sinttica inteiro. A string 352 um membro especfico dessa linguagem, j que podemos deriv-la usando as produes de G_inteiro. A derivao dada anteriormente chamada de derivao mais esquerda, por que a cada etapa, substitumos o no-terminal mais esquerda na forma sequencial por uma de suas alternativas. Muitas outras sequncias de derivaes so possveis. Por exemplo, poderamos substituir o no-terminal mais direita em cada passo, em cujo caso teramos uma derivao mais direita, ou seja:

Sequncia de Derivao

A sequncia de derivaes acima produz a string 352

dessa gramtica.

Exemplo 1:
Outra

forma de demonstrar que uma determinada string faz parte da linguagem definida por uma gramtica BNF descrever a derivao em uma forma grfica. Esta forma, chamada de rvore de anlise, na qual cada passo da derivao corresponde a uma nova subrvore. Exemplo, o passo da derivao:

rvore de anlise

Comentrios:
A raiz de cada subrvore em uma rvore de anlise modo

correspondente ao no-terminal para o qual a substituio est sendo feita em uma derivao, e os filhos imediatos da esquerda para a direita correspondem ao lado direito da produo usada nessa substituio. Uma rvore de anlise completa para a derivao da string 352 mostrada na figura abaixo:

rvore para 352

Observaes
Observe que, uma vez que a rvore de anlise desenhada a

ordem dos passos da derivao perdida; tanto as derivaes mais esquerda quanto as mais direita resultam na mesma rvore. Veja a prxima figura:

rvore

Anlise da string 5 -4 +3
A anlise da rvore possui diversas outras caractersticas notveis.

Primeiro, o n da raiz da rvore sempre contm o smbolo inicial da gramtica (inteiro, neste ex). Segundo, cada n interno contm um no-terminal (inteiro ou dgito). Na verdade, sempre h o mesmo nmero de ns internos na rvore que so passos ( =>). Na derivao (6, neste exemplo). Cada n interno tem como seus descendentes diretos os elementos que aparecem no lado direito de uma regra gramatical, na ordem da esquerda para a direita. Finalmente, as folhas da rvore so sempre smbolos terminais da gramtica. Ler os ns-folha da E ->D reconstri a string que fora analisada (352). Resumindo, uma derivao uma representao linear simples de uma rvore de anlise, e muitas x mais til quando a string derivada no possui uma estrutura gramatical de interesse.

...
Uma rvore de anlise preferida quando a estrutura gramatical

mais complexa, como veremos nos diversos exemplos a seguir. Considere a gramtica G_0, que define a Linguagem de expresses aritmticas tendo os operadores + e e os operandos inteiros de um dgito: Expresso -> Expresso + Termo | Expresso Termo | Termo Termo -> 0|1|2|3| ...|9|(Expresso)