Les langues déterministes sans contexte (DCFL) et les langues visiblement pushdown (VPL) sont deux ensembles de langues formelles entre les langues sans contexte (CFL) et les langues régulières (REG). Existe-t-il une notation lisible qui peut être exprimée en ASCII simple comme Backus-Naur-Form pour CFL et des expressions régulières pour REG?
fl.formal-languages
Jakob
la source
la source
Réponses:
Concernant les DCFL, je ne vois pas de meilleure notation que la fonction de transition de l'automate déterministe pushdown, c'est-à-dire écrire explicitement des règles de forme avec q ,q, z, a → q′, γ états q ′ dans Q , z un symbole de pile, γ une séquence de symboles de pile, et aq, q′ Q z γ une un symbole d'entrée ou la chaîne vide. La notation elle-même n'applique pas le déterminisme, mais elle est facilement vérifiée. En utilisant une notation de grammaire sans contexte (comme BNF), vous allez rencontrer des problèmes car les DCFL sont une sous-classe appropriée de CFL, et comme indiqué par DaniCL, vous ne pouvez pas décider en général, étant donné un CFG, si son langage est déterministe.
En ce qui concerne les VPL, un style entre parenthèses / pour les CFG serait suffisant, avec des règles de forme oùA → a α b est un non terminal, a un symbole d'appel, b un symbole de retour et α uneUNE une b α
séquence deexpression régulière sur un mélange symboles internes et non terminaux. Étant donné que tout VPL est également un (D) CFL, vous pouvez également réutiliser la notation ci-dessus pour les automates de refoulement et vérifier que les opérations de pile correspondent aux appels et aux retours, ou noter la relation de transition d'un automate de mots imbriqué (qui serait moins redondant) .Edit: à bien y penser, une notation pour les schémas XML, comme la syntaxe compacte de RelaxNG --- qui est une notation ASCII ---, pourrait facilement être utilisée pour les VPL. Vous auriez juste besoin de faire respecter certaines conventions de nommage pour les balises, par exemple une balise d'ouverture « <ab> » pour un symbole appel d' correspondant une balise de fermeture « </ ab> » pour un symbole de retour b .une b
la source
Afin de trouver une représentation canonique, considérez ce qui suit: la classe de DCFL est équivalente à la classe de langages générés par les grammaires LR (k), qui est encore une fois équivalente à LR (1). Cela signifie que vous pouvez trouver une grammaire LR (1) pour chaque DCFL. Bien sûr, une grammaire LR (1) est toujours une grammaire sans contexte, mais avec une propriété spéciale: à partir des grammaires LR (1), nous pouvons facilement construire des tables d'analyse pour guider un analyseur déterministe (avec lookahead de 1 symbole, d'où LR (1)). Ces tables d'analyse seraient une autre représentation, quoique un peu moins lisible.
Soit dit en passant, sachez qu'il est indécidable qu'un langage sans contexte donné soit déterministe (Théorème de Greibach).
Je dois admettre que je n'ai jamais entendu parler de VPL.
la source