Exemples de LL(1), LR(1), LR(0), LALR(1) les grammaires?
Est-il une bonne ressource en ligne avec une collection de grammaires pour certains des principaux l'analyse des algorithmes (LL(1), LR(1), LR(0), LALR(1))? J'ai trouvé de nombreuses grammaires qui tombent dans ces familles, mais je ne connais pas la bonne ressource d'où quelqu'un a écrit un grand nombre d'exemple les grammaires.
Quelqu'un sait-il de la ressource?
- Ce sont l'analyse des algorithmes de ne pas grammaires. Entendez-vous des exemples de syntaxe qui nécessite un type de l'analyseur ou d'une autre?
- J' pense techniquement parlant, LL(1), etc. sont en fait des familles de grammaires. L'analyse des algorithmes nommée d'après eux sont des algorithmes qui peuvent analyser toute la grammaire qui se trouve être dans la famille des langues.
- Je vous suggère de prendre un coup d'oeil à la ANTLR site web. Il a quelques bonnes grammaires de langages 😉
- Si vous avez eu une telle liste, ce qui sur terre feriez-vous avec elle? La liste des noms dans chaque catégorie ne semble pas très intéressant en lui-même; vous ne voulez sûrement pas à réellement traiter le contenu de toutes ces grammaires?
- Baxter - je suis en train de l'enseignement d'une compilateurs cours et continuer de se faire voler exemple les grammaires à partir d'autres sources, quand je veux montrer les différentes analyse des algorithmes. Il est difficile (mais faisable) pour créer des grammaires non trivial dans ces catégories, et très difficile de faire des grammaires qui sont LR(1), mais pas LALR(1) ou LALR(1), mais pas SLR(1). J'espérais trouver des exemples du monde réel les grammaires qui correspondent à ces descriptions de sorte que je puisse me concentrer sur la présentation, il a le matériel plutôt que de peaufiner les grammaires.
- Haïssent, peut-être qu'il a disparu parce que vous avez voulu trop en faire.
- Le livre dans ma réponse ci-dessous semble avoir de bons exemples qui serait un bon ajustement pour un compilateur de classe.
- Le suivant lien vers mon dépôt GitHub contient 4 LL(1) les grammaires, un LR(0) grammaire n'est PAS LL(1), un SLR(1) qui n'est PAS LR(0) et un LR(1) qui n'est PAS SLR(1). TOUS les exemples peut être compilé et exécuté en écrivant simplement "make" dans le terminal de tout *.nix comme OS.
Vous devez vous connecter pour publier un commentaire.
Techniques D'Analyse - Un Guide Pratique a plusieurs exemples (c'est à dire probablement une demi-douzaine par type) de presque tous les types de grammaire. Vous pouvez acheter de la 2ème édition livre, bien que la 1ère édition est disponible gratuitement sur l'auteur site web au format PDF (près de bas de lien).
L'auteur a aussi quelques test grammaires qu'il bundles avec ses exemples de code à partir de la deuxième édition, qui peut être trouvé ici.
Remarque: tous ces grammaires sont de petite taille (moins d'une douzaine de règles), car évidemment d'un livre.
Exemples de wikipedia
LL(1)
grammaire
entrée
l'analyse des mesures
LR(0)
grammaire
entrée
l'analyse des mesures
LR(1)
grammaire
entrée
l'analyse des mesures
LALR
grammaire
entrée
l'analyse des mesures
Vous pouvez également avoir un coup d'oeil à
Je ne voudrais pas vous attendre à trouver une grande collections de grammaires organisée de cette façon sur le but. Ce serait l'organisateur de gain en retour?
Ce que vous pourriez avoir une chance de le faire, c'est de trouver un analyseur de générateurs qui correspondent à chaque famille (par exemple, LL(1)), et aller chercher les instances d'entrées pour que l'analyseur générateur, qui seront tous LL(1) par définition. Par exemple, ANTLR de grammaires sont toutes différentes versions de LL(k) en fonction de la version de ANTLR vous chercher (la description de la ANTLR version dira ce k il accepte); Bison grammaires sont tous LALR(1) [en ignorant la récente GLR option]. Si vous allez sur mon site (voir bio), vous verrez une liste de grammaires qui sont toutes à peu près libre de tout contexte (qui est, non pas dans les catégories que vous décrivez).
EDIT: Remarque @Bart Kier a précisé que les ANTLR peut marquer explicitement une grammaire LL(k) pour k.
options { k=1; }
pour LL(1), ou, par défautoptions { k=*; }
pour LL(k).k=*
, a été ajoutée dans le ANTLR v3. ANTLR v2.x a toujours eu un fixek
. C'est hors de ma tête, je vais jeter un oeil à ma copie de la ANTLR de référence à l'avenir et si je ne me trompe, je vais rectifier. Mais je suis sûr que c'est correct.