Gramática livre de contexto para {a ^ ib ^ j | i, j ≥ 0; eu ≠ 2j}


7

Alguém pode ajudar com isso:

L={aibj∣i,j≥0 and i≠2j}

Estou tentando escrever uma gramática para esse idioma? Eu não sei como fazer isso. Eu tentei isso:
S→aaAb∣aAA→aA∣a


5
Você pode simplificar a tarefa dividindo o idioma: L={aibj∣i<2j}∪{aibj∣i>2j}
— Mike B.

3
O raciocínio é que os CFGs são fechados em união.
— Paresh

11
Basicamente, a pergunta já foi respondida aqui: Contexto gratuito gramática para a linguagem
— Hendrik Jan

Respostas:


7

Considere os dois idiomas:
L1={aibj∣i,j≥0 and i>2j}
L2={aibj∣i,j≥0 and i<2j}

Convença-se de que L=L1∪L2.

No L1, o número de asão mais que o dobro deb, então tem que haver pelo menos um a (quando não houver b's). Além disso, para cada adição debpelo menos 2 adeve ser adicionado. Você pode gerarL1 Como:

S1→aAA→aaAb∣aA∣ε

L2é um pouco mais complicado. O número deasão menos que o dobro do número de bpara que possa haver 0 a, mas diferente de zero b's. Considere o "caso base" de1 b. A cadeia pode serb ou ab. Vamos deixar a primeira regra gerar esse caso base. Depois disso, observe que, para cada adição deb, podemos aumentar o número de aé no máximo 2. Então podemos adicionar0, 1ou 2 apara cada adição de b. Vamos deixar a segunda regra lidar com isso. Então, o CFG paraL2 torna-se:

S2→Bb∣aBbB→Bb∣aBb∣aaBb∣ε

Observe que os CFGs são fechados em união, ou seja, a união de dois CFGs também é um CFG. Então, para obter o CFG paraL, deixe o estado inicial S do L levar ao estado inicial de L1ou de L2:

S→S1∣S2

O restante das regras permanece o mesmo dos dois idiomas. Pode haver uma gramática mais simples, mas essa foi a primeira que veio à mente.


0

Comece com uma gramática para {aib2i:i≥0}:

S→aSbb∣ϵ
Agora corte-o para que haja mais a do que bb:
S→aSbb∣AA→aA∣a
A modificação para forçar mais bé semelhante e deixado para você. Acrescenta uma produção não-terminal e três produções.

3
Isso não irá gerar strings de todos aou todos b, que fazem parte de L.
— Paresh

Se eu mudar a pergunta para i, j≥1 e i ≠ j e i <2j, como posso pensar em solução?
— user6885

@Paresh, a parte do extra bs é deixado para concluir. E tudoas é S⇒A⇒∗ak.
— 21813 vonbrand

Aah ... não sei como senti falta disso. Desculpa!
— Paresh

@ Vonbrand o problema que eu não sei, eu devo fazer o bso extra que não será mais do que o a.
— user6885
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.