Der Titel ist die Frage: Sind die Wörter "Lexer" und "Parser" Synonyme, oder sind sie anders? Es scheint, dass Wikipedia die Wörter synonym verwendet, aber Englisch ist nicht meine Muttersprache, also kann ich nicht sicher sein.
Ein Lexer wird verwendet, um die Eingabe in Token aufzuteilen, während ein Parser verwendet wird, um aus dieser Sequenz von Token einen abstrakten Syntaxbaum zu konstruieren.
Nun könnte man einfach sagen, dass die Token einfach Zeichen sind und einen Parser direkt verwenden, aber es ist oft praktisch, einen Parser zu haben, der nur einen Token voraussehen muss, um zu bestimmen, was er als nächstes tun wird. Daher wird normalerweise ein Lexer verwendet, um die Eingabe in Token aufzuteilen, bevor der Parser sie sieht.
Ein Lexer wird normalerweise mit einfachen Regeln für reguläre Ausdrücke beschrieben, die der Reihe nach getestet werden. Es gibt Werkzeuge wie lex
, die aus einer solchen Beschreibung automatisch Lexer generieren können.
Ein Parser dagegen wird normalerweise durch Angabe einer Grammatik beschrieben. Auch hier gibt es Werkzeuge wie yacc
, die aus einer solchen Beschreibung Parser generieren können.
Nein. Ein Lexer zerlegt den Quelltext in Token, während ein Parser die Reihenfolge der Token entsprechend interpretiert.
Sie sind anders.
Ein Lexer nimmt einen Strom von Eingabezeichen als Eingabe und erzeugt Token (auch bekannt als "Lexeme") als Ausgabe.
Ein Parser nimmt Tokens (Lexeme) als Eingabe und erzeugt (zum Beispiel) einen abstrakten Syntaxbaum, der Statements darstellt.
Die beiden sind jedoch genug, dass ziemlich viele Leute (vor allem diejenigen, die noch nie einen Compiler oder Interpreter geschrieben haben) sie gleich behandeln oder (häufiger) "Parser" benutzen, wenn sie das wirklich tun Mean ist "Lexer".
Soweit ich weiß, sind Lexer und Parser in der Bedeutung verwandt, sind aber keine genauen Synonyme. Obwohl viele Quellen sie als einen ähnlichen Lexer verwenden (Abkürzung des lexikalischen Analysators), identifiziert er Token, die für die Sprache von der Eingabe relevant sind; während Parser bestimmen, ob ein Tokenstrom die Grammatik der betrachteten Sprache erfüllt.
Tags und Links language-agnostic parsing lexer synonym