4 Stimmen

Wo wird die Kontextsensitivität im C++ Kompilierungsprozess aufgelöst?

Gestern habe ich nach C++ Kontextsensitivität gefragt, siehe hier. Unter vielen ausgezeichneten Antworten ist hier die akzeptierte Antwort von dmckee.

Ich denke jedoch immer noch, dass dazu etwas gesagt werden kann (vielleicht einige terminologische Verwirrung?). Die Frage lautet: Mit welchem Teil der Kompilierung befasst sich die Mehrdeutigkeit?

Zur Klärung meiner Terminologie: Eine CFG ist eine Grammatik, die nur ein Nichtterminalsymbol auf der linken Seite der Regel hat (z.B. A->zC), eine CSG ist eine, die ein Terminal (plus ein Nichtterminal) auf der linken Seite hat (aAv->QT), wobei Großbuchstaben Nichtterminale und Kleinbuchstaben Terminale sind.

Gibt es eine Darstellung wie die letztere im Grammatik parsing von C++ Quellcode?

Vielen Dank und entschuldigen Sie die Hartnäckigkeit.

0voto

Khaled Alshaya Punkte 90854

Welcher Teil der Kompilierung befasst sich mit der Mehrdeutigkeit?

Nach dem Aufbau des Syntaxbaums sollte es keine Mehrdeutigkeit geben. Soweit ich weiß, sollte der endgültige Syntaxbaum bereit für die Übersetzung sein. Kurz gesagt sollte der Syntaxanalysator die kontextsensitive Grammatik (auch bekannt als uneindeutige Grammatik) während des Ableitungsprozesses (auch bekannt als Syntaxanalyse) lösen.

0voto

Sie scheinen anzunehmen, dass ein Compiler aus Phasen besteht, die streng auf der Grammatik basieren. Nichts könnte weiter von der Wahrheit entfernt sein. Die Grammatik wird verwendet, um einige Teile der Eingabe zu parsen, und dann werden allerlei Heuristiken verwendet, um andere Teile zu parsen, dann wird wieder mehr Grammatikparsen gemacht und so weiter. Der ideale Compiler, der liebevoll in Lehrbüchern beschrieben wird, existiert nicht.

Ein einfaches Beispiel ist ein rekursiver Abstiegscompiler, der einen tabellenbasierten Parser für arithmetische Ausdrücke verwendet. Oder umgekehrt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X