HomePage RecentChanges

Lesson02

Linguagem de programação

Uma linguagem de programação é uma linguagem utilizada para escrever programas de computador. As linguagens de programação são em geral descritas lexicalmente por expressões regulares e sintaticamente por gramáticas, e.g., através da notação BNF (Backus Normal Form ou Backus–Naur Form).

A sintaxe de uma linguagem é o conjunto de regras que definem as relações válidas entre os constituintes da linguagem, e.g., palavras e frases. Nota-se que a sintaxe não atribui significado às frases.

Gramática

Uma linguagem pode ser descrita formalmente por uma gramática composta por:

Para descrever a sintaxe do Python vamos utilizar a notação BNF (Backus Normal Form ou Backus–Naur Form). Regras:

Exemplo de gramática em notação BNF

Número binários:

<número binário> ::= <digito binário> | <digito binário> <número binário>
<digito binário> ::= 0 | 1

Note-se a natureza recursiva da primeira regra.

Exercício: Proponha uma alternativa de gramática para definir números binários.

Semântica

A semântica de uma linguagem atribui significado a cada frase da linguagem. Note-se a diferença entre a semântica e a sintaxe, a primeira nada diz a respeito da geração das frases da linguagem e a segunda nada diz a respeito do significado dessas frases. A descrição semântica de uma linguagem é bem mais complicada e é feita em geral utilizando linguagem natural, sendo muitas vezes informal e levando a problemas de ambiguidade, mas dando uma perspetiva intuitiva da linguagem. É também possível definir e estudar a semântica segundo uma abordagem formal e tendo por base a lógica matemática, no entanto leva-nos a uma descrição por vezes menos intuitiva e bastante mais complexa do ponto de vista dos programadores.

Nesta disciplina estudaremos portanto, de forma incremental, a semântica da linguagem Python, descrevendo a mesma utilizando língua natural.

Erros

Neste âmbito os programas podem conter erros que podem ser de natureza sintática ou semântica.

Os erros de natureza sintática resultam de o programa não corresponder a frases válidas da linguagem. O programador pode por exemplo não ter utilizado a sintaxe definida pela gramática quando escreveu o programa. Este tipo de erros é detetado pelo processador da linguagem. Caso existam erros sintáticos num programa, o processador da linguagem indica que existem erros e dá em geral um diagnóstico de possíveis causas dos mesmos. O programador pode basear-se nesse diagnóstico para corrigir o programa. Nota-se que os erros sintáticos têm de ser todos corrigidos antes de ser possível executar as instruções no programa.

Os erros de natureza semântica ou erros lógicos são em geral bastante mais difíceis de detetar. Estes erros surgem quando o programador não expressa corretamente as ações a executar pelo programa segundo a semântica da linguagem. Estes erros podem manifestar-se em mensagens de erro na execução do programa, na produção de resultados errados, ou em programas que não terminam.

Ao processo de deteção de erros sintáticos e semânticos dá-se o nome de depuração ou debugging. O processo será mais rápido ou mais lento dependendo da experiência do programador.

Gramática para Python

A gramática oficial do Python 3 está disponível em https://docs.python.org/3/reference/grammar.html. Ainda que anotação seja um pouco diferente daquela que vamos utilizar nesta disciplina, servirá para nossa referência.