web-dev-qa-db-fra.com

Exemples de grammaires LL (1), LR (1), LR (0), LALR (1)?

Existe-t-il une bonne ressource en ligne avec une collection de grammaires pour certains des principaux algorithmes d'analyse (LL (1), LR (1), LR (0), LALR (1))? J'ai trouvé de nombreuses grammaires individuelles qui appartiennent à ces familles, mais je ne connais aucune bonne ressource où quelqu'un a rédigé un grand nombre d'exemples de grammaires.

Quelqu'un connaît-il une telle ressource?

55
templatetypedef

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 le livre de la 2e édition, bien que la 1re édition soit disponible gratuitement sur le site de l'auteur site Web en PDF (près du bas du lien).

L'auteur a également quelques grammaires de test qu'il regroupe avec ses exemples de code de la deuxième édition, qui peuvent être trouvés ici .

Remarque: toutes ces grammaires sont petites (moins de quelques dizaines de règles), car il s'agit évidemment d'un livre publié.

19
Jason Moore

Exemples de wikipedia

LL (1)

grammaire

S -> F
S -> ( S + F )
F -> a

entrée

( a + a )

étapes d'analyse

S -> "(" S "+" F ")"
  -> ( "F" + F ) 
  -> ( "a" + F ) 
  -> ( a + "a" )       

LR (0)

grammaire

(1) E → E * B
(2) E → E + B
(3) E → B
(4) B → 0
(5) B → 1 

entrée

1 + 1

étapes d'analyse

need to build a parser table and traverse through states.

LR (1)

grammaire

S’ -> S S 
S  -> C C 
C  -> c C | d

entrée

cd

étapes d'analyse

large table

LALR

grammaire

A -> C x A | ε
B -> x C y | x C
C -> x B x | z

entrée

xxzxx

étapes d'analyse

traverse large parser table

Vous voudrez peut-être aussi jeter un œil à

36
Prashant Bhate

Je ne m'attendrais pas à ce que vous trouviez une grande collection de grammaires organisées de cette façon exprès. Que gagnerait l'organisateur en retour?

Ce que vous pourriez avoir une chance de faire, c'est de trouver des générateurs d'analyseurs qui correspondent à chaque famille (par exemple, LL (1)), et d'aller chercher des instances d'entrées pour ce générateur d'analyseurs, qui seront toutes LL (1) par définition. Par exemple, les grammaires d'ANTLR sont toutes différentes versions de LL (k) selon la version d'ANTLR que vous choisissez (la description de la version d'ANTLR indiquera ce qu'elle accepte); Les grammaires des bisons sont toutes LALR (1) [en ignorant la récente option GLR]. Si vous allez sur mon site Web (voir la biographie), vous voyez une liste de grammaires qui sont toutes à peu près sans contexte (c'est-à-dire, dans aucune des classes que vous décrivez).

EDIT: Notez la clarification de @Bart Kier selon laquelle ANTLR peut marquer explicitement une grammaire comme LL (k) pour k spécifique.

2
Ira Baxter