2017-01-25 1 views
2

Ich nehme einen Compiler Design-Kurs in meinem Bachelor-Studium. Als Teil des Lernprozesses müsste ich den Compiler für eine Sprache entwickeln.Compiler für Bash

Kann ein Compiler für Bash geschrieben werden? Wäre es schwieriger, einen Compiler für eine reguläre Programmiersprache, wie C/C++, zu entwickeln, und damit zumindest für einen Neuling absolut undenkbar?

+2

Praktisch jede Sprache kann kompiliert werden. Die allgemeinen Techniken sind für alle Sprachen gleich. Der Compiler analysiert den Code und ermittelt, was das Programm macht. Er generiert ausführbaren Code, der das tut. Es gibt keinen großen Unterschied zwischen dem Kompilieren einer Bash 'for'-Schleife und einer C' for'-Schleife. – Barmar

+1

Soll nicht der "Wie" -Teil das sein, was Sie in der Klasse halten? Bist du sicher, dass du die Sprache auswählen kannst? Es ist möglich, dass die Sprache für Sie vorgeschrieben wird. – puhlen

+0

Weiß jemand, was mit meinem Kommentar passiert ist? – melpomene

Antwort

6

Kann ein Compiler für Bash geschrieben werden?

Ja. (Existenzbeweis - shc.)

Wenn ja, wie?

Das ist der schwierige Teil.

POSIX-Shell-Sprachen unterscheiden sich sehr stark von den typischen Programmiersprachen aufgrund von Effekten wie Backticks, Variablensubstitution, Quoting und so weiter.

Sie könnten dies ignorieren und eine "bash like" -Sprache implementieren, indem Sie entweder die schwierigen Funktionen auslassen oder sie so behandeln, dass sie nicht dem POSIX-Verhalten entsprechen.

Dann ... gibt es das Problem, wie man etwas erzeugt, das ausführbar ist. Auch dies ist möglich (siehe oben), aber wenn Sie schneller als eine normale Shell sein wollen, müssen Sie das Verhalten gängiger Linux-Befehle im kompilierten Code emulieren. Das ist eine große Aufgabe.


Ich sage nicht, das ist ein schlechtes Projekt ist, aber Sie werden eine Menge Arbeit tun müssen, zB:

  • Befund, Lesen und (vollständig) das Verständnis der POSIX-Shell-Spezifikationen
  • erforschen, wie ein Parser implementieren, die
  • herauszufinden, mit POSIX idiosyncracies beschäftigt ich die Befehle linux müssen direkt umgesetzt werden, und
  • herauszufinden, wie man mit denen umgehen, die Sie nicht; z.B. die ganze Komplexität von Pipelines.
+0

ccsh ist ein nicht freies Projekt, das das Kompilieren von Shell-Skripten in eine Binärdatei anbietet. – louigi600

+0

Danke, aber nur ein Beispiel ist notwendig für einen Existenznachweis. –