Je pensais aux grammaires pour les langues sensibles à l'indentation et il semble que les grammaires CF feraient l'affaire si elles étaient combinées avec des paramètres. À titre d'exemple, considérons ce fragment pour la grammaire Python simplifiée au format de type ANTLR:
// on top-level the statements have empty indent
program
: statement('')+
;
// let's consider only one compound statement and one simple statement for now
statement(indent)
: ifStatement(indent)
| passStatement(indent)
;
passStatement(indent)
: indent 'pass' NEWLINE
;
// statements under if must have current indent plus 4 spaces
ifStatement(indent)
: indent 'if' expression ':' NEWLINE (statement(indent ' ')+)
;
Ma question: ce genre de grammaires (CFG avec paramètres) a-t-il un nom?
Il semble qu'il ne serait pas difficile d'écrire un analyseur de descente récursif pour cette grammaire (les paramètres devraient être essentiellement des analyseurs). Quelles pourraient être les difficultés de cette approche?
L'ajout de paramètres élève-t-il la classe de langue prise en charge au-dessus du contexte?
Réponses:
Les grammaires d'affixe ( grammaires paramétriques sans contexte) ont été étudiées en détail par l'éminent informaticien néerlandais Cornelis HA Koster , à commencer par son article de 1962 "Basic English, a generative grammar for a part of English", co-écrit avec LGLT Meertens. En 1970, il a produit un formalisme du concept; un aperçu utile est disponible dans son article de 1971 "Affix Grammars for Programming Languages", dont j'ai trouvé une version sur Citeseer .
Dans cet article, Koster compare son formalisme (et un autre similaire) avec les grammaires à deux niveaux de Van Wijngaarden , et les trouve très similaires.
La bibliographie annotée inestimable de Dick Grune sur les techniques d'analyse comprend un grand nombre d'autres références utiles pour les grammaires d'affixe et d'autres formalismes non chomskyiens. (Voir la section 18.2.6 de la bibliographie, bien qu'il existe des articles utiles dans d'autres sections.) Grune couvre brièvement les grammaires d'affixe au §15.3.2 de la deuxième édition de Parsing Techniques: A Practical Guide (et encore plus brièvement dans la première édition , disponible en ligne) mentionnant le fait qu'il est facile d'adapter des techniques d'analyse descendante (et autres).
Koster, qui était également rédacteur en chef du rapport Algol 68, était le développeur original du langage de description du compilateur (CDL) , basé sur ses idées sur les grammaires d'affixe. Cette boîte à outils et ses dérivés ultérieurs ont été utilisés dans la production pendant de nombreuses années. Cette page , que j'ai trouvée avec une recherche Google et dont je ne peux garantir la permanence, contient des liens vers le manuel et le site de téléchargement de CDL3.
la source
Prenez le lemme de pompage pour les CFG :
Prenez la grammaire
Cela décrit un triangle étoilé:
Cela signifie que le triangle étoilé n'est pas un langage sans contexte.
Ou un exemple plus simple:
la source
Je n'ai jamais vu ce formalisme présenté (même dans quelque chose comme les techniques d'analyse de Grune ). grammaire de structure de phase sans restriction (c'est-à-dire plus puissante que sensible au contexte, vous pouvez écrire une grammaire VW qui donne tous les programmes d'arrêt).
la source