01 · Introdução e Conceitos Básicos

Resumo em 30 segundos

Linguagens formais estudam a forma (sintaxe) das linguagens, não o significado. Tudo parte de três peças: alfabeto (conjunto finito de símbolos), sentença (sequência finita de símbolos) e linguagem (conjunto de sentenças). Os formalismos que usamos para descrever linguagens são de três tipos: operacional (autômatos, que reconhecem), axiomático (gramáticas, que geram) e denotacional (expressões regulares, que geram).

Voltar para o mapa da disciplina · Próxima: 02 - Matemática Discreta


Slide 1 e 2: roteiro da aula

A aula cobre: sintaxe e semântica, tratamento (os tipos de formalismo), alfabetos, sentenças e linguagens. O rodapé de todos os slides avisa: ler slides não substitui o estudo do material de referência. Por isso cada nota deste vault termina com uma seção apontando onde aprofundar nos livros.

Slide 3: de onde vem a teoria

  • A Teoria das Linguagens Formais foi desenvolvida na década de 1950, com Noam Chomsky como nome central.
  • O objetivo inicial era estudar linguagens naturais (português, inglês).
  • Logo se percebeu que a teoria servia muito bem para linguagens artificiais, principalmente as da computação (linguagens de programação).

Slide 4: onde isso é usado

ÁreaExemplo prático
Compiladoresanálise léxica (tokens) e análise sintática (estrutura do código)
Hardwaremodelagem de circuitos e redes lógicas
Biologiamodelagem de sistemas biológicos (sequências de DNA, por exemplo)
Mais recenteanimações e jogos, hipertexto e hipermídia, linguagens não lineares

Ligação com o que você já usa

Quando você escreve uma regex em JavaScript para validar um e-mail, ou quando o TypeScript aponta um erro de sintaxe, você está usando resultados diretos desta disciplina. O analisador léxico de um compilador é, na prática, um autômato finito (ver 04 - Autômatos Finitos Determinísticos).

Slides 5 a 9: sintaxe × semântica

A ideia central é separar duas perguntas:

SintaxeSemântica
Pergunta”Isso está bem escrito?""O que isso significa?”
Trata depropriedades livres da linguagem, sem significadoa interpretação, o valor ou efeito do programa
Exemploverificar se o programa respeita a gramáticacalcular o que o programa faz

Pontos que os slides destacam:

  1. Historicamente a sintaxe veio primeiro: foi reconhecida antes, recebeu tratamento adequado antes e é mais simples de tratar.
  2. Consequência: por um tempo se achou que as questões de linguagens de programação se resumiam à sintaxe. Não se resumem.
  3. A teoria da sintaxe tem construções matemáticas bem definidas e universalmente aceitas, como as gramáticas de Chomsky (ver 03 - Gramáticas Regulares).
  4. Sintaticamente errado = nem é um programa da linguagem. Sintaticamente correto = é um programa, mas pode não fazer o que o programador quer. “Correto” de verdade depende de o programa modelar o comportamento desejado (isso já é semântica).
  5. A fronteira nem sempre é clara (o slide cita a ocorrência de um nome em um programa: declarar antes de usar é sintaxe ou semântica?). Em linguagens artificiais a distinção costuma ser mais óbvia.
  6. Análise léxica é um tipo especial de análise sintática, focada nos componentes básicos (palavras, números, identificadores). É a ênfase da disciplina.
flowchart LR
  A[Código-fonte] --> B[Análise léxica<br/>autômatos finitos / ER]
  B -->|tokens| C[Análise sintática<br/>gramáticas]
  C -->|árvore| D[Análise semântica]
  D --> E[Geração de código]
  style B fill:#dbe7ff,stroke:#2b4c9b
  style C fill:#dbe7ff,stroke:#2b4c9b

Em azul: as fases que a disciplina de Linguagens Formais sustenta diretamente.

Slides 10 a 13: os três tipos de formalismo

flowchart TB
  F[Formalismos para descrever linguagens] --> O[Operacional]
  F --> AX[Axiomático]
  F --> DN[Denotacional ou Funcional]
  O --> O1["Autômato / máquina abstrata<br/>RECONHECEDOR"]
  AX --> AX1["Gramática<br/>GERADOR"]
  DN --> DN1["Expressão Regular<br/>GERADOR"]
  • Operacional (slide 11): define-se uma máquina abstrata com estados, instruções primitivas e a especificação de como cada instrução muda o estado. A máquina é simples o bastante para não deixar dúvida sobre sua execução. É um formalismo reconhecedor: recebe uma entrada e responde se ela é “reconhecida”. Exemplo: autômato finito.

  • Axiomático (slide 12): associam-se regras aos componentes da linguagem. As regras dizem o que passa a ser verdade depois de aplicar cada cláusula, considerando o que era verdade antes. É um formalismo gerador. Exemplo: gramática.

  • Denotacional ou funcional (slide 13): define-se um domínio que caracteriza as palavras admissíveis; o valor de uma construção é calculado a partir dos valores das suas partes (composicionalidade). Na disciplina, essa abordagem fica restrita às expressões regulares. Também é gerador.

Reconhecer × gerar

Reconhecedor: “me dá uma palavra que eu digo sim ou não”. Gerador: “eu produzo todas as palavras da linguagem”. As aulas 06 e 07 mostram que, para linguagens regulares, os dois lados têm o mesmo poder.

Slide 14: o que é uma linguagem

  • Linguagem é um meio de comunicação usado pelos elementos de uma comunidade.
  • É formada por um conjunto de palavras e um conjunto de regras gramaticais.
  • É formal quando pode ser representada por um sistema matemático com sintaxe e semântica.

Slide 15: alfabeto

Alfabeto (ou vocabulário) é um conjunto finito de símbolos.

Um símbolo pode ter vários caracteres

No terceiro exemplo, while é um símbolo. Isso é exatamente o que acontece depois da análise léxica: o analisador sintático enxerga tokens, não letras.

Slides 16 e 17: sentença, tamanho, V* e V+

Sentença (palavra, string) sobre um alfabeto é qualquer sequência finita de símbolos de .

  • Com : 001, 1010 são sentenças.
  • Tamanho = número de símbolos. Com e , temos .
  • Sentença vazia : não tem símbolos, .
NotaçãoSignificadoExemplo com
todas as sentenças sobre , inclusive

Quantas palavras de tamanho n?

Se , existem exatamente palavras de tamanho . Com e : palavras. Útil para conferir listagens.

Slide 18: prefixo e sufixo

Com :

  • Prefixo: qualquer sequência inicial: 1, 10, 101, 1011, …
  • Sufixo: qualquer sequência final: 0, 10, 010, 1010, …

O que os livros dizem (confirmado)

Nos dois livros, e a própria também contam como prefixo e sufixo de . O Menezes lista os prefixos de abcb como , a, ab, abc, abcb (Exemplo 18, p. 22). O Ramos chama de prefixo próprio (ou sufixo próprio) aquele que é diferente da palavra inteira (p. 79). Os dois também definem subpalavra (ou subcadeia): qualquer trecho contíguo. Todo prefixo e todo sufixo é uma subpalavra.

Slide 19: concatenação

Justapor duas palavras: com e , .

Propriedades:

  • Elemento neutro: .
  • Associatividade: .
  • Não é comutativa em geral: (teste com ab e ba).

Slide 20: concatenação sucessiva (potência)

= concatenada consigo mesma vezes. Com : .

  • para (definição recursiva, o mesmo padrão que aparece em potência de relações).

Slide 21: linguagem

Linguagem é qualquer conjunto de sentenças sobre um alfabeto.

Atenção à notação do slide 21

O slide escreve ” é finita”. O correto é (uma linguagem é um subconjunto de , não um elemento dele). Além disso, a linguagem não precisa ser finita: é infinita e aparece na própria aula de gramáticas. Provavelmente é um erro de digitação; vale confirmar com o professor.

Os livros confirmam: o Menezes define linguagem formal como “um conjunto de palavras sobre um alfabeto” (Definição 1.24, p. 22) e dá como exemplo a linguagem dos palíndromos, que é infinita. O Ramos diz que uma linguagem pode ser finita ou infinita e que toda linguagem sobre é um subconjunto de (p. 79 e 82).


Autoavaliação


Aprofundamento com os livros

De onde vêm os slides

Lendo os livros, fica claro que os slides desta aula seguem de perto o Menezes (seções 1.1 e 1.5): o trecho sobre sintaxe e semântica, os três tipos de formalismo e até os exemplos de aplicação aparecem quase na mesma ordem nas p. 1 a 4. Então o Menezes é a leitura mais direta para esta aula, e o Ramos serve para ver o mesmo assunto com mais rigor.

Os números de página são das edições que você colocou na pasta: Menezes 3ª edição (Sagra Luzzatto, 2000) e Ramos, José Neto e Vega (Bookman). A 6ª edição do Menezes pode ter paginação diferente.

Onde os livros discordam (vale saber para não se confundir)

PontoSlidesMenezesRamos
Nome do alfabeto
Alfabeto pode ser vazio?não dizsim, também é alfabeto (p. 21)não, alfabeto é finito e não vazio (p. 77)
Nome da sequênciasentençapalavra, cadeia ou sentençacadeia; vira “sentença” quando pertence à linguagem
se ; indefinida para (p. 23) sempre (p. 79)
Prefixo inclui e ?não dizsimsim, e define prefixo próprio

A diferença de é um detalhe curioso do Menezes: como para todo , ele prefere deixar sem definição. Na prática quase nunca aparece.

ε, ∅ e {ε}: a confusão mais comum

O Ramos dedica um parágrafo só a isso (p. 80):

ObjetoO que éTamanho
uma cadeia (a vazia)
uma linguagem sem nenhuma cadeia cadeias
uma linguagem com exatamente uma cadeia cadeia

O Menezes reforça no Exemplo 19 (p. 22): e são linguagens diferentes.

Operações sobre cadeias e linguagens que os livros acrescentam

  • Reverso (Ramos p. 79): é de trás para frente. Exemplo: e . Um palíndromo é uma palavra com .
  • Concatenação de linguagens (Ramos p. 80): .
  • Potências do alfabeto (Ramos p. 81): , , = todas as cadeias de tamanho 2, e assim por diante. Então e
  • Cuidado com (Ramos p. 83): para um alfabeto, . Mas para uma linguagem qualquer, só vale se . Se , então .
  • Todas as linguagens sobre formam o conjunto (Ramos p. 83). A menor linguagem é e a maior é .
  • Complemento de uma linguagem: (Ramos p. 83).

A concatenação não é "fechada" numa linguagem (Menezes, Exemplo 20, p. 23)

Pegue = palíndromos sobre . aba e bbb estão em , mas ababbb não é palíndromo. Ou seja: concatenar duas palavras de uma linguagem pode gerar uma palavra que está fora dela.

Três jeitos de especificar uma linguagem (Ramos, p. 89)

  1. Gramáticas: geram todas as cadeias da linguagem e nenhuma outra. Servem para linguagens finitas e infinitas.
  2. Reconhecedores: aceitam toda cadeia da linguagem e rejeitam as demais. Também servem para finitas e infinitas.
  3. Enumeração: listar todas as cadeias. Só funciona para linguagens finitas e pequenas.

Uma gramática e um reconhecedor são equivalentes quando toda cadeia gerada pela gramática é aceita pelo reconhecedor e toda cadeia aceita é gerada. O Ramos mostra um contraexemplo (Exemplo 2.20, p. 89): uma gramática que gera “começa com a” e um reconhecedor que aceita “começa com a e termina com b”. A cadeia aba é gerada mas não é aceita, então não são equivalentes.

O reconhecedor genérico (Ramos, seção 2.5, p. 96 a 105)

Todo reconhecedor da disciplina é um caso particular de um modelo com quatro partes: fita de entrada, cursor, máquina de estados (finita) e uma memória auxiliar opcional. O que muda de um tipo para outro:

ReconhecedorMemória auxiliarCursorClasse (ver 03 - Gramáticas Regulares)
Autômato finitonenhumasó lê, só anda para a direitaregulares
Autômato de pilhauma pilhasó lê, só anda para a direitalivres de contexto
Máquina de Turing com fita limitadaa própria fita, limitada ao tamanho da entradalê e escreve, anda nos dois sentidossensíveis ao contexto
Máquina de Turinga própria fita, sem limitelê e escreve, anda nos dois sentidosrecursivamente enumeráveis

Determinismo como threads

O Ramos usa uma analogia boa para quem programa (p. 99 e 100): quando um autômato não determinístico tem várias opções, imagine que ele cria uma thread para cada opção. A cadeia é aceita se alguma thread chega a uma configuração final. Um autômato determinístico é um programa de uma thread só. Isso prepara o terreno para a aula 05.

Exercícios extras (Menezes, seção 1.6, p. 27)

Para aprofundar nos livros

Onde ler (páginas das edições da sua pasta)

  • Menezes (3ª ed.): 1.1 Introdução, p. 1 a 4 (base direta dos slides); 1.5 Alfabetos, Palavras, Linguagens e Gramáticas, p. 21 a 26; exercícios 1.1 e 1.19 a 1.21, p. 27 a 30.
  • Ramos, José Neto e Vega: 2.1 Símbolos e Cadeias, p. 77; 2.2 Linguagens, p. 79 a 90; 2.5 Reconhecedores, p. 96 a 105.

Relacionadas: Glossário · Flashcards · Referências - Livros