Ein in einer „Programmiersprache“ geschriebenes Programm wird als Quellprogramm bezeichnet. Quellcode bezieht sich auf eine nicht kompilierte Textdatei, die gemäß bestimmten Programmiersprachenspezifikationen geschrieben wurde. Er bezieht sich auf eine Reihe von für Menschen lesbaren Anweisungen in Computersprache, die normalerweise in einer Hochsprache verfasst sind. Das ultimative Ziel eines Computer-Quellprogramms besteht darin, für Menschen lesbaren Text in binäre Anweisungen zu übersetzen, die ein Computer ausführen kann. Dieser Vorgang wird Kompilierung genannt und durch einen Compiler abgeschlossen.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, Dell G3-Computer.
Ein in einer „Programmiersprache“ geschriebenes Programm wird als Quellprogramm bezeichnet.
Was ist ein Quellprogramm, auch Quellcode genannt, bezieht sich auf eine nicht kompilierte Textdatei, die in der Regel nach bestimmten Programmiersprachenspezifikationen geschrieben wurde in einer Hochsprache geschrieben. In modernen Programmiersprachen können Quellprogramme in Form von Büchern, Bändern oder anderen Trägern vorliegen, das am häufigsten verwendete Format sind jedoch Textdateien. Der Zweck dieses typischen Formats besteht darin, ein Computerprogramm zu kompilieren.
Das ultimative Ziel eines Computer-Quellprogramms besteht darin, für Menschen lesbaren Text in binäre Anweisungen zu übersetzen, die ein Computer ausführen kann. Dieser Vorgang wird Kompilierung genannt und durch einen Compiler abgeschlossen.
Der Dateityp des Quellprogramms bezieht sich auf die spezielle Codierungsmethode, die beim Speichern des Quellprogramms verwendet wird und leicht zu lesen und zu identifizieren ist. Textdateien sind der am häufigsten verwendete Dateityp, aber viele Hochsprachen und Assemblersprachen haben ihre eigenen Dateitypen. Es ist im Allgemeinen üblich, sie in Hochsprachen- oder Assemblersprachen-Dateitypen zu speichern Bequemlichkeit der zukünftigen Compiler-Kompilierung.
Das Aufkommen höherer Programmiersprachen (auch Hochsprachen genannt) führt dazu, dass Computerprogrammiersprachen nicht mehr übermäßig auf eine bestimmte Maschine oder Umgebung angewiesen sind. Dies liegt daran, dass Hochsprachen auf verschiedenen Plattformen in verschiedene Maschinensprachen kompiliert werden, anstatt direkt von der Maschine ausgeführt zu werden. Eines der Hauptziele von FORTRAN, einer der frühesten Programmiersprachen, ist die Erreichung von Plattformunabhängigkeit.
FunktionDie Hauptfunktionen des Quellcodes haben die folgenden zwei Funktionen:
Zielcode generieren, dh Code, der von Computern erkannt werden kann.
Beschreiben Sie die Software, dh erklären Sie das Schreiben der Software. Viele Anfänger und sogar einige erfahrene Programmierer ignorieren das Schreiben von Softwarebeschreibungen, da dieser Teil weder direkt im generierten Programm angezeigt wird noch an der Kompilierung beteiligt ist. Aber es zeigt, dass es enorme Vorteile für das Lernen, Teilen, Warten und Wiederverwenden von Software mit sich bringt. Daher gilt das Schreiben von Softwarebeschreibungen in der Branche als eine gute Angewohnheit, um hervorragende Programme zu erstellen, und einige Unternehmen schreiben es auch zur Pflicht.
Es sollte darauf hingewiesen werden, dass bei kompilierten Sprachen wie C/C++/Java eine Änderung des Quellcodes den generierten Zielcode nicht ändern kann. Wenn der Zielcode entsprechend geändert werden muss, muss er neu kompiliert werden. Allerdings gibt es derzeit viele gängige Skriptsprachen wie Perl/Python, die keine Neukompilierung erfordern. Nach der Änderung des Codes können Sie ihn direkt ausführen und die Ergebnisse der Änderung sehen.
Quellcode ist ein besonderer Teil der Software und kann in einer oder mehreren Dateien enthalten sein. Ein Programm muss nicht im gleichen Format wie der Quellcode geschrieben sein. Wenn ein Programm beispielsweise von einer C-Sprachbibliothek unterstützt wird, kann es in C-Sprache geschrieben werden, während ein anderer Teil in Assemblersprache geschrieben werden kann, um eine höhere Betriebseffizienz zu erreichen. Was die aktuelle Situation betrifft, muss nur sehr wenig Software direkt in Assembler geschrieben werden, da das vom Compiler generierte Optimierungsprogramm häufig bereits sehr effizient ist und häufiger mit C/C++ kompiliert wird. Sprache zum Schreiben der Teile des Kerns, die Geschwindigkeit erfordern, und Verwendung dynamischer Sprachen wie Perl/Python/Lua für Kernerweiterungen wie Schnittstellen, Verwaltungskonfigurationen usw. Dadurch wird weder die Effizienz verloren noch die Flexibilität des Programms erhöht. Komplexere Software erfordert im Allgemeinen die Beteiligung von Dutzenden oder sogar Hunderten von Quellcodes. Um diese Komplexität zu reduzieren, muss ein System eingeführt werden, das die Beziehung zwischen den einzelnen Quellcodes und deren korrekte Kompilierung beschreiben kann. In diesem Zusammenhang wurden Versionskontrollsysteme (VCS) geboren und zu einem der notwendigen Werkzeuge für Entwickler zur Überarbeitung von Code.
Es gibt noch eine andere Kombination: Portierung von Software, die für eine Plattform geschrieben wurde, auf eine andere Plattform, beispielsweise Portierung von Software unter Windows auf Linux oder MacOS. Der Fachbegriff ist Software-Portierung. Im Allgemeinen wird Software, die auf mehreren Plattformen ausgeführt werden kann, als plattformübergreifende Software bezeichnet.
Verarbeitung hochsprachlicher Quellprogramme in Zielprogramme
Systemsoftware, die in Hochsprachen geschriebene Quellprogramme in Zielprogramme verarbeiten kann, ist ein „Compiler“. Compiler (Compilerprogramm), auch Compiler genannt, bezieht sich auf ein Übersetzungsprogramm, das ein in einer höheren Programmiersprache geschriebenes Quellprogramm in ein entsprechendes Zielprogramm im Maschinensprachenformat übersetzt. Compiler sind Übersetzungsprogramme, die mithilfe eines generativen Implementierungsansatzes implementiert werden. Als Eingabe wird ein in einer höheren Programmiersprache geschriebenes Quellprogramm und als Ausgabe ein in Assemblersprache oder Maschinensprache ausgedrücktes Zielprogramm benötigt. Das kompilierte Zielprogramm durchläuft in der Regel auch eine laufende Phase, um mit Unterstützung des laufenden Programms abzulaufen, die Ausgangsdaten zu verarbeiten und die erforderlichen Berechnungsergebnisse zu berechnen. Der Compiler muss das Quellprogramm analysieren und es dann in das Zielprogramm synthetisieren. Überprüfen Sie zunächst die Korrektheit des Quellprogramms und zerlegen Sie es in mehrere Grundkomponenten. Zweitens erstellen Sie auf Basis dieser Grundkomponenten entsprechende äquivalente Zielprogrammteile. Um diese Aufgaben zu erledigen, muss der Compiler während der Analysephase einige Tabellen erstellen und das Quellprogramm in eine Zwischensprachform umwandeln, damit es während der Analyse und Synthese leicht referenziert und verarbeitet werden kann. Funktionen des Compilers: Der Compiler muss das Quellprogramm analysieren und es dann in das Zielprogramm synthetisieren. Überprüfen Sie zunächst die Korrektheit des Quellprogramms und zerlegen Sie es in mehrere Grundkomponenten. Zweitens erstellen Sie auf Basis dieser Grundkomponenten entsprechende äquivalente Zielprogrammteile. Um diese Aufgaben zu erledigen, muss der Compiler während der Analysephase einige Tabellen erstellen und das Quellprogramm in eine Zwischensprachform umwandeln, damit es während der Analyse und Synthese leicht referenziert und verarbeitet werden kann. Hauptdatenstrukturen, die bei der Datenstrukturanalyse und -synthese verwendet werden, einschließlich Symboltabellen, Konstantentabellen und Zwischensprachenprogrammen. Die Symboltabelle besteht aus den im Quellprogramm verwendeten Bezeichnern zusammen mit ihren Attributen, zu denen Typen (wie Variablen, Arrays, Strukturen, Funktionen, Prozeduren usw.), Typen (wie ganze Zahlen, reelle Typen, Zeichenfolgen, komplexe Typen) gehören , Etiketten) usw.) und andere vom Zielprogramm benötigte Informationen. Die Konstantentabelle besteht aus den im Quellprogramm verwendeten Konstanten, einschließlich der Maschinendarstellung der Konstanten, und den ihnen zugeordneten Zielprogrammadressen. Ein Zwischensprachenprogramm ist eine Zwischenform eines Programms, das vor der Übersetzung des Quellprogramms in das Zielprogramm eingeführt wird. Die Wahl seiner Darstellung hängt davon ab, wie der Compiler es später verwenden und verarbeiten wird. Zu den häufig verwendeten Zwischenformen in der Sprache gehören die polnische Darstellung, Dreier-, Vierer- und indirekte Dreierformen. Die Analyse eines Teils des Quellprogramms erfolgt in drei Schritten: lexikalische Analyse, Syntaxanalyse und semantische Analyse. Die lexikalische Analyse wird durch ein lexikalisches Analyseprogramm (auch Scanner genannt) vervollständigt, dessen Aufgabe darin besteht, Wörter zu identifizieren (d. h. Bezeichner, Konstanten, reservierte Wörter und verschiedene Operatoren, Satzzeichen usw.), Symboltabellen und Konstantentabellen zu erstellen und konvertieren Das Quellprogramm wird in eine interne Form konvertiert, die vom Compiler leicht analysiert und verarbeitet werden kann. Der Syntaxanalysator ist der Kernbestandteil des Compilers. Seine Hauptaufgabe besteht darin, zu überprüfen, ob das Quellprogramm den grammatikalischen Regeln der Sprache entspricht. Wenn es nicht grammatikalisch ist, wird eine Syntaxfehlermeldung ausgegeben. Wenn es grammatikalisch ist, wird die grammatikalische Struktur des Quellprogramms zerlegt und ein internes Programm in Form einer Zwischensprache erstellt. Der Zweck der grammatikalischen Analyse besteht darin, zu verstehen, wie Wörter Sätze bilden und wie Aussagen Programme bilden. Das semantische Analyseprogramm prüft außerdem die semantische Korrektheit legaler Programmstrukturen. Sein Zweck besteht darin, die korrekte Verwendung von Bezeichnern und Konstanten sicherzustellen, notwendige Informationen in Symboltabellen oder Zwischensprachenprogrammen zu sammeln und eine entsprechende semantische Verarbeitung durchzuführen. Der Arbeitsprozess eines Compilers Ein Compiler wird auch als Kompilierungssystem bezeichnet. Es handelt sich um ein Sprachverarbeitungsprogramm, das in Hochsprachen geschriebene prozessorientierte Quellprogramme in Zielprogramme übersetzt. Der Prozess der Übersetzung eines Quellprogramms in ein Zielprogramm ist in fünf Phasen unterteilt: lexikalische Analyse und Optimierung des Zielcodes. Es führt hauptsächlich eine lexikalische Analyse und eine Syntaxanalyse durch, die auch als Quellprogrammanalyse bezeichnet wird. Während des Analyseprozesses werden grammatikalische Fehler gefunden und umgehend Informationen bereitgestellt. (1) Lexikalische Analyse Die Aufgabe der lexikalischen Analyse besteht darin, aus Zeichen zusammengesetzte Wörter zu verarbeiten, das Quellprogramm Zeichen für Zeichen von links nach rechts zu scannen, Wortsymbole nacheinander zu generieren und das Quellprogramm als Zeichenfolge An zu verwenden Zwischenprogramm, das in eine Folge von Wortsymbolen umgewandelt wird. Ein Programm, das eine lexikalische Analyse durchführt, wird Lexer oder Scanner genannt. Die Wortsymbole im Quellprogramm werden vom Scanner analysiert und generieren im Allgemeinen binäre Formeln: Wortkategorie; Wortkategorien werden normalerweise mit ganzen Zahlen codiert. Wenn eine Kategorie nur ein Wortsymbol enthält, stellt die Kategoriecodierung für dieses Wortsymbol vollständig ihren eigenen Wert dar. Wenn eine Kategorie viele Wortsymbole enthält, sollte für jedes ihrer Wortsymbole zusätzlich zum Kategoriecode auch ein eigener Wert angegeben werden. Im Allgemeinen gibt es zwei Möglichkeiten, lexikalische Analysatoren zu erstellen: manuelle Konstruktion und automatische Generierung. Die manuelle Konstruktion kann mithilfe von Zustandsdiagrammen funktionieren, die automatische Generierung kann mithilfe deterministischer endlicher Automaten implementiert werden. (2) Syntaxanalyse Der Syntaxanalysator des Compilers verwendet Wortsymbole als Eingabe, analysiert, ob die Wortsymbolzeichenfolge eine grammatikalische Einheit bildet, die den grammatikalischen Regeln entspricht, z. B. Ausdruck, Zuweisung, Schleife usw., und prüft schließlich, ob sie ein Programm bildet erfüllt die Anforderungen entsprechend der verwendeten Sprache. Die Grammatikregelanalyse prüft, ob jede Aussage die richtige logische Struktur hat und das Programm die endgültige grammatikalische Einheit ist. Die grammatikalischen Regeln eines Compilers können durch eine kontextfreie Grammatik charakterisiert werden. Es gibt zwei Methoden der Grammatikanalyse: Top-Down-Analyse und Bottom-Up-Analyse. Von oben nach unten bedeutet, vom Startsymbol der Grammatik auszugehen, nach unten abzuleiten und den Satz abzuleiten. Die Bottom-Up-Analysemethode verwendet die Shift-In-Reduction-Methode. Die Grundidee besteht darin, die Eingabesymbole einzeln in den Stapel zu verschieben, wenn sich die Oberseite des Stapels bildet eine Produktion eines bestimmten Ausdrucks. Wenn ein Kandidatenausdruck gefunden wird, wird der Teil oben im Stapel auf das links benachbarte Symbol der Produktion reduziert. (3) Zwischencode-Generierung Zwischencode ist eine interne Darstellung des Quellprogramms oder der Zwischensprache. Die Funktion des Zwischencodes besteht darin, die Struktur des kompilierten Programms logisch einfacher und klarer zu machen, insbesondere um die Optimierung des Zielcodes einfacher umzusetzen. Der Zwischencode ist das Zwischensprachenprogramm, und die Komplexität der Zwischensprache liegt zwischen der Quellprogrammsprache und der Maschinensprache. Es gibt viele Formen der Zwischensprache, gängige sind die umgekehrte polnische Notation, Tetragramme, ternäre Formen und Bäume. (4) Code-Optimierung Code-Optimierung bezieht sich auf die Durchführung mehrerer gleichwertiger Transformationen am Programm, sodass ausgehend vom transformierten Programm effektiverer Zielcode generiert werden kann. Die sogenannte Äquivalenz bedeutet, dass die laufenden Ergebnisse des Programms nicht verändert werden. Die sogenannte Effektivität bezieht sich hauptsächlich auf die kurze Laufzeit des Zielcodes und den geringen belegten Speicherplatz. Diese Transformation wird Optimierung genannt. Es gibt zwei Arten der Optimierung: Eine besteht darin, den Zwischencode nach der Syntaxanalyse zu optimieren, die nicht vom jeweiligen Computer abhängt. Die andere wird beim Generieren des Zielcodes durchgeführt und hängt weitgehend vom jeweiligen Computer ab. Die erstere Art der Optimierung kann je nach Umfang des betreffenden Programms in drei verschiedene Ebenen unterteilt werden: lokale Optimierung, Schleifenoptimierung und globale Optimierung. (5) Zielcode-Generierung Die Zielcode-Generierung ist die letzte Stufe der Kompilierung. Der Zielcodegenerator wandelt den geparsten oder optimierten Zwischencode in Zielcode um. Es gibt drei Formen von Zielcode: ① Maschinensprachcode, der sofort ausgeführt werden kann, alle Adressen werden verschoben. ② Maschinensprachmodule müssen zusammengestellt werden. Wenn sie ausgeführt werden müssen, kombiniert der Linkloader sie mit einigen Ausführungen Programme Verbinden Sie sie und konvertieren Sie sie in ausführbaren Maschinensprachencode. ③ Assemblersprachencode muss von einem Assembler kompiliert werden, um ausführbaren Maschinensprachencode zu werden. Drei Aspekte, die sich direkt auf die Geschwindigkeit des Zielcodes auswirken, sollten während der Zielcode-Generierungsphase berücksichtigt werden: erstens, wie man kürzeren Zielcode generiert, zweitens, wie man die Register im Computer vollständig nutzt und die Anzahl reduziert 3. Wie man die Eigenschaften des Computeranweisungssystems voll ausnutzt, um die Qualität des Zielcodes zu verbessern. Weitere Informationen zu diesem Thema finden Sie in der Spalte „FAQ“!
Das obige ist der detaillierte Inhalt vonWas ist das geschriebene Programm, das als Quellprogramm bezeichnet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!