Je dois écrire une fonction qui vérifie si les chaînes d'entrée sont valides pour une spécification de langue donnée. Je pensais que ce serait un CFG standard -> Chomsky Normal Form, puis CYK parsing, mais l'une des règles dans le langage empêche cela.Conversion d'une spécification de langage en règles de production (je ne sais pas si c'est un CFG ou un CSG)
Certaines règles sont simples, si nous définissons les bornes {a,b,c,d,e,f,P,Q,R,S}
, puis les chaînes valides sont
1) L'une des bornes minuscules dans l'isolement
2) Si « x » est une chaîne valide, est donc Sx
Mais la troisième règle est
3) Si X et y sont des chaînes d'entrée valides, sont donc PXY, QXY, RXY
où {P,Q,R}
sont les bornes restantes majuscules et X et Y sont des non-terminaux.
À quoi ressemblerait la règle de production pour cela? Je pensais que ce serait quelque chose comme
XY -> PXY (and QXY, RXY)
mais il y a deux problèmes avec ceci. La première est que ce n'est pas une règle CFG - est-ce que cela signifie que ce langage définit un CSG à la place?
Et le second est que cela ne fonctionne pas, parce que
XY -> PXY -> PPXY
ne serait pas un message valide dans tous les cas.
Commencez à poser de telles questions sur [CSTheory] (http://cstheory.stackexchange.com/) –