Saltar para o conteúdo

Gramática afixa

Origem: Wikipédia, a enciclopédia livre.

Uma gramática afixa ou linguagem afixa é um tipo de gramática formal; É usado para descrever a sintaxe das linguagens, primordialmente utilizado para linguagens de computação, usando uma bordagem baseada em como uma linguagem natural é tipicamente descrita.

As regras gramaticais de uma gramatica afixa são as de uma gramatica livre de contexto, exceto algumas partes nos não-terminais ( os afixos) que são usados como argumentos. Se o mesmo afixo ocorrer diversas vezes em uma única regra, seu valor deve ser o mesmo. Algumas vezes dependendo da gramática em que se está trabalhando, relações mais complexas entre valores de afixos são possíveis.

Nós podemos descrever um fragmento simples do Português da seguinte maneira:

 Oração → Sujeito Predicado
 SujeitoSubstantivo
 Predicado Verbo Auxiliar Objeto
 ObjetoSubstantivo
 Substantivo → João
 Substantivo → Maria
 Substantivo → Filhos
 Substantivo → pais
 Verbo → gostam
 Verbo → gosta
 Verbo → ajuda

Verbo → ajudam


Auxiliar → Preposição|Artigo

Preposição → de
Preposição → dos
Preposição → das
Artigo → as
Artigo → os


Nesta gramatica livre de contexto descrevemos orações simples como:

 João gosta de criança
 Maria gosta de joão
 Crianças gostam dos pais
 Pais gostam de João

Com mais substantivos e verbos e mais regras para introduzir outras partes da linguagem, um maior ramo de orações do português podem ser descritas; Então esta é uma abordagem para descrever a sintaxe de português.

No entanto, a gramatica dada também descreve orações como

 João gostam das crianças
 Crianças ajuda os pais

Estas orações estão erradas: Em português o sujeito e o verbo tem um numero gramatical que eles devem concordar.

Uma gramática afixa pode expressar isso diretamente:

Oração → (Sujeito + numero) Auxiliar (Predicado+numero)

Sujeito+numero → Substantivo + numero
Predicado+numero → Verbo + numero Objeto
Objeto → Substantivo +numero

Substantivo + singular → João

Substantivo + singular → Maria
Substantivo + plural → Crianças
Substantivo + plural → Pais
Verbo + singular → gosta
Verbo + singular → gostam
Verbo + singular → ajuda
Verbo + singular → ajudam

Auxiliar → Preposição + gênero + número do verbo|Artigo + gênero + número do verbo

Preposição → de
Artigo → a
de + neutro + singular → de
de + masculino + singular → do
de + masculino + plural  → dos
de + feminino + singular → da
de + feminino + plural  → das
a + masculino + singular → o
a + masculino + plural  → os
a + feminino + singular → a
a + feminino + plural  → as

Esta gramática apenas descreve orações corretas em português. Apesar de ainda poder possuir alguns erros como:

 João ajuda das crianças

Ainda está errado já que este ajuda não pedia preposição neste caso. Deveria ser:

 John ajuda as crianças

Isto também pode ser corrigido usando afixos, se os meios para descrever as relações entre os valores de diferentes afixos são fortes o suficiente. Como dito acima, estes meios dependem muito do tipo de gramatica afixa escolhida.

Tipos de gramáticas afixas

[editar | editar código-fonte]

No tipo mais simples de gramáticas afixas, os afixos só podem pegar valores de um domínio finito, e estes valores só podem ser relacionados usando 'acordos' como foi feito no exemplo acima. Aplicando desta forma, os afixos aumentam a compactabilidade das gramáticas, porém não aumentam a expressão de força da linguagem.

Outra abordagem é permitir que os afixos peguem omo valores Strings quaisquer e permitam que concatenações de afixos possam ser usadas nas regras. Os limites dos valores permitidos para os afixos podem ser descritos com regras de linguagens livre de contexto. Isto produz o formalismo de gramaticas de dois niveis, também conhecidas como Van Wijngaarden grammars ou gramáticas 2VW . Estes formalismos tem sido usados com sucesso, para descrever linguagens complicadas, em particular, a sintaxe do Algol 68 programming language. Apesar disso, mesmo sabendo que os valores dos afixos só podem ser manipulado com concatenações de strings, este formalismo é Turing complete; Por isso até as perguntas mais básicas sobre a linguagem descrita por uma gramatica 2VW qualquer são indecidíveis no geral.

As Gramáticas Afixas Estendidas, desenvolvidas por volta da década de 1980, são uma versão mais restrita da mesma ideia. Elas foram criadas com o principal objetivo de descrever a gramatica de uma linguagem natural como inglês ou português.

Outra possibilidade é permitir que os valores dos afixos sejam computados por um código escrito em alguma linguagem de programação. Duas abordagens básicas foram usadas:

  • Em gramáticas de atributo, os afixos( chamados de atributos) podem ter valores de quaisquer domínios (exemplo: Números inteiros ou reais, estrutura de dados complexa ) e funções arbitrarias que podem ser especificadas, escritas em um linguagem qualquer, para descrever como os valores dos afixos são derivadas uma do outro nas regras.
  • Em CDL (O Compilador de Linguagens Descritivas) e seu sucessor CDL2, desenvolvido na década de 1970, fragmentos do código fonte (geralmente na linguagem assembly) podem ser usados em regras, em vez dos normais 'right-hand sides', os lados da mão direita, permitindo que se expresse diretamente primitivos para a digitalização de entrada e computações para os valores dos afixos. Concebido como uma base para a construção prática compilador, esta abordagem foi usada para escrever compiladores e outros softwares, como por exemplo, um editor de texto.