Compiler: Hauptunterschied zwischen lexikalischem Analysator und Parser?


Antwort 1:

Betrachten wir es als Analogie und betrachten wir Englisch als unsere Programmiersprache.

Der Lexical Analyzer unterteilt die Eingabe in gültige Token, dh kleinere Entitäten, die sinnvoll sind und in der Sprache gut definiert sind:

Zum Beispiel - "schön" ist ein gültiges Token, da es ein gültiges Wort auf Englisch ist.

Während "dsefuewfiu" kein gültiges Token ist, macht es keinen Sinn.

Während Parser nach der Grammatik sucht, dh der Satz den Gesetzen der Satzbildung in englischer Sprache entspricht:

Zum Beispiel ist "Mein Name ist Rahul" ein gültiger englischer Satz.

Während "name my is Rahul" keinen Sinn ergibt.

Dies ist der grundlegende Unterschied zwischen einem lexikalischen Analysator und einem Parser.


Antwort 2:

Ein lexikalischer Analysator analysiert normalerweise reguläre Ausdrücke und liefert eine Ausgabe, die ein Parser in Form von Token verwendet: Bezeichner, Zeichenfolgen, Zahlen, Operatoren.

Ein Parser implementiert eine übergeordnete Grammatik unter Verwendung der Token als Eingabe. Es macht Dinge, die ein lexikalischer Analysator nicht kann, wie zum Beispiel Balance-Klammern.

Es ist technisch nicht notwendig, es in zwei Schritte wie diesen zu unterteilen, aber konzeptionell ist es viel einfacher, dies zu tun.


Antwort 3:

Lexical Analyzer ist die erste Phase des Kompilierungsprozesses, bei der das Quellprogramm als Eingabe verwendet wird und eine Folge von aussagekräftigen Zeichen erzeugt wird, die als Lexeme bezeichnet werden ...

Diese Lexeme dienen als Eingabe für

Nächste Syntaxanalysephase.

In dieser Phase verwendet der Parser dieses Lexem als Eingabe und erzeugt eine Ausgabe in Form eines Syntaxbaums.