2010-07-04 18 views
0

Je prends actuellement un cours de programmation en classe.LL (1) grammaires, à la recherche d'une bonne ressource, claire

Nous apprenons sur LL grammaires (1).

Je trouve le livre et des conférences à être un peu floue et espérait que quelqu'un pouvait me référer à une bonne ressource.

J'ai trouvé quelques bons tutoriels sur youtube pour l'Etat finate des automates et des automates d'état déterminées, mais je ne peux pas trouver quelque chose de similaire pour LL grammaires (1). Il semble qu'il y ait un peu d'info, c'est juste déroutant. Vous recherchez une approche "étapes faciles".

Passez un bon week-end! Joyeux 4 juillet à vous tous Américains!


Modifier: Je comprends comment les premiers travaux, mais je ne suis pas clair sur le suivi.

Répondre

2

LL signifie fondamentalement «top down». Un analyseur top-down est quelque chose qui commence par la proposition de vouloir d'abord analyser l'élément de premier niveau dans une grammaire, consomme les jetons nécessaires pour démarrer cet élément, puis procède à recurring "vers le bas" vers des éléments plus détaillés dans la grammaire.

La meilleure façon de comprendre l'analyse top-down est de mettre en œuvre un analyseur. Un exemple hypothétique peut ressembler à:

void parseFile() 
{ 
    while(classesContinue()) 
    { 
     parseClass(); 
    } 
} 

void parseClass() 
{ 
    consume(Tokens.Class); 
    consume(Tokens.ID); 
    consume(Tokens.LCurly); 
    while(membersContinue()) 
    { 
     parseMember(); 
    } 
    consume(Tokens.RCurly); 
} 

Le nombre parenthèse à côté de LL (LL (1)), est le nombre maximum de regarder vers l'avenir nécessaire pour mettre en œuvre des « choix » qui doivent être faites par l'analyseur. Par exemple, « parseMember » peut ressembler à:

void parseMember() 
{ 
    parseTypeName(); 
    parseID(); 
    switch (lookAhead()) 
    { 
     case Tokens.Semi: 
     case Token.Equals: 
      parseVariableDecl(); 
      break; 
     default: 
      parseMethod(); 
      break; 
    } 
} 

Dans ce cas, l'analyseur serait LL (1), car il a besoin d'un signe de préanalyse.

Dans tous les cas, une LL (1) La grammaire est simplement une spécification d'un analyseur LL (1) dans une notation formelle, généralement une variante de EBNF.

Cela aide-t-il?

0

Fondamentalement, l'ensemble de la suite d'un non-terminal A est juste ce qu'il dit sur l'étain; c'est l'ensemble des non-terminaux qui peuvent suivre immédiatement après un A.

Vous pouvez lire l'article Wikipedia sur LL grammars and parsers, en particulier la partie sur les conflits - qui pourrait vous aider à comprendre un peu mieux.