Gramática afixa
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.
Exemplo
[editar | editar código-fonte]Nós podemos descrever um fragmento simples do Português da seguinte maneira:
Oração → Sujeito Predicado Sujeito → Substantivo Predicado → Verbo Auxiliar Objeto Objeto → Substantivo
Substantivo → João Substantivo → Maria Substantivo → Filhos Substantivo → pais
Verbo → gostam Verbo → gosta Verbo → ajuda
Verbo → ajudam
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)
Substantivo + singular → João
Auxiliar → Preposição + gênero + número do verbo|Artigo + gênero + número do verbo
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.
Ver também
[editar | editar código-fonte]- Gramáticas Afixas Estendidas
- Attribute grammar (gramática de atributo)
- Van Wijngaarden grammar (2VW)