Alguém pode ajudar com isso:
Estou tentando escrever uma gramática para esse idioma? Eu não sei como fazer isso. Eu tentei isso:
Alguém pode ajudar com isso:
Estou tentando escrever uma gramática para esse idioma? Eu não sei como fazer isso. Eu tentei isso:
Respostas:
Considere os dois idiomas:
Convença-se de que .
No , o número de são mais que o dobro de, então tem que haver pelo menos um (quando não houver 's). Além disso, para cada adição depelo menos 2 deve ser adicionado. Você pode gerar Como:
é um pouco mais complicado. O número desão menos que o dobro do número de para que possa haver , mas diferente de zero 's. Considere o "caso base" de . A cadeia pode ser ou . Vamos deixar a primeira regra gerar esse caso base. Depois disso, observe que, para cada adição de, podemos aumentar o número de é no máximo . Então podemos adicionar, ou para cada adição de . Vamos deixar a segunda regra lidar com isso. Então, o CFG para torna-se:
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 para, deixe o estado inicial do levar ao estado inicial de ou de :
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.
Comece com uma gramática para :