Linguagem é um conjunto de regras sintáticas e semânticas usadas para definir uma forma de comunicação. Na computação, também surgiu a necessidade de se criar um método padronizado para expressar instruções sobre as quais um computador vai atuar, como elas serão armazenadas ou transmitidas e quais ações devem ser tomadas sob várias circunstâncias.
Como toda linguagem é utilizada por várias pessoas, ela deve ser inteligível por todos. Desta forma, uma linguagem de programação também tem estudo semelhante às demais, ou seja, deve-se analisar sua sintaxe e semântica.
Uma definição informal é escrita usando-se alguma linguagem natural. Quando bem escrita ela pode ser prontamente entendida pelo implementador da linguagem, no entanto, devido à natureza ambígua da linguagem natural, a definição pode ser imprecisa e incompleta. Assim, é bem possível que dois implementadores interpretem distintamente certas características da linguagem, o que levará a implementações inconsistentes para a mesma linguagem.
Numa definição formal, uma linguagem de programação é definida precisamente (matematicamente); para isto faz-se uso de alguma linguagem ou método formal (isto é, com base matemática) para escrever a definição da linguagem. A especificação formal de linguagens de programação evita ambigüidades e falhas de entendimento por parte dos projetistas, implementadores e usuários da linguagem.
begin
clrscr;
writeln('Digite o primeiro nome:');
readln(nome);
writeln(nome);
readkey;
end
C++
char nome[40] //variável do tipo string com no máximo 40 caracteres
int main(){
clrscr;
cout<<"Digite o primeiro nome: ";
cout<<"Nome: ";
Exemplo de uma instrução em linguagem C:
Para descrever a sintaxe das linguagens de programação são criadas gramáticas. Entre as gramáticas livres de contexto, a mais utilizada é a BNF– Forma de Backus- Naur, que foi definida por Peter Naur e melhorada por John Backus, dai o seu nome: Backus-Naur Form (BNF). É uma metalinguagem (linguagem utilizada para explicar outra linguagem), composta por um conjunto de regras para descrever como os processos computacionais são realizados.
A BNF usa abstrações para representar estruturas sintáticas.
As sentenças da linguagem são geradas por uma seqüência de aplicações das regras. Uma geração da sentença é chamada derivação (esclarecer, explicar o programa).
As gramáticas descrevem naturalmente a estrutura sintática hierárquica das linguagens que definem. Essas estruturas são chamadas de árvores de análise.
Exemplo:
- A = B * (A + C)
- O nível mais baixo será executado primeiro
- As folhas são elementos terminais
- Os nós (vértices) são elementos não-terminais
- Toda subárvore de uma árvore de análise descreve uma instância de uma abstração na instrução.
Para solucionar alguns problemas encontrados na BNF, o standard ISO 14977 definiu uma extensão ao BNF designado EBNF e no qual existem quatro novos operadores:
-( ... ...... ) escolha múltipla
- [ ] símbolos opcionais (zero ou uma vez)
-{ } símbolos opcionais com repetição (zero ou mais vezes)
-{ }+ símbolos com repetição (uma ou mais vezes)
O EBNF não é mais poderoso que o BNF;apenas é mais facilitador, mais prático.
Exemplo:
As informações das gramáticas BNF e EBNF podem ser representadas através de gráficos de sintaxe. Esses gráficos possuem diferentes tipos de vertices para representar os simbolos terminas e não-terminais. Os vértices retangulares contém os nomes das unidades sintáticas (não-teminais) e círculos ou elipses contém símbolos terminais. Com a análise dos graficos aumenta a legibilidade, pois permite visualizar em duas dimessões.
Exemplo:
Representação Gráfica: A Gramática de atributos, projetada por Knuth, é um dispositivo usado para descrever mais detalhes da estrutura das linguagens de programação do que é possível com uma gramática livre de contexto (BNF).Ela permite que certas regras de linguagem sejam descritas, com a incompatibilidade de tipos. Consegue descrever tanto a sintaxe como a semântica estática do programa.
A Semântica é complementar a sintaxe. Ela corresponde à descrição do significado das instruções válidas de uma linguagem. Por exemplo, a sintaxe da instrução if da linguagem C++ é: if (
Semântica estática se relaciona indiretamente com o significado do programa durante a execução, ele se refere as formar legais do programa. Geralmente as regras de semântica estática declarama as restriçoes de tipos. Ela é assim chamado por que a análise necessária para verificar essas especificações durante a compilação.
Semântica dinâmica representa o significado das expressões, das instruções e das unidades de programas. É dividida em Operacional, Denotacional e Axiomática.
Semântica operacional: descreve o significado de um programa através da execução de suas instruções numa máquina (real ou simulada, virtual). Alterações no estado da máquina ao executar determinada instrução definem o significado desta, ou seja, preocupa-se com o resultado, em como será executado pelo computador.
Exemplo:
Semântica denotacional dentre os métodos mais empregados, é o de maior rigor matemático. Baseia-se solidamente na teoria das funções recursivas, ou seja, explica o significado das instruções das linguagens, através de instruções matemáticas.
Semântica axiomática baseia-se na lógica matemática associada a um método para provar, ou seja, preocupa-se em provar a exatidão de um programa. As expressões lógicas são chamadas de predicado. Eles precedem uma instrução, seguido da instrução temos a pós-condição.
Exemplo:
Referências Bibliográficas:
Sebesta, Robert W.; trad. Santos, José Carlos Barbosa dos. Conceitos de Linguagens de Programação – 4ª Edição – Porto Alegre: Bookman, 2000
http://www.dcc.ufrj.br/~fabiop/CAP3.ppt#17
http://www.cefetrn.br/~robinson/LPCPCap3.pdf
http://www.din.uem.br/~vfeltrim/linguagens2008/Sintaxe.pdf
Parabéns Pri, vocês foram muito claras, objetivas e criativas.
ResponderExcluirContinuem brilhando.....
Gostei da postagem...achei interessante entender que a BNF é uma linguagem para esplicar a linguagem...doidera =p, mas o lance da semântica não entendi muito bem...muito difícil pensar como que a linguagem interpreta as instruções.
ResponderExcluirFicou jóia a postagem vlw meninas =D
Sem falar que o Peter Naur parece com o Sylvio Santos..hehe ^^
Pois é Henrique, muito legal entender que existem linguagens para explicar outras(as metalinguagens), parece até contraditório,não é?Muito interessante mesmo.Quanto a semântica, fica claro para entendê-la quando pensamos de forma geral em seu conceito, que ela nada mais é do que uma verificadora de "código".Ela é a responsável por garantir que um programa está ou não correto.Que cada uma de suas instruções estão exatas.
ResponderExcluirE o Peter Naur.....sem comentários....Quem é a cópia de quem?...hehehe
valeu ter parado pra ler esta postagem a explicação ficou bem clara e o conceito de sintaxe e semântica bem "enxuto" ajudando muito no entendimento.
ResponderExcluirLegal a postagm de vcs, explicou bem tudo o que o Tiago falou em sala, ficou bel claro!!!
ResponderExcluirGostei muito... O artigo ficou diferenciado o que ajudou muito no entendimento.... Parabéns ao grupo!
ResponderExcluirAchei essa postagem de suma importância.
ResponderExcluirDeu uma 'introdução' ao conteúdo da disciplina de LP com muita ênfase e objetividade, sem rodeios.
Muito bom!
gostei o que foi postado
ResponderExcluirdeu uma reforçada no que
o professor explicou nas aulas
muito bom.
Falou tudo !!! Entender mais BNF e EBNF ajudou bastante na materia.
ResponderExcluirAew... Belo post...
ResponderExcluirAjudou demais no decorrer do curso. Detalhado com figuras e tudo mais... Objetivo também... Parabéns.
Excelente!!! Seu post ajudou-me muito.
ResponderExcluirObrigada
Blan
Muito bom! Ótima Explicação!.
ResponderExcluirAdorei, sinto_me grata porque esclareceu a minha dúvida,
ResponderExcluirGostei ajudou-me muito
ResponderExcluirParabéns e obrigado ajudou-me a compreender um pouco mais sobre o assunto!
ResponderExcluirMuito bom o conteúdo, ajudou bastante.
ResponderExcluir