Sie suchen eine klare Definition dessen, was ein „tokenizer“, „Parser“ und „Lexer“ sind und wie sie miteinander in Beziehung und verwendet?

StackOverflow https://stackoverflow.com/questions/380455

  •  22-08-2019
  •  | 
  •  

Frage

Ich bin für eine klare Definition dessen, was ein „tokenizer“, „Parser“ und „Lexer“ auf der Suche sind und wie sie miteinander verwandt sind (zum Beispiel ist ein Parser einen tokenizer oder umgekehrt verwenden)? Ich brauche ein Programm zu erstellen, wird c / h Quelldateien geht durch Datendeklaration und Definitionen zu extrahieren.

Ich habe für Beispiele suchen und einige Informationen finden, aber ich wirklich kämpfen, die zugrunde liegenden Konzepte wie Grammatikregeln zu erfassen, analysieren Bäume und abstrakten Syntaxbaum und wie sie miteinander zusammenhänge. Schließlich müssen diese Konzepte in einem aktuellen Programm gespeichert werden, aber 1) wie sehen sie wie, 2) gibt es gemeinsame Implementierungen.

Ich habe bei Wikipedia zu diesen Themen und Programmen wie Lex und Yacc suchen, aber noch nie zuvor durch eine Compiler-Klasse (EE-Dur) Ich kann es schwer zu verstehen, vollständig zu finden bin gegangen, was los ist.

War es hilfreich?

Lösung

Ein Tokenizer einen Strom von Text in Token bricht, in der Regel durch Leerzeichen für Suche (Tabulatoren, Leerzeichen, Zeilenumbrüche).

Ein Lexer ist im Grunde ein tokenizer, aber es legt normalerweise keine zusätzlichen Kontext zu dem Token -. Dieses Token eine Zahl ist, dass die Token einen Stringliteral ist, das andere Token ist ein Gleichheitsoperator

Ein Parser nimmt den Strom von Tokens aus dem lexer und wandelt es in einen abstrakten Syntaxbaum, die das (in der Regel) Programm durch den ursprünglichen Text dargestellt.

Zuletzt habe ich geprüft, das beste Buch zu diesem Thema war "Compilers: Grundsätze, Techniken und Werkzeuge The Dragon Book " in der Regel nur bekannt als "".

Andere Tipps

Beispiel:

int x = 1;

A LEXER oder tokeniser wird, dass aufgespalten in Token 'int', 'X', '=', '1', ';'.

Ein Parser wird diese Token nehmen und sie in irgendeiner Weise zu verstehen:

  • Wir haben eine Erklärung
  • es ist eine Definition einer ganzen Zahl
  • die ganze Zahl wird als 'x'
  • 'x' sollte mit dem Wert 1
  • initialisiert werden

Ich würde sagen, dass ein Lexer und ein tokenizer ist im Grunde die gleiche Sache, und dass sie den Text nach oben in seine Bestandteile (die ‚Token‘) zerschlagen. Der Parser interpretiert dann die Token eine Grammatik verwendet wird.

würde ich nicht sehr hing allerdings auf präzise begriffliche Nutzung up - Menschen oft ‚Parsen‘ nutzen jede Handlung zu interpretieren einen Klumpen Text zu beschreiben

.

( zusätzlich zu den gegebenen Antworten )

  • Tokenizer wird auch entfernen Sie alle Kommentare, und nur zurückgeben Token , um die Lexer.
  • Lexer wird auch definieren Bereiche für die Token (Variablen / Funktionen)
  • Parser dann bauen Sie den Code / Programmstruktur
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top