Existe-t-il un algorithme d'analyse CFG non général qui reconnaît EPAL?


23

EPAL, la langue des palindromes pairs, est définie comme la langue générée par la grammaire sans contexte suivante sans ambiguïté:

Saa

Sbb

SaSa

SbSb

EPAL est le «fléau» de nombreux algorithmes d'analyse: je n'ai pas encore rencontré d'algorithme d'analyse pour les CFG sans ambiguïté qui puisse analyser toute grammaire décrivant le langage. Il est souvent utilisé pour montrer qu'il existe des CFG sans ambiguïté qui ne peuvent pas être analysés par un analyseur particulier. Cela a inspiré ma question:

Existe-t-il un algorithme d'analyse qui accepte uniquement les CFG sans ambiguïté qui fonctionnent sur EPAL?

Bien sûr, on peut concevoir un analyseur ad hoc à deux passes pour la grammaire qui analyse la langue en temps linéaire. Je suis intéressé par l'analyse de méthodes qui n'ont pas été conçues spécifiquement avec EPAL à l'esprit.


1
J'ai presque peur de demander: qu'est-ce qui ne va pas avec LL (1) par descente récursive?
Raphael

3
La descente récursive sans retour arrière ne peut pas gérer EPAL car le langage n'est pas LL (k) pour tout k. La descente récursive avec retour en arrière peut gérer la grammaire en temps O(n2) , mais c'est un algorithme général avec un comportement exponentiel dans le pire des cas, ce qui n'est pas ce que je recherche.
Alex ten Brink

n'est pas exponentiel, il est quadratique. O ( 2 N ) est exponentiel. O(N2)O(2N)
Victor Stafusa

1
@Victor: le retour arrière a un comportement exponentiel sur certaines grammaires, mais pas sur cette grammaire particulière. Pourtant, étant un algorithme qui fonctionne sur des grammaires ambiguës, il le réduit comme réponse à ma question.
Alex ten Brink

1
@jmad: mon intention n'est pas d'analyser la langue (vous pouvez le faire trivialement en temps linéaire), mais plutôt de satisfaire ma curiosité: je l'ai vu être utilisé comme exemple d'une langue qui ne peut pas être analysée par une méthode d'analyse tant de fois que je suis curieux de savoir s'il existe une méthode d'analyse qui le reconnaît.
Alex ten Brink

Réponses:


14

Considérez l'esquisse suivante d'une stratégie d'analyse à vos risques et périls.

Au lieu de lire l'entrée uniquement d'une extrémité, nous lisons des deux côtés et recherchons des règles de correspondance. Nous pouvons le faire dans un style de descente récursive; dans un appel à , trouvez le préfixe w et le suffixe v à l'entrée de telle sorte qu'il y ait une règle A w B v , descendez à B ( ) sur le mot restant. S'il n'y a pas de règle de correspondance, rejetez le mot.A()wvAwBvB()

AwBvAwBv v s v Θ ( n 2 )wpwvsvΘ(n2)

L'idée ne fonctionne pas du tout pour les grammaires non linéaires. Les grammaires linéaires mais ambiguës ne peuvent en général pas être analysées sans retour en arrière (pour les entrées négatives au moins).


  1. w v v w swpv signifie ici que et , c'est-à-dire qu'aucun des deux mots n'est un préfixe de l'autre. est similaire pour les suffixes.wvvws

1
Excellent! Exactement ce que je cherchais. C'est formidable qu'un langage qui n'est pas pour n'importe quel soit analysable par un algorithme aussi simple. kNLR(k)k
Alex ten Brink

1
Après y avoir réfléchi, j'ai découvert une erreur mineure dans votre description: la grammaire linéaire est sans ambiguïté, mais il n'y a pas de préfixe unique tel que vous le décrivez. Il y a toujours un préfixe unique, mais vous devrez peut-être regarder à l'intérieur du terminal pour l'obtenir, et votre temps d'exécution devient . Cependant, votre algorithme fonctionne sur . O ( n 2 ) E P A LSaAb|aBb,Aa,BbO(n2)EPAL
Alex ten Brink

@AlextenBrink Bonne prise. J'ai édité pour tenir compte de cela.
Raphael
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.