Voraussetzung – Konstruktion der LL(1)-Parsing-Tabelle , Klassifizierung von Top-Down-Parsern 
Parsing ist der Prozess, um zu bestimmen, ob das Startsymbol das Programm ableiten kann oder nicht. Wenn das Parsing erfolgreich ist, dann ist das Programm ein gültiges Programm, andernfalls ist das Programm ungültig. 
Generell gibt es zwei Arten von Parsern: 
 

  1. Top-Down-Parser: 
    • Bei dieser Parsing-Technik erweitern wir das Startsymbol auf das gesamte Programm.
    • Rekursiver Abstieg und LL-Parser sind die Top-Down-Parser.
  2. Bottom-Up-Parser: 
    • Bei dieser Parsing-Technik reduzieren wir das gesamte Programm auf das Startsymbol.
    • Operator Precedence Parser, LR(0)-Parser, SLR-Parser, LALR-Parser und CLR-Parser sind die Bottom-Up-Parser.

Rekursiver Abstiegs-Parser: 
Es ist eine Art Top-Down-Parser. Ein Top-Down-Parser baut den Parse-Baum von oben nach unten auf, beginnend mit dem nicht-terminalen Start. Ein prädiktiver Parser ist ein Sonderfall des rekursiven Descent-Parsers, bei dem kein Backtracking erforderlich ist. 
Durch sorgfältiges Schreiben einer Grammatik bedeutet das Eliminieren von Linksrekursion und Linksfaktorisieren daraus, die resultierende Grammatik ist eine Grammatik, die von einem rekursiven Abstiegsparser analysiert werden kann.
Beispiel:

 

Vor dem Entfernen der linken RekursionNach dem Entfernen der linken Rekursion
E –> E + T | T 
T –> T * F | F 
F –> ( E ) | Ich würde
E –> T E' 
E' –> + T E' | e 
T –> F T' 
T' –> * F T' | e 
F –> ( E ) | Ich würde

**Hier ist Epsilon
For Recursive Descent Parser, wir werden ein Programm für jede Variable schreiben. 
 

Example:
Grammar: E --> i E'
E' --> + i E' | e

C

int main()
{
    // E is a start symbol.
    E();
 
    // if lookahead = $, it represents the end of the string
    // Here l is lookahead.
    if (l == '$')
        printf("Parsing Successful");
}
 
// Definition of E, as per the given production
E()
{
    if (l == 'i') {
        match('i');
        E'();
    }
}
 
// Definition of E' as per the given production
E'()  
{
    if (l == '+') {
        match('+');
        match('i');
        E'();
    }//The second condition of E'
    else if ( l == 'e' )
    {
      match('e');
    }
        return ();
}
 
// Match function
match(char t)
{
    if (l == t) {
        l = getchar();
    }
    else
        printf("Error");
}

Lernen Sie alle GATE CS-Konzepte mit kostenlosen Live-Kursen auf unserem YouTube-Kanal kennen.