Gramática sensível ao contexto para o idioma das palavras concatenadas entre si

9

Estou procurando uma gramática sensível ao contexto que descreva o seguinte idioma: .L={www{a,b},|w|1}

Eu tenho problemas com o fato de que nenhuma regra como é permitida e, portanto, não posso colocar nenhum termo-terminal indicando o "meio" da palavra. Existe algum truque para o problema?Xε

MrBolton
fonte
11
Resposta chata: formule um LBA e aplique a simulação usada para provar que LBAs e gramáticas sensíveis ao contexto são igualmente poderosas.
Raphael

Respostas:

6

De fato, existe um truque simples que permite adicionar informações extras em uma determinada posição: basta substituir uma letra adjacente à posição e marcar com a informação e a letra original.

No seu exemplo, tenha um não-terminal para o meio, mas como não pode ser excluído, também conta como uma letra normal. Assim, temos duas cópias M a e M b para indicar as letras substituídas. No final da derivação, os marcadores devem ser substituídos pelo conteúdo das letras, por produções simples como M aa .MMaMbMaa

Na maioria dos casos, a aplicação de precisa ser realizada no final do processo de derivação. Em algumas construções, isso não precisa ser "cronometrado": quando o M desaparece muito cedo, a derivação não consegue encontrar uma posição adequada e o processo não para com sucesso. Em outros casos, é preciso um tipo de controle. Às vezes, isso é feito através da introdução de um termo não terminal como um sinal que se move ao longo das letras. Novamente, esse sinal também deve transportar um terminal, caso contrário você acaba com os mesmos problemas.MaaM

Movendo informações ao redor é fácil nas chamadas gramáticas monotónicos ( com | alfa |beta | ) usando regras como X A A X , que pode ser visto como X salto sobre A . Para gramáticas sensíveis ao contexto, é necessário dividir isso em três etapas: X A X A X , X A XA A X , A A XA Xαβ|α|β|XAAXXAXAXAX,XAXAAX,AAXAX. em cada produção, uma letra é alterada no contexto apropriado. É preciso muita imaginação para ver esse processo não interagir com outras partes da derivação. Por exemplo, o que acontece quando o na última etapa é envolvido pela primeira vez em outra etapa de derivação?A

Isso pode não funcionar para palavras muito curtas, quando há mais informações do que posições disponíveis. A solução mais simples para isso é ignorar seqüências curtas em sua construção e gerá-las separadamente.

Hendrik Jan
fonte
Não seria necessário que a produção fosse vista em uma determinada ordem para que Ma → a não fosse usada antes de reorganizar os não terminais até o fim? Ou eu estou esquecendo de alguma coisa?
MrBolton
Eu adicionei uma nota na minha resposta. Em algumas soluções, aplicar essa produção muito cedo resultará em um formulário sentencial que não pode ser concluído com êxito. Em outros casos, as produções precisam ser sincronizadas com cuidado. Uma questão de bom senso e tentativa e erro.
21413 Hendrik
1

Resposta padrão curta: crie um LBA que aceite o idioma e use a simulação usada para provar que gramáticas sensíveis ao contexto e LBA definem o mesmo conjunto de idiomas. Mas é claro que não é isso que você procura.

Σ

Isso pode ser feito trocando um token de controle. Ou seja, a gramática esquerda escolhe uma regra, gera o token de controle de ajuste e o passa para a gramática correta. A gramática correta vê o token de controle e executa a regra de ajuste. Observe que você também pode implementar a comunicação bidirecional dessa maneira, mas não é necessário aqui.

Sε

Uma maneira de conseguir isso é usar o mesmo truque de algumas provas sobre o LBA: gere todos os não terminais que você precisará primeiro , ou seja, prepare a "fita". Mais tarde, "mova-se" nessa fita. Somente "no final", substitua todos os não terminais por terminais.

G=(N,Σ,δ,S)Σ={a,b}Nδ

SX^lSXraaaaababbababbbbaabbεSXlSXrXlX^r

l,r

X^lXlXγX^lγX^lXαXγXαγ

(α,γ)Σ2XaXb

XlXα

X^lγXlX^lXlγX^lγXαX^lXαγXlγXlXlXlγXlγXαXlXαγXαγXβXαXβγ

(α,β,γ)Σ3

XlγX^rXlX^rγXαγX^rXαX^rγX^rγXrXγX^rX^rγXγ

(α,γ)Σ2

Xαα

αΣ

Xαα

R

ABCD



ABAYRAYRXRYRXRYRXRDXRDCD

Lk={wkwΣ}L=i1LkLkL

Rafael
fonte
0

X

w|w|1ε

aXaaa,  aXbab,  bXaba,  bXbbb

w

Rmn
fonte
No entanto, o uso da abordagem do @ hendrik-jan salva duas regras.
Rmn