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)
onde:- 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