J'étudie pour mes les langages informatiques test, et il y a une idée que j'ai des problèmes pour envelopper ma tête.Grammaires régulières vs Context
J'ai compris que grammaires régulières sont plus simples et ne peuvent pas contenir d'ambiguïté, mais ne peuvent pas faire beaucoup de tâches qui sont nécessaires pour les langages de programmation. J'ai également compris que grammaires contextuelles permettent l'ambiguïté, mais permettent certaines choses nécessaires pour les langages de programmation (comme les palindromes).
Ce que je vais avoir du mal à se comprendre comment je peux tirer de ce qui précède en sachant que nonterminals de grammaire régulière peut correspondre à un terminal ou un non-terminal suivi d'un terminal ou qu'un des cartes non terminaux sans contexte toute combinaison de terminaux et de non-terminaux.
Quelqu'un peut-il m'aider à mettre tout cela ensemble?
Première: Les grammaires régulières peuvent être ambiguës (exemple de Kai Kuchenbecker: S -> aA | aB, B -> a, A -> a). La seule chose est qu'il n'y a qu'une seule façon de positionner les nœuds dans l'arbre de syntaxe (par exemple l'ambiguïté d'associativité n'existe pas quand une grammaire régulière est utilisée). Deuxièmement: Il peut y avoir plus d'un côté droit à un non-terminal (A -> a, A -> aA) et wikipedia inclut même epsilon comme troisième alternative: http://en.wikipedia.org/wiki/ Regular_grammar) – user764754
ambiguïté vient quand une phrase peut être dérivée de votre grammaire dans plus d'un chemin de dérivation.avoir simplement plus d'une règle de production pour un non-terminal ne rend pas la grammaire ambiguë. – Sujoy
Cet exemple est faux. Si nous imaginons que les règles complètes sont 'A-> a | c' et 'B-> b' alors cette grammaire permet les non-palindromes. Par exemple, je pourrais produire: 'S-> ABA-> aBA-> abA-> abc'. Le problème est que nous ne voulons pas produire deux variables dans la première règle, mais plutôt deux terminaux. Une possibilité pour une grammaire qui permet des palindromes est: 'S -> aSa | bSb | a | b' – gdiazc