Existe-t-il un algorithme / une procédure systématique pour tester si une langue est hors contexte?
En d'autres termes, étant donné un langage spécifié sous forme algébrique (pensez à quelque chose comme ), testez si le langage est hors contexte ou non. Imaginez que nous écrivons un service Web pour aider les élèves dans tous leurs devoirs; vous spécifiez la langue et le service Web affiche "sans contexte" ou "non sans contexte". Existe-t-il une bonne approche pour automatiser cela?
Il existe bien sûr des techniques de preuve manuelle, comme le lemme de pompage, le lemme d'Ogden, le lemme de Parikh, le lemme d'échange, et plus ici . Cependant, ils nécessitent chacun un aperçu manuel à un moment donné, il n'est donc pas clair comment transformer l'un d'eux en quelque chose d'algorithmique.
Je vois que Kaveh a écrit ailleurs que l'ensemble des langues non contextuelles n'est pas récursivement énumérable, il semble donc qu'il n'y ait aucun espoir qu'un algorithme fonctionne sur toutes les langues possibles. Par conséquent, je suppose que le service Web devrait pouvoir afficher "sans contexte", "pas sans contexte" ou "je ne peux pas le dire". Existe-t-il un algorithme qui serait souvent en mesure de fournir une réponse autre que "Je ne peux pas dire", dans de nombreuses langues que l'on est susceptible de voir dans les manuels? Comment construiriez-vous un tel service Web?
Pour que cette question soit bien posée, nous devons décider comment l'utilisateur spécifiera la langue. Je suis ouvert aux suggestions, mais je pense à quelque chose comme ça:
où est un mot-expressions et S est un système d'inégalités linéaires sur les variables de longueur, avec les définitions suivantes:
Chacun de est une expression verbale. (Ceux - ci représentent des variables qui peuvent contenir un mot dans Σ * .)
Chacun de est une expression verbale. (Implicitement, Σ = { a , b , c , … } , donc a , b , c , … représentent un seul symbole dans l'alphabet sous-jacent.)
Chacun d' est un mot-expression, si η est une variable de longueur.
La concaténation des expressions-mots est une expression-mot.
Chacun de est une variable de longueur. (Il s'agit de variables pouvant contenir n'importe quel nombre naturel.)
Chacun Est une variable de longueur. (Ils représentent la longueur d'un mot correspondant.)
Cela semble assez large pour gérer la plupart des cas que nous voyons dans les exercices de manuels. Bien sûr, vous pouvez remplacer toute autre méthode textuelle de spécification d'une langue sous forme algébrique, si vous le souhaitez.
Réponses:
Selon le théorème de Rice , voir si le langage accepté par une machine de Turing a une propriété non triviale (ici: être sans contexte) n'est pas décidable. Il vous faudrait donc restreindre la puissance de votre machine de reconnaissance (ou description) pour qu'elle ne soit pas complète Turing pour espérer une réponse.
Pour certaines descriptions de langage, la réponse est triviale: si c'est par des expressions régulières, elle est régulière, donc sans contexte. Si c'est par des grammaires sans contexte, idem.
la source
Toute langue est acceptée par un automate Push Down, est une CFL. Voici une ventilation détaillée pour déterminer si une langue est CFL ou non. vérifier si la langue est CFL ou non
la source
Essayez le logiciel JFLAP si vous voulez simplement vérifier un CFG. Vous pouvez peut-être même demander aux développeurs JFLAP de vous donner le code ou l'algorithme du logiciel. vous pouvez obtenir JFLAP ici http://www.jflap.org/jflaptmp/ il est gratuit mais il nécessite JDK ou JRE ou quelque chose. Ou peut-être pouvez-vous essayer d'autres logiciels similaires et leurs développeurs.
la source