DE69127031T2 - Kompilerzwischensprache verwendender Erzeuger für architekturunabhängiges Vertriebsformat (AUVF) - Google Patents

Kompilerzwischensprache verwendender Erzeuger für architekturunabhängiges Vertriebsformat (AUVF)

Info

Publication number
DE69127031T2
DE69127031T2 DE69127031T DE69127031T DE69127031T2 DE 69127031 T2 DE69127031 T2 DE 69127031T2 DE 69127031 T DE69127031 T DE 69127031T DE 69127031 T DE69127031 T DE 69127031T DE 69127031 T2 DE69127031 T2 DE 69127031T2
Authority
DE
Germany
Prior art keywords
compiler
instructions
hpcode
machine
plus
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE69127031T
Other languages
English (en)
Other versions
DE69127031D1 (de
Inventor
Paul Chan
Manoj Dadoo
Karl William Pettis
Vatsa Santhanan
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hewlett Packard Development Co LP
Original Assignee
Hewlett Packard Co
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hewlett Packard Co filed Critical Hewlett Packard Co
Publication of DE69127031D1 publication Critical patent/DE69127031D1/de
Application granted granted Critical
Publication of DE69127031T2 publication Critical patent/DE69127031T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable compilers

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

    Hintergrund der Erfindung
  • Die vorliegende Erfindung bezieht sich allgemein auf Computersoftwarekompilersysteme und -Verfahren und insbesondere auf Computersoftwarekompilersysteme und -Verfahren für eine gesteigerte Verteilung einer Computersoftware.
  • Idealerweise könnte die gleiche Version eines Computerprogramms auf heterogene Computerplattformen verteilt werden (heterogene Computerplattformen sind Computerplattformen mit unterschiedlichen Computerarchitekturen und unterschiedlichen Computerbetriebssystemen). Das Computerprogramm würde ohne Modifikationen auf den heterogenen Computerplattformen arbeiten.
  • Dieser Verteilungsidealfall ist aus einer Reihe von Gründen wünschenswert. Als erstes wird die Verfügbarkeit der Computersoftware gesteigert, falls die Software einfach verteilt ist. Für Endanwender bedeuten einfach-verteilte Computerprogramme, daß ihre Softwarebeschaffungs- und Einkaufaufgaben vereinfacht werden. Für Softwareverkäufer bedeuten einfachverteilte Computerprogramme, daß ihre Lagerungs- und Verteilungskosten minimiert werden.
  • Zusätzlich sind für Softwarehersteller einfach-verteilte Computerprogramme aus Wirtschaftlichkeitsgründen wünschenswert. Die anfänglichen Entwicklungs- und nachfolgenden Wartungskosten würden minimiert werden, falls ein Programmierungsteam ihren Entwurfs-, Implementierungs- und Wartungs- Aufwand auf eine einzige Computerprogrammversion begrenzen könnte. Die Verteilungskosten würden ferner minimiert werden, falls eine einzige Computerprogrammversion für heterogene Computerplattformen angeboten werden könnte.
  • Die Fähigkeit, diesen Verteilungsidealfall zu erreichen, hängt von zwei Faktoren ab: nämlich von der Art und Weise, mit der die Software geschrieben wird, und von dem Format, mit dem die Software verteilt wird.
  • Heutzutage wird eine Software üblicherweise auf eine maschinenabhängige Art und Weise geschrieben. Beispielsweise wird die Software, die für einen IBM-Personalcomputer (IBM-PC) geschrieben ist, häufig die Funktionsaufrufe verwenden, die von DOS (DOS = Disk Operating System = Plattenbetriebssystem), d. h. dem PC-Betriebssystem von IBM, vorgesehen sind. Diese Software ist maschinenabhängig, da dieselbe Verweise auf spezifische Merkmale (d. h. DOS-Funktionsaufrufe) einer speziellen Computerplattform (d. h. des IBM-PC) umfaßt.
  • Eine maschinenabhängige Software kann lediglich auf ihrer ursprünglichen Computerplattform (d. h. auf der Computerplattform, auf der dieselbe erzeugt wurde) arbeiten. Um auf anderen Computerplattformen zu arbeiten, sind Modifikationen für dieselbe notwendig. Daher ist eine maschinenabhangige Software unwirtschaftlich, da von jedem Computerprogramm getrennte Versionen erforderlich sind, und zwar eine Version für jede Zielcomputerplattform (d.h. eine Computerplattform, auf welcher ein Computerprogramm arbeiten soll).
  • Es ist möglich, die Software derart zu schreiben, daß dieselbe nicht von den spezifischen Merkmalen einer bestimmten Computerplattform abhängt. Das heißt, daß die Software weder von den spezifischen Hardware- noch von den spezifischen Software-Merkmalen einer bestimmten Computerplattform abhängt. Diese Software wird als maschinenunabhängig bezeichnet. Theoretischerweise kann eine maschinenunabhängige Software (oder können maschinenunabhängige Computerprogramme) ohne Modifikationen auf heterogenen Zielcomputerplattformen arbeiten.
  • Jedoch hängt die Fähigkeit der Software, auf heterogenen Zielcomputerplattformen zu arbeiten, ferner von der Art und Weise ab, mit welcher die Software verteilt wird (d. h. von dem Format der Softwareverteilungskopie). Es gibt zwei Softwareverteilungsformate: und zwar ein architekturneutrales Verteilungsformat und ein architekturabhängiges Verteilungsformat.
  • Ein maschinenunabhängiges Computerprogramm, das in dem architekturabhängigen Verteilungsformat ("ADDF"; ADDF = architecture dependent distribution format = architekturabhängiges Verteilungsformat) verteilt ist, kann lediglich auf seiner ursprünglichen Computerplattform arbeiten. Objekt- und ausführbare Codeformate sind Beispiele für ADDFs. ADDFs sind ineffizient, da mehrere Versionen der Softwareverteilungskopie erforderlich sind, d. h. eine für jede heterogene Zielcomputerplattform.
  • Im Gegensatz dazu kann ein maschinenunabhängiges Computerprogramm, das in dem architekturneutralen Verteilungsformat ("ANDF"; ANDF = archtecture neutral distribution format = architekturneutrales Verteilungsformat) verteilt ist, auf einer beliebigen Computerplattform arbeiten. Somit sind ANDFs effizient, da lediglich eine Version der Softwareverteilungskopie erforderlich ist, und diese Version ohne Modifikationen an heterogene Zielcomputerplattformen verteilt werden kann.
  • Daher wird der Verteilungsidealfall durch die Kombination von maschinenunabhängigen Computerprogrammen plus ANDF erreicht. Daraus ergibt sich, daß die Kombination von maschinenunabhangigen Computerprogrammen plus ANDF Computerprogramme erzeugt, die ohne Modifikationen auf heterogenen Computerplattformen arbeiten können.
  • Es hat bereits viele Versuche gegeben, eine funktionierende ANDF-Spezifikation zu definieren. Der erste Versuch fand vielleicht 1969 mit der Schaffung von UNCOL statt. UNCOL war eine Kompilerzwischensprache, die einige ANDF-Merkmale aufwies. Die Erfinder von UNCOL versuchten jedoch nicht, eine ANDF-Spezifikation zu definieren. Somit war UNCOL keine vollständige ANDF-Spezifikation, obwohl dasselbe einige ANDF-Merkmale aufwies.
  • Im November 1988 wurde Logica von dem European Roundtable beauftragt eine ANDF-Durchführbarkeitsstudie durchzuführen. Die Logica-Studie, welche im April 1989 fertiggestellt wurde, wiederholte die Ziele, die Anforderungen und die Wirkung von ANDF, wobei jedoch keine vollständige ANDF-Spezifikation definiert wurde.
  • Im April 1989 erbat die Open System Foundation (OSF) mittels einer Technologieausschreibung (RFT; RFT = Request for Technology = Technologieausschreibung) Vorschläge für einen ANDF-Standard für Unix-Computerplattformen. OSF erreichten als Antwort auf die RFT über 20 Vorschläge (die im Nachfolgenden als die "OSF-Vorschläge" bezeichnet werden).
  • Im allgemeinen basieren ANDF-Spezifikationsvorschläge auf einem der vier allgemein akzeptierten ANDF-Lösungsansätze: auf einem ANDF, das einen Quellencode verwendet; einem ANDF, das einen verschlüsselten Quellencode verwendet; einem ANDF, das einen getaggten ausführbaren Code verwendet; und einem ANDF, das eine Kompilerzwischendarstellung verwendet.
  • Der erste ANDF-Lösungsansatz, ein ANDF, das einen Quellencode verwendet, verwendet den Computerprogrammquellencode als das Softwareverteilungsformat. Gemäß diesem Lösungsansatz wird der maschinenunabhangige Quellencode an heterogene Zielcomputerplattformen verteilt. An jeder Zielcomputerplattform verwenden Computeroperatoren ihre Kompiler, um ihre Quellencodekopien zu kompilieren.
  • Der ANDF-Lösungsansatz, der einen Quellencode verwendet, ist jedoch inhärent fehlerhaft, da Urhebergeheimnisse, die in dem Quellencode eingebettet sind, nicht geschützt werden können, falls der Quellencode als das ANDF verwendet wird. Aus diesem Grund sind verteilungscomputerprogramme auf der Quellencodeebene für die meisten Geschäftsanwendungen nicht brauchbar, obwohl dieselben architekturneutral sind.
  • Der zweite ANDF-Lösungsansatz, ein ANDF, das einen verschlüsselten Quellencode verwendet, ist eine Variation des ersten Lösungsansatzes. Gemäß diesem Lösungsansatz wird ein verschlüsselter Quellencode an die heterogenen Zielcomputerplattformen verteilt. Die Operatoren an jeder Zielcomputerplattform verwenden spezielle Kompiler, um ihre Kopien des verschlüsselten Quellencodes zu kompilieren. Diese speziellen Kompiler weisen zwei Teile, d. h. eine Entschlüsselungseinrichtung und einen herkömmlichen Kompiler, auf. Die speziellen Kompiler entschlüsseln zuerst den verschlüsselten Quellencode und kompilieren daraufhin denselben.
  • Der ANDF-Lösungsansatz, bei dem das ANDF einen verschlüsselten Quellencode verwendet, löst anscheinend das Sicherheitsproblem des ersten Lösungsansatzes, da eingebettete Urhebergeheimnisse durch das Verschlüsselungsverfahren geschützt sind. Das Sicherheitsproblem ist jedoch nicht vollständig gelöst, da der ent/verschlüsselte Quellencode nach der Ent/Verschlüsselung durch den speziellen Kompiler abgefangen werden kann. Somit ist der ANDF-Lösungsansatz, bei dem das ANDF einen verschlüsselten Quellencode verwendet, wie der erste Lösungsansatz inhärent fehlerhaft, da derselbe eingebettete Urhebergeheimnisse für die Öffentlichkeit offenlegt.
  • Gemäß dem dritten ANDF-Lösungsansatz, d. h. dem ANDF, das einen getaggten ausführbaren Code verwendet, ist das Softwareverteilungsformat aus einem ersten Teil und einem zweiten Teil zusammengesetzt. Der erste Teil enthält einen ausführbaren Code in der Maschinensprache der ursprünglichen Computerplattform. Der zweite Teil enthält Informationen, die die Maschinensprache der ursprünglichen Computerplattform betreffen. Dieser zweite Teil wird als Schlüssel bezeichnet.
  • Spezielle Kompiler verwenden den Schlüssel, um den ersten Teil der Softwareverteilungskopie in einen ausführbaren Code für ihre jeweiligen Zielcomputerplattformen umzuwandeln.
  • Dieser dritte ANDF-Lösungsansatz ist jedoch inhärent fehlerhaft, da derselbe nicht wirklich architekturneutral ist. Stattdessen ist derselbe architekturmäßig voreingenommen.
  • Der vierte ANDF-Lösungsansatz, bei dem das ANDF eine Kompilerzwischendarstellung verwendet, verwendet eine Kompilerzwischendarstellung als das Softwareverteilungsformat. Um diesen Lösungsansatz zu verstehen, ist es notwendig, einige Konzepte hochstufiger Softwarekompiler zu beschreiben.
  • Softwarekompiler sind aus zwei Teilen, und zwar einem vorderen Teil und einem hinteren Teil, zusammengesetzt. Der vordere Kompilerteil empfängt die Computerprogramme als Eingabe. Diese Computerprogramme sind normalerweise in hochstufigen Programmiersprachen, wie z. B. Pascal, C und Ada, geschrieben.
  • Der vordere Kompilerteil tastet ab, analysiert syntaktisch und führt eine semantische Analyse auf dem Computerprogramm durch. Mit anderen Worten ist der vordere Teil für das sprachenabhängige Verarbeiten des Computerprogramms verantwortlich. Nachdem die gesamte sprachenabhängige Verarbeitung abgeschlossen ist (und falls keine Fehler gefunden wurden), erzeugt der vordere Teil eine Kompilerzwischendarstellung des Computerprogramms. Die Kompilerzwischendarstellung ist zu einer Assemblersprachendarstellung des Computerprogramms analog.
  • Die hinteren Kompilerteile empfangen die Kompilerzwischendarstellungen als Eingabe und wandeln die Kompilerzwischendarstellung in Objektcodedarstellungen für spezifische Computerplattformen um.
  • Die Objektcodedarstellungen werden daraufhin durch Linker auf den Zielcomputerplattformen in ausführbare Codedarstellungen umgewandelt. Die Linker sind häufig nicht Teil der Kompiler.
  • Normalerweise erzeugt der vordere Teil die Kompilerzwischendarstellungen auf eine maschinenabhängige Art und Weise. Dies trifft insbesondere auf Operationen zu, die eine Speicherzuordnung, eine Datentypumwandlung und eine Include-Datei-Verarbeitung (include = aufnehmen) beinhalten. Folglich sind die Kompilerzwischendarstellungen normalerweise maschinenabhängig und somit als ein ANDF ungeeignet.
  • Falls jedoch der vordere Teil auf eine maschinenunabhängige Art und Weise arbeitet, und falls die sich ergebende Kompilerzwischendarstellung keine spezifischen Architekturmerkmale bestimmter Computerplattformen voraussetzt, dann ist die Kompilerzwischendarstellung architekturneutral. Somit ist diese Kompilerzwischendarstellung ein ANDF.
  • Gemäß dem ANDF-Lösungsansatz, bei dem das ANDF eine Kompilerzwischendarstellung verwendet, wird daher eine architekturneutrale Kompilerzwischendarstellung als das Softwareverteilungsformat verwendet. Die vorderen ANDF-Kompilerteile (oder "ANDF-Herstellungseinrichtungen") befinden sich auf den ursprünglichen Computerplattformen, wobei sich die hinteren ANDF-Kompilerteile (oder "ANDF-Installationseinrichtungen") auf den Zielcomputerplattformen befinden.
  • Die ANDF-Herstellungseinrichtungen erzeugen Kompilerzwischendarstel lungen von Computerprogrammen. Diese Kompilerzwischendarstellungen, die architekturneutral sind, werden an heterogene Zielcomputerplattformen verteilt. ANDF-Installationseinrichtungen installieren die Kompilerzwischendarstellungen auf den Zielcomputerplattformen. Die ANDF-Installationseinrichtung kann durch einen ANDF-Interpretierer ersetzt werden. Ein ANDF-Interpretierer führt Zwischenanweisungen direkt aus, ohne dieselben zuerst in einen ausführbaren Code zu übersetzen.
  • Der ANDF-Lösungsansatz, bei dem das ANDF eine Kompilerzwischendarstellung verwendet, löst die Sicherheitsprobleme des ersten und des zweiten ANDF-Lösungsansatzes. Hochstufige Quellencodekonstrukte, welche die Computerprogrammurhebergeheimnisse umgeben, sind mit schwierig zu lesenden niederstufigen Anweisungssequenzen dargestellt. Ferner sind niederstufige Anweisungssequenzen durch Zahlenfolgen und nicht durch eine Mnemotechnik dargestellt.
  • Der ANDF-Lösungsansatz, bei dem das ANDF eine Kompilerzwischendarstellung verwendet, löst die inhärenten Probleme des dritten ANDF-Lösungsansatzes, da der ANDF-Lösungsansatz, bei dem das ANDF eine Kompilerzwischendarstellung verwendet, wirklich architekturneutral (d. h. maschinenunabhängig) ist.
  • Folglich weist der ANDF-Lösungsansatz, bei dem das ANDF eine Kompilerzwischendarstellung verwendet, keine inhärenten Fehler auf. Dieser ANDF-Lösungsansatz legt jedoch viele schwierige Entwurfs- und Implementierungs-Probleme vor.
  • Insbesondere muß eine Kompilerzwischensprache derart definiert sein, daß die ANDF-Herstellungseinrichtung basierend auf dieser Definition Kompilerzwischendarstellungen herstellen kann, die frei von den Maschinenabhängigkeiten sind, die normalerweise durch die Anwendung von inhärent maschinenabhängigen Computeroperationen, wie z. B. einer Speicherzuordnung, einer Datentypumwandlung, einer Daten-Faltung (folding = Faltung) und einer Include-Datei-Verarbeitung, erzeugt werden. Diese Operationen werden nun im Folgenden beschrieben.
  • Zusätzlich muß die Kompilerzwischensprache derart definiert sein, daß die ANDF-Installationseinrichtung basierend auf dieser Definition die Kompilerzwischendarstellung als Eingabe empfangen und einen ausführbaren Code für eine beliebige Zielcomputerplattform erzeugen kann.
  • Speicherzuordnungsoperationen sind inhärent maschinenabhängig, da dieselben von einer speziellen Computerplattformspezifikation für eine Datenausrichtung, für Datengrößen und Datenattribute abhängen. Beispielsweise richten einige Computerplattformen Ganzzahlen derart aus, daß sich das höchstwertige Byte in der untersten Speicheradresse befindet, während andere Computerplattformen Ganzzahlen derart ausrichten, daß sich das niedrigstwertige Byte in der untersten Speicheradresse befindet. Ferner spezifizieren einige Computerplattformen Ganzzahlen als vorzeichenbehaftet und 32-Bit breit, während andere Computerplattformen Ganzzahlen als vorzeichenlos und 16-Bit breit spezifizieren.
  • Die Speicherzuordnungsoperationen sind ferner von einem Datendarstellungsscherna einer bestimmten Computerplattform abhängig. Beispielsweise würde für Computerplattformen, die den ASCII-Zeichensatz unterstützen, die Zeichenfolge "HELLO" im Speicher als die folgende Sequenz von Hexadezimal-Bytes dargestellt werden: 48 45 4C 4C 4F. Die Zeichenfolge "HELLO" würde als unterschiedliche Sequenz von Hexadezimal-Bytes in Computerplattformen dargestellt werden, welche den EBCDIC- Zeichensatz unterstützen.
  • Datentypumwandlungs- und Datenfaltungs-Operationen sind ferner inhärent maschinenabhängig. Beispielsweise werden einige Computerplattformen beim Umwandeln einer vorzeichenbehafteten kurzen Ganzzahl (mit einem Wert von weniger als Null) in eine vorzeichenbehaftete Ganzzahl mit Standardgröße alle Nullen vor der höchstwertigen Ziffer einfügen. Andere Computerplattformen werden alle Einsen einfügen.
  • Außerdem ist der resultierende Datentyp eines Ausdrucks nicht immer offensichtlich. Beispielsweise können einige Computerplattformen in dem Ausdruck y = x + 20.000 + 17.000 das Ergebnis von 20.000 + 17.000 als Ganzzahl (integer = Ganzzahl) darstellen, während andere Computerplattformen das Ergebnis als lange Ganzzahl (long integer = lange Ganzzahl) darstellen können.
  • Viele hochstufige Sprachen, wie z. B. C, ermöglichen es Computerprogrammierern, einen vordefinierten oder häufig verwendeten Code durch die Verwendung von Include-Dateien in ihre Programme hinzuzufügen. Häufig umfassen diese Include- Dateien Makrooperationen, welche zu Softwareprozeduren und Funktionen ähnlich sind. Makros, die auf einer Computerplattform definiert sind, können nicht oder können in unterschiedlichen Formen auf anderen Computerplattformen existieren.
  • Viele der OSF-Vorschläge basierten auf dem ANDF-Lösungsansatz, bei dem das ANDF eine Kompilerzwischendarstellung verwendet. Größtenteils waren die OSF-Vorschläge jedoch nicht vollständig architekturneutral, da dieselben nicht allen oben beschriebenen Implementierungsproblemen begegnen konnten.
  • Das Dokument US-A-4,667,290 offenbart ein Verfahren zum Führen eines digitalen Datenprozessors, um ein Programm, das in einer Quellensprache geschrieben ist, in eine Sequenz von maschinenausführbaren Anweisungen zu übersetzen, bei welchem der Quellencode in eine Zwischensprache übersetzt wird, woraufhin eine Erzeugung eines Objektcodes für eine Zielmaschine folgt.
  • A. Tanenbaurn u. a. offenbaren in A Practical Tool Kit For Making Portable Compilers, Communications of the ACM, Bd. 26, Nr. 9 (September 1993) ein Compilerkit, das aus einer integrierten Ansammlung von Programmen besteht, die entworfen sind, um die Aufgabe des Herstellens von portierbaren Kompilern und Interpretierern zu vereinfachen, bei welchem ein Programm (das als vorderer Teil bezeichnet wird) für jede Sprache geschrieben ist, die kompiliert werden soll, um das Quellenprogramm in einen gemeinsamen Zwischencode zu übersetzen, der optimiert werden kann, und der daraufhin entweder direkt interpretiert oder in eine Assembler-Sprache der Zielmaschine übersetzt werden kann.
  • Ein Vorschlag, der die vorliegende Erfindung beschreibt, wurde als Antwort auf die OSF-RFT unterbreitet.
  • Die vorliegende Erfindung stellt eine ANDF-Spezifikation dar, die auf dem ANDF-Lösungsansatz basiert, bei dem das ANDF eine Kompilerzwischendarstellung verwendet. Im Gegensatz zu anderen ANDF-Spezifikationen basiert die vorliegende Erfindung auf der Ucode-Kompilerzwischensprache. Zusätzlich ist die ANDF-Spezifikation, die durch die vorliegende Erfindung definiert wird, vollständig architekturneutral.
  • Zusammenfassung der Erfindung
  • Die vorliegende Erfindung ist auf ein Herstellungseinrichtungssystem gemäß Anspruch 1 zum Verteilen eines maschinenunabhängigen Computerprogramms, das auf einer ursprünglichen Computerplattform erzeugt wird, zu heterogenen Zielcomputerplattformen gerichtet. Insbesondere ist die vorliegende Erfindung auf eine Herstellungseinrichtung eines architekturneutralen Verteilungsformats (ANDF) (die im folgenden als "ANDF-Herstellungseinrichtung" bezeichnet wird) gerichtet. Die ANDF-Herstellungseinrichtung ist zu einem vorderen Teil eines herkömmlichen Computersoftwarekompilers analog.
  • Die ANDF-Herstellungseinrichtung empfängt das maschinenunabhängige Computerprogramm als Eingabe und erzeugt eine Kompilerzwischendarstellung des maschinenunabhängigen Computerprogramms. Bei dem offenbarten Ausführungsbeispiel erzeugt die ANDF-Herstellungseinrichtung die Kompilerzwischendarstellung gemäß einer HPCode-Plus-Kompilerzwischensprache, derart, daß die Kompilerzwischendarstellung aus HPcode- Plus-Anweisungen von der HPcode-Plus-Kompilerzwischensprache zusammengesetzt ist.
  • Beim Erzeugen der Kompilerzwischendarstellung gemäß der HPCode-Plus-Kompilerzwischensprache arbeitet die ANDF-Herstellungseinrichtung auf eine architekturneutrale oder maschinenunabhangige Art und Weise.
  • Insbesondere trifft bei dem offenbarten Ausführungsbeispiel, das die HPcode-Plus-Kompilerzwischensprache verwendet, die ANDF-Herstellungseinrichtung keine maschinenabhängigen Entscheidungen, die maschinenabhängige Computeroperationen inhärent betreffen. Statt dessen speichert die ANDF-Herstellungseinrichtung ausreichende Informationen in der Kompilerzwischendarstellung, derart, daß diese maschinenabhängigen Entscheidungen zu einem späteren Zeitpunkt an den Zielcomputerplattformen (oder Installierstandorten) getroffen werden können.
  • Somit ist die Kompilerzwischendarstellung, welche durch die ANDF-Herstellungseinrichtung erzeugt wird, frei von den Maschinenabhängigkeiten, welche normalerweise durch die Anwendung von inhärent maschinenabhängigen Computeroperationen, wie z. B. einer Speicherzuordnung, einer Datentypumwandlung, einer Datenfaltung und einer Include-Dateiverarbeitung, hergestellt werden. Die Kompilerzwischendarstellung ist daher architekturneutral und stellt ein architekturneutrales Verteilungsformat (ANDF) dar.
  • Diese Kompilerzwischendarstellung, die architekturneutral ist, kann auf heterogene Zielcomputerplattformen verteilt werden. Hilfsmittel an diesen Zielcomputerplattformen können gemäß der Kompilerzwischensprache Objektcodedarstellungen des maschinenunabhängigen Computerprogramms erzeugen. Diese Objektcodedarstellungen sind auf den Zielcomputerplattformen architekturabhängig oder maschinenunabhängig.
  • Wie es aus dem Vorhergehenden offensichtlich ist, kann somit das maschinenunabhängige Computerprogramm unter Verwendung der ANDF-Herstellungseinrichtung der vorliegenden Erfindung kompiliert werden, um die Kompilerzwischendarstellung herzustellen, welche frei von jeglichen Maschinenabhängigkeiten ist. Diese Kompilerzwischendarstellung stellt ein architekturneutrales Verteilungsformat dar und kann auf heterogene Zielcomputerplattformen verteilt werden. Die Softwareverteilung wird gesteigert, da eine einzige Version des maschinenunabhängigen Computerprogramms ohne Modifikationen auf heterogene Zielcomputerplattformen verteilt werden kann.
  • Weitere Merkmale und Vorteile der vorliegenden Erfindung werden aus der nachfolgenden Beschreibung unter Bezugnahme auf die begleitenden Zeichnungen offensichtlich, auf die der Bereich der vorliegenden Erfindung jedoch keineswegs beschränkt ist.
  • Kurze Beschreibung der Zeichnungen
  • Fig. 1 ist ein hochstufiges Struktur- und Operationsblockdiagramm herkömmlicher Computersoftwarekompiler. Die quadratischen Blöcke stellen Module dar, wobei die Pfeile eine Operation und einen Datenfluß darstellen.
  • Fig. 2 ist ein hochstufiges Struktur- und Operationsblockdiagramm eines bevorzugten Ausführungsbeispiels der vorliegenden Erfindung. Die quadratischen Blöcke stellen Module dar, wobei die Pfeile eine Operation und einen Datenfluß darstellen.
  • Fig. 3 umfaßt die Fig. 3A, 3B, 3C und 3D.
  • Fig. 3A, 3B und 3C sind Tabellen, die die Anweisungsklassen, die Anweisungsmnemotechnik, Hexadezimalwerte des Operationscodes (opcode) und Beschreibungen des HPcode-Plus-Kompilerzwischensprachenanweisungssatzes für die ANSI-C-Computerprogrammiersprache auflisten.
  • Fig. 3D stellt die Art und Weise dar, mit welcher die Fig. 3A, 3B und 3C verbunden sind.
  • Fig. 4A bis 4G sind jeweils den Anweisungsklassen, der Anweisungs-Memotechnik, den Hexadezimalwerten des Operationscodes (opcode) und den Beschreibungen der HPcode-Plus-Kompilerzwischensprachenanweisungen für Programmiersprachen zugeordnet, die sich von der ANSI-C-Computerprogrammiersprache unterscheiden.
  • Fig. 4A ist eine Tabelle, die die Symbol-Identifizierer und Beschreibungen von zusätzlichen vordefinierten HPcode-Plus-Datentypen auflisten, welche die Computerprogrammiersprachen unterstützen, die sich von der ANSI-C unterscheiden.
  • Fig. 4B eine Tabelle, die zusätzliche < sym kind> -Werte für die SYM-HPcode-Plus-Anweisung auflistet, welche die Computerprogrammiersprachen, die sich von ANSI-C unterscheiden, unterstützten.
  • Fig. 4C umfaßt die Fig. 4C1, 4C2 und 4C3.
  • Fig. 4C1 und 4C2 sind Tabellen, die zusätzliche HPcode-Plus-Operatoren auflisten, welche die Computerprogrammiersprachen unterstützen, die sich von ANSI-C unterscheiden.
  • Fig. 4C3 stellt die Art und Weise dar, mit welcher die Fig. 4C1 und 4C2 verbunden sind.
  • Fig. 4D, 4E, 4F und 4G sind Tabellen, die zusätzliche HPcode-Plus-Operatoren auflisten, welche die ADA-, COBOL-, FORTRAN- bzw. PASCAL-Computerprogrammiersprachen unterstützen.
  • Fig. 5 ist eine Tabelle, die die vordefinierten HPcode-Plus-Datentypen für die ANSI-C-Computerprogrammiersprache auflisten.
  • Fig. 6 ist eine Tabelle, die die Korrespondenz von den ANSI-C-Datentypen zu den HPcode-Plus-Datentypen zeigt.
  • Fig. 7 ist eine Tabelle, die die Werte von < sym kind> einer HPcode-Plus-Anweisung SYM zum Definieren von Datentypen auflistet, die sich von den vor definierten HPcode-Plus-Datentypen unterscheiden.
  • Fig. 8 ist eine Sequenz von HPcode-Plus-Anweisungen, welche die Struktur einer HPcode-Plus-Objektdatei zeigen.
  • Fig. 9 ist eine Tabelle, die vordefinierte Symbol-Identifizierer für verdefinierte HPcode-Plus-Datentypen für die ANSI-C-Computerprogrammiersprache auflistet.
  • Fig. 10 ist eine Tabelle, welche die Werte von < sym kind> der HPcode-Plus-Anweisung SYM auflistet.
  • Fig. 11 ist ein Struktur- und Operationsblockdiagramm eines bevorzugten Ausführungsbeispiels der ANDF-Herstellungseinrichtung. Die quadratischen Blöcke stellen Module dar, wobei die Pfeile, eine Operation und einen Datenfluß darstellen.
  • Fig. 12 ist ein Struktur- und Operationsblockdiagramm eines bevorzugten Ausführungsbeispiels einer Kompilerkomponente der ANDF-Herstellungseinrichtung. Die quadratischen Blöcke stellen Module dar, wobei die Pfeile eine Operation und einen Datenfluß darstellen.
  • Fig. 13 ist ein Struktur- und Operationsblockdiagramm eines bevorzugten Ausführungsbeispiels der ANDF-Installationseinrichtung. Die quadratischen Blöcke stellen Module dar, wobei die Pfeile eine Operation und einen Datenfluß darstellen.
  • Fig. 14 ist eine teilweise Auflistung eines Computerprogramms eines beispielhaften maschinenunabhängigen ANSI-C-Computerprogramms.
  • Fig. 15 umfaßt die Fig. 15A, 15B, 15C, 15D und 15E.
  • Fig. 15A, 15B, 15C und 15D zeigen eine Sequenz von HPcode-Plus-Anweisungen, welche eine HPcode-Plus-Übersetzung der teilweisen Auflistung des Computerprogramms von Fig. 14 darstellen.
  • Fig. 15E stellt die Art und Weise dar, mit welcher die Fig. 15A, 15B, 15C und 15D verbunden sind.
  • Detaillierte Beschreibung der bevorzugten Ausführungsbeispiele Inhaltsangabe
  • 1. ANDF-Kompiler
  • 2. HPcode-Plus
  • 2.16 Virtuelles Maschinenmodell (Ausdruckstapelmodell)
  • 2.2 Speichermodell
  • 2.3 Speicherzuordnung und Datentypen
  • 2.4. HPcode-Puls-Objektdatei
  • 2.5. HPcode-Plus-Anweisungssatz für ANSI-C
  • 3. ANDF-Herstellungseinrichtung
  • 3.1. Vorverarbeitungseinrichtung
  • 3.2. Kompiler
  • 3.2.1. Abtasteinrichtung/Syntax-Analyseeinrichtung
  • 3.2.2. Semantik-Analyseeinrichtung
  • 3.2.3. Codegenerator
  • 3.2.3.1. Speicherzuordnung
  • 3.2.3.2. Bereich, Verbindung und Vereinbarung einer Variablen
  • 3.2.3.3. Konstanten
  • 3.2.3.3.1. Gleitkomma- und Ganzzahlkonstanten
  • 3.2.3.3.2. Aufzählungskonstanten
  • 3.2.3.3.3. Zeichenkonstanten
  • 3.2.3.4. Datenumwandlungen
  • 3.2.3.5. Postfix-Ausdrücke
  • 3.2.3.6. Unäre Operationen
  • 3.2.3.7. Andere Operationen
  • 3.2.3.8. Faltung (Folding) von Konstanten- Operationen
  • 3.2.3.9. Initialisierung
  • 3.2.3.10. Anweisungsvorschriften
  • 3.2.3.11. Funktionen
  • 3.2.3.12. Beispiel
  • 3.3. Hochstufiger Optimierer
  • 3.4. Archiviereinrichtung
  • 4. ANDF-Installationseinrichtung
  • 4.1. Tupe 1-Generator
  • 4.2. Niederstufiger Codegenerator
  • 4.2.1. Anweisungsauswahl
  • 4.2.2. Speicherzuordnung
  • 4.2.3. Symbol-Debug-Unterstützung
  • 4.2.4. Optimierungsunterstützung
  • 4.2.5. Objektdateiverwaltung
  • 4.3. Niederstufiger Optimierer
  • 4.4. Registerzuordnungseinrichtung
  • 4.5. Maschinenspezifischer Optimierer
  • 4.6. Objektdateigenerator
  • 1. ANDF-Kompiler
  • Die vorliegende Erfindung ist auf die Standards gerichtet, die durch ANSI für die Programmiersprache C (d. h. ANSI-C) und durch die Open Software Foundation (OSF) für Unix-Computerplattformen bekannt gemacht sind. Es sollte jedoch offensichtlich sein, daß die vorliegende Erfindung nicht auf die ANSI- und OSF-Standards begrenzt ist.
  • Die vorliegende Erfindung ist entweder in der vorliegenden Form oder in den nun betrachteten Formen auf Rechnerumgebungen anwendbar, welche Abweichungen, Modifikationen und Erweiterungen des ANSI- und OSF-Standards verwenden. Der Bereich der vorliegenden Erfindung bezüglich der ANSI- und OSF-Standards wird in dem folgenden Text ausführlich beschrieben.
  • Wie es in Fig. 1 gezeigt ist, ist ein herkömmlicher Kompiler 106 in zwei Teile, einen vorderen Kompilerteil 108 und einen hinteren Kompilerteil 116, logisch unterteilt. Der vordere Kompilerteil 108 empfängt einen Computerprogrammquellencode 102 als Eingabe. Das Computerprogramm 102 ist gewöhnlicherweise in einer hochstufigen Computerprogrammiersprache, wie z. B. Pascal, C und Ada, geschrieben.
  • Der vordere Kompilerteil 108 ist für die Sprachenverarbeitung der Computerprogramme, wie z. B. das Abtasten, das syntaktische Analysieren und die semantische Analyse, verantwortlich. Nach dem Abschluß der gesamten Sprachenverarbeitung übersetzt der vordere Kompilerteil 108 den Computerprogrammquellencode 102 in eine Kompilerzwischendarstellung 112. Die Kompilerzwischendarstellung 112 ist in einer Kompilerzwischensprache, wie z. B. Pcode und Ucode, geschrieben.
  • Der hintere Kompilerteil 116 empfängt die Kompilerzwischendarstellung 112 als Eingabe und erzeugt einen Objektcode 120 für eine Zielcomputerplattform (nicht gezeigt) 6 Die Zielcomputerplattform ist die Computerplattform, auf der sich der hintere Kompilerteil 116 befindet. Der Objektcode 112 ist in einer speziellen Maschinensprache der Zielcomputerplattform geschrieben.
  • Normalerweise arbeitet der vordere Kompilerteil 108 auf eine maschinen- oder architekturabhängige Art und Weise. Folglich ist die Kompilerzwischendarstellung 112, welche durch den vorderen Kompilerteil 108 erzeugt wird, gewöhnlicherweise von der Computerarchitektur der ursprünglichen Computerplattform (d. h. von der Computerplattform, auf der sich der vordere Kompilerteil 108 befindet) abhängig.
  • Die vorliegende Erfindung ist eine deutliche Verbesserung des in Fig. 1 gezeigten herkömmlichen Kompilers 106. Die Verbesserung der vorliegenden Erfindung wird durch Verwenden einer HPcode-Plus-Kompilerzwischensprache als die Kompilerzwischensprache erreicht. Die HPcode-Plus-Kompilerzwischensprache (oder einfach HPcode-Plus) ist insofern eine Verbesserung gegenüber herkömmlichen Kompilerzwischensprachen, wie z. B. Pcode und Ucode, als HPcode-Plus architekturneutral ist. Beispielsweise arbeiten Kompiler, die auf der HPcode- Plus-Kompilerzwischensprache basieren, auf eine architekturneutrale oder maschinenunabhängige Art und Weise.
  • Fig. 2 stellt einen Überblick eines bevorzugten Ausführungsbeispiels der vorliegenden Erfindung dar. Fig. 2 weist ein hochstufiges Blockdiagramm eines Kompilers 234 mit einem architekturneutralen Verteilungsformat der vorliegenden Erfindung (d. h. einen ANDF-Kompiler) auf. Der ANDF-Kompiler 234, der in Fig. 2 gezeigt ist, basiert auf der HPcode-Plus Kompilerzwischensprache.
  • Bei dem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung ist die Logik für den ANDF-Kompiler 234 in einem Computerprogramm gespeichert. Das Computerprogramm ist auf einem computerlesbaren Medium, wie z. B. einem Magnetband, einer Magnetplatte oder einem Nur-Lese-Speicher (ROM; ROM = read only memory = Nur-Lese-Speicher), gespeichert.
  • Ähnlich wie herkömmliche Kompiler 106 weist der ANDF-Kompiler 234 der vorliegenden Erfindung einen vorderen Teil auf. Mit dem ANDF-Kompiler 234 wird jedoch der vordere Teil als ANDF-Herstellungseinrichtung 208 bezeichnet. Der ANDF-Kompiler 234 weist ferner ein oder mehrere hintere Teile auf. Bei dem bevorzugten Ausführungsbeispiel von Fig. 2 sind zwei hintere Teile, die ANDF-Installationseinrichtungen 218 und 228 genannt werden, gezeigt.
  • Die ANDF-Herstellungseinrichtung 208 befindet sich auf einer ursprünglichen Computerplattform 206. Es sollte angemerkt werden, daß die ursprüngliche Computerplattform 206 auch Herstellungseinrichtungsstandort genannt wird. Die eine oder mehrere ANDF-Installationseinrichtungen 218 und 228 befinden sich auf Installierstandorten 216 bzw. 226, die auch Zielcomputerplattformen genannt werden. Es sollte angemerkt werden, daß der Herstellungseinrichtungsstandort 206 und die Installierstandorte 216, 226 die gleiche Computerplattform darstellen oder auch nicht darstellen können.
  • Die ANDF-Herstellungseinrichtung 208 und die ANDF-Installationseinrichtungen 218, 228 können entweder unabhängig, als zwei getrennte Computerprogramme, oder zusammen, als zwei Phasen eines einzigen Computerprogramms, arbeiten.
  • Wie es in Fig. 2 gezeigt ist, empfängt die ANDF-Herstellungseinrichtung 208 den ANSI-C-Quellencode der maschinenunabhängigen Computerprogramme 202. Es sollte jedoch offensichtlich sein, daß die vorliegende Erfindung nicht darauf beschränkt ist, lediglich ANSI-C-Quellensprachprogramme zu unterstützen. Wie es im nachfolgenden beschrieben wird, wird eine Unterstützung für andere hochstufige Sprachen in Betracht gezogen.
  • Maschinenunabhängige Computerprogramme 202 sind Computerprogramme, welche aus Anweisungen zusammengesetzt sind. Diese Anweisungen umfassen hochstufige Quellenanweisungsvorschriften und Ausdrücke.
  • Maschinenunabhängige Computerprogramme 202 setzen keine systemspezifischen Merkmale, wie z. B. Speicherarchitekturen und Registerarchitekturen, voraus. Maschinenunabhängige Computerprogramme 202 enthalten ferner keine Verweise auf systemspezifische Funktionen, wie z.B. nichtstandardmäßige Betriebssystemfunktionsaufrufe. Maschinenunabhängige Computerprogramme 202 können Verweise auf objektähnliche Standardmakros, funktionsähnliche Makros und Datentypdefinitionen von Standardkopfdateien enthalten. Maschinenunabhängige Computerprogramme 202 können ferner Verweise auf standartisierte Funktionsaufrufe enthalten. Die Standardkopfdateien und standartisierten Funktionsaufrufe werden durch einen Sprachenstandard, wie z. B. ANSI-C, definiert.
  • Die ANDF-Herstellungseinrichtung 208 arbeitet gemäß der HPcode-Plus-Kompilerzwischensprache auf eine architekturneutrale oder maschinenunabhängige Art und Weise. Folglich setzt die ANDF-Herstellungseinrichtung 208 beim Übersetzen des ANSI-C-Quellensprachenprogramms 202 in eine Kompilerzwischendarstellung 212 bezüglich der Architektur der Zielcomputerplattformen 216 und 226 nichts voraus. Folglich ist die Kompilerzwischendarstellung 212, die von der ANDF-Herstellungseinrichtung 208 erzeugt wird, architekturneutral oder maschinenunabhängig und stellt ein architekturneutrales Verteilungsformat (ANDF) dar.
  • Die Kompilerzwischendarstellung 212 wird zu den Zielcomputerplattformen 216 und 226 verteilt. Die ANDF-Installationseinrichtungen 218 und 228, welche sich auf den Zielcomputerplattformen 216 bzw. 226 befinden, übersetzen die Kompilerzwischendarstellung 212 in Objektcodedarstellungen 222 und 232.
  • Bei einem alternativen Ausführungsbeispiel der vorliegenden Erfindung werden die ANDF-Installationseinrichtungen 216, 226 durch ANDF-Interpretierer (nicht gezeigt in Fig. 2) ersetzt. Die ANDF-Interpretierer führen die Kompilerzwischendarstellung 212 direkt aus, ohne die Kompilerzwischendarstellung 212 zuerst in die Objektcodedarstellungen 222, 232 zu übersetzen.
  • Wie es im vorhergehenden angemerkt wurde, wird die HPcode- Kompilerzwischensprache als die Kompilerzwischensprache bei dem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung verwendet. Somit schreibt die ANDF-Herstellungseinrichtung 208 die Kompilerzwischendarstellung 212 in der HPcode- Plus-Kompilerzwischensprache.
  • Die HPcode-Plus-Kompilerzwischensprache ist eine Verbesserung gegenüber HPcode, welcher eine Verbesserung gegenüber U-Code war. U-Code ist eine Kompilerzwischensprache, welche ursprünglich zum Verteilen eines Pascal-Kompilers zu den CRAY-1 und S-1-Computerplattformen verwendet wurde. Dieselbe wurde von Stanford und der Universität von Californien in San Diego entwickelt. U-Code war jedoch nicht architekturneutral und konnte lediglich Pascal- und Fortran-Quellensprachenprogramme unterstützen.
  • HPcode ist auch eine Kompilerzwischensprache. Dieselbe basierte auf U-Code, wobei jedoch der Anweisungssatz erweitert wurde, um weitere hochstufige Sprachen, einschließlich Pascal, Frotran, Ada, Cobol, RPG, Business Basic, eine interne Algol-ähnliche Sprache und eine Sprache der vierten Generation, die HP-Transact genannt wird, zu unterstützen.
  • Wie es im vorhergehenden angemerkt wurde, ist die HPcode- Plus-Kompilerzwischensprache insofern gegenüber HPcode und gegenüber allen herkömmlichen Kompilerzwischensprachen eine Verbesserung, als HPcode-Plus architekturneutral ist. Beispielsweise arbeiten Kompiler, die auf der HPcode-Plus-Kompilerzwischensprache basieren, wie z. B. der ANDF-Kompiler 234 der vorliegenden Erfindung, auf eine architekturneutrale oder maschinenunabhängige Art und Weise.
  • Die HPcode-Plus-Kompilerzwischensprache ist insofern eine weitere Verbesserung gegenüber HPcode, als HPcode-Plus die Programmiersprache C unterstützt.
  • Die folgenden Abschnitte beschreiben die vorliegende Erfindung nun detaillierter
  • Abschnitt 2 beschreibt die HPcode-Plus-Kompilerzwischensprache, welche die Kompilerzwischensprache der vorliegenden Erfindung ist.
  • Abschnitt 3 beschreibt die ANDF-Herstellungseinrichtung 208 der vorliegenden Erfindung.
  • Abschnitt 4 beschreibt die ANDF-Installationseinrichtung 218, 228 der vorliegenden Erfindung.
  • Einige Aspekte der vorliegenden Erfindung können unter Verwendung der existierenden Kompilertechnologie implementiert werden. Jedoch sind Modifikationen gegenüber der existierenden Kompilertechnologie erforderlich, um die Verbesserungen der vorliegenden Erfindung zu erreichen. Die Erörterungen in den Abschnitten 2, 3 und 4 richten sich auf diese Modifikationen gegenüber der existierenden Kompilertechnologie. Für eine allgemeine Erörterung der existierenden Kompilertechnologie siehe "Compilers, Principles, Techniques, and Tools" von Alfred V. Aho, Ravi Sethi, und Jeffrey D. Ullman (Addison Wesley 1986), welche hierin durch Bezugnahme vollständig aufgenommen sind.
  • In seiner gegenwärtigen Ausführung kann die HPcode-Plus-Kompilerzwischensprache als die Kompilerzwischensprache für architekturneutrale C-Kompiler auf OSF-Computerplattformen, wie z. B. der ANDF-Kompiler 234 der vorliegenden Erfindung, verwendet werden. Folglich sind die Beschreibungen des bevorzugten Ausführungsbeispiels der vorliegenden Erfindung in den Abschnitten 2, 3 und 4 größtenteils auf diese Computerumgebung gerichtet.
  • Es sollte jedoch offensichtlich sein, daß die vorliegende Erfindung nicht auf diese Computerumgebung beschränkt ist.
  • Da die HPcode-Plus-Kompilerzwischensprache eine Verbesserung von HPcode ist, weist dieselbe einen reichen Anweisungssatz zum Unterstützen weiterer hochstufiger Sprachen, wie z. B. Pascal, Fortran, Ada, Cobol, RPG, Business Basic, einer internen Algol-ähnlichen Sprache und einer Sprache der vierten Generation, die HP-Transact genannt wird, auf. Es wird in Betracht gezogen, HPcode-Plus zu modifizieren, um diese Sprachen auf eine architekturneutrale Weise zu unterstützen.
  • Zustätzlich sollten die Kompilerzwischendarstellungen 212, die von den ANDF-Kompilern 234 hergestellt werden, auf einer beliebigen Computerplattform arbeiten, vorausgesetzt, daß (1.) das Quellensprachenprogramm 202 auf eine maschinenunabhängige Art und Weise unter Verwendung standartisierter Funktionsaufrufe zu einer Laufzeitbibliothek geschrieben wurde, und daß (2.) geeignete ANDF-Installationseinrichtungen 218, 228 auf den Zielcomputerplattformen 216, 226 vorhanden sind.
  • 2. HPcode-Plus
  • Bei dem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung wird die HPcode-Plus-Kompilerzwischensprache als die Kompilerzwischensprache verwendet.
  • HPcode-Plus ist insofern gegenüber herkömmlichen Kompilerzwischensprachen eine Verbesserung, als HPcode-Plus architekturneutral ist. Beispielsweise arbeiten Kompiler, die auf der HPcode-Plus-Kompilerzwischensprache basieren, wie z. B. der ANDF-Kompiler 234 der vorliegenden Erfindung, auf eine architekturneutrale oder maschinenunabhängige Art und Weise.
  • Die Merkmale der HPcode-Plus-Kompilerzwischensprache werden in diesem Abschnitt beschrieben. Die HPcode-Plus-Anweisungen sind mit ausschließlich großgeschriebenen Buchstaben dargestellt.
  • Weitere Merkmale von HPcode-Plus werden nötigenfalls in den Abschnitten 3 und 4 dieses Dokuments beschrieben. Beim Lesen dieser Abschnitte kann es hilfreich sein, sich auf Fig. 3 zu beziehen, welche eine Liste der HPcode-Plus-Kompilerzwischensprachenanweisungen für ANSI-C darstellt.
  • 2.1 Virtuelles Maschinenmodell (Ausdrucksstapelmodell)
  • Die HPcode-Plus-Kompilerzwischensprache ist einer Assemblersprache für eine virtuelle (d. h. fiktionale) HPcode-Plus- Computerplattform sehr ähnlich. Dementsprechend sind die Kompilerzwischendarstellungen, die in der HPcode-Plus-Kompilerzwischensprache geschrieben sind, Assemblersprachenprogrammen für die virtuelle HPcode-Plus-Computerplattform sehr ähnlich.
  • Bezugnehmend beispielsweise auf Fig. 2 übersetzt die ANDF- Herstellungseinrichtung 208 den Quellencode 202 in dessen äquivalente Assemblersprachendarstellung 212.
  • Die ANDF-Herstellungseinrichtung 208 erzeugt jedoch nicht die Assemblersprachendarstellung 212 für die ursprüngliche Computerplattform 206. Vielmehr erzeugt die ANDF-Herstellungseinrichtung 208 die Assemblersprachendarstellung 212 für die virtuelle HPcode-Plus-Computerplattform. Die HPcode-Plus-Kompilerzwischensprache stellt die Assembiersprache für die virtuelle HPcode-Plus-Computerplattform dar.
  • Die ANDF-Installationseinrichtung 218, 228 empfängt die Kompilerzwischendarstellung 212, welche eine Assembiersprache für die virtuelle HPcode-Plus-Computerplattform darstellt, und erzeugt den Objektcode 222, 232 für die Zielcomputerplattform 216, 226.
  • Die virtuelle HPcode-Plus-Computerplattform enthält einen Ausdrucksstapel und einen Speicher. Die meisten HPcode- Plus-Anweisungen erhalten ihre Argumente von dem Ausdrucksstapel und schieben ihre Ergebnisse zu denselben. Jedem Datenobjekt auf dem Ausdrucksstapel ist ein Datentyp zugeordnet.
  • Die HPcode-Plus-Anweisungen manipulieren die beliebigen Ausdrucksstapelelemente nicht direkt. Zumeist manipulieren die HPcode-Plus-Anweisungen lediglich die obersten N-Elemente des Ausdrucksstapel, wobei N für jede HPcode-Plus-Anweisung definiert wird.
  • Die HPcode-Plus-Anweisungen DUP, SWP und ROT manipulieren die obersten Elemente auf dem Ausdrucksstapel, ohne deren Werte zu verändern. Eine HPcode-Plus-Anweisung DEL löscht das oberste Element auf dem Ausdrucksstapel.
  • Mehrere HPcode-Plus-Anweisungen sind zum Bewegen von Daten zwischen dem Ausdrucksstapel und dem Speicher vorgesehen, die die HPcode-Plus-Anweisungen LOD und ILOD für ein direktes und ein indirektes Laden, die HPcode-Plus-Anweisungen STR und ISTR für ein direktes und indirektes Speichern und die HPcode-Plus-Anweisung INST für ein indirektes nichtlöschendes Speichern umfassen.
  • Zusätzlich werden mit HPcode-Plus-Anweisungen LDA, LDL bzw. LDP Datenobjektadressen, Etiketten und Prozeduren auf dem Ausdrucksstapel geladen. HPcode-Plus-Anweisungen LDC und LCA werden verwendet, um Konstanten und Konstantenadressen auf dem Ausdrucksstapel zu laden.
  • Der Ausdrucksstapel muß auf den Zielcomputerplattformen 216, 226 nicht physisch vorhanden sein. Falls beispielsweise die Zielcomputerplattformen 216, 226 Register-basierend sind, kann der Ausdrucksstapel in Registern nachgebildet werden.
  • Es muß von den ANDF-Installationseinrichtungen 218, 228 Sorgfalt darauf verwendet werden&sub1; daß die Semantik des Ausdrucksstapels bewahrt bleibt. Werte, die auf den Ausdrucksstapel geladen werden, werden auf den Ausdrucksstapel "kopiert". Die HPcode-Plus-Anweisungen verändern nicht bereits auf dem Ausdrucksstapel die Werte.
  • Gewisse Einschränkungen, die die Verwendung des Ausdrucksstapels betreffen, sind vorgeschrieben. Verzweigungs- und Etiketten-HPcode-Plus-Anweisungen erfordern es, daß der Ausdrucksstapel leer ist. Dies entlastet ANDF-Installationseinrichtung 218, 228 davon, alle möglichen Sprungquellen für jede Etikette bestimmen zu müssen.
  • HPcode-Plus-Prozeduraufrufe können auftreten, wenn der Ausdrucksstapel leer ist. Elemente, die sich auf dem Ausdrucksstapel befinden, wenn eine HPcode-Plus-Anweisung MST ausgeführt wird, werden für die aufgerufene Prozedur nicht sichtbar sein, sondern werden beim Rücksprung wieder sichtbar werden.
  • 2.2 Speichermodell
  • HPcode-Plus-definiert ein Speichermodell, bei dem der Speicher in vier Bereiche unterteilt ist: einen statischen Speicher, einen lokalen Speicher, einen Konstantenspeicher und einen Parameterspeicher. Datenobjekte in jedem Speicherbereich können drei Attribute aufweisen, die denselben zugeordnet sind: Konstantenattribut, Registerattribut und flüchtiges Attribut.
  • Bei der architekturneutralen Umgebung der vorliegenden Erfindung erfordert die ANDF-Herstellungseinrichtung 206 keine Voraussetzungen, die die Art und Weise betreffen, mit der die Datenobjekte in die Speicher der Zielcomputerplattformen 216, 226 abgebildet werden. Eine HPcode-Plus-Anweisung SYM ist vorgesehen, um eine tatsächliche Speicherzuordnung zu den ANDF-Installationseinrichtungen 218, 228 zurückzustellen.
  • Die ANDF-Herstellungseinrichtung 208 verwendet die HPcode- Plus-Anweisung SYM, um jedem Datenobjekt und jedem Datentyp einen eindeutigen Symbol-Identifizierer zu geben. Die einzige Ausnahme für diese Regel besteht darin, daß der Symbol- Identifizierer der Datentypen und Datenobjekte in lokalen Bereichen wiederverwendet werden kann.
  • Die ANDF-Herstellungseinrichtung 208 verwendet ferner die HPcode-Plus-Anweisung SYM, um jedem Datenobjekt einen Speichertyp und ein Attribut (d. h. Konstante, Register und flüchtiges) zuzuordnen.
  • Die HPcode-Plus-Speicherverweisanweisungen greifen über die Symbol-Identifizierer der Datenobjekte, die durch die SYM- HPcode-Plus-Anweisung definiert werden, auf den Speicher zu. Diese HPcode-Plus-Speicherverweisanweisungen umfassen LDA und LCA, um eine Adresse eines HPcode-Plus-Datenobjekts auf den Ausdrucksstapel zu laden. Ferner enthält HPcode-Plus Anweisungen, wie z. B. die Zeichenfolgenanweisungen, welche den Speicher indirekt manipulieren.
  • Die ANDF-Installationseinrichtungen 218, 228 bilden die Datenobjekte in die Speicher ihrer Zielcomputerplattformen 216, 226 ab. Dieses Abbilden hängt von dem Speichertyp und dem Attribut ab, das jedem Datenobjekt zugeordnet ist. Eine Beschreibung der Speichertypen und Attribute ist in den folgenden Absätzen dargestellt.
  • Datenobjekte mit dem statischen Speichertyp behalten ihre Werte von einem Aufruf einer Prozedur bis zu dem nächsten bei. Der statische Speicher kann in einen globalen statischen Speicher, einen importierten statischen Speicher, einen exportierten statischen Speicher und einen statischen Prozedurspeicher unterteilt werden. Variablen, die in diese Speicher abbilden, umfassen statische Dateivariablen, importierte statische Variablen, exportierte statische Variablen, bzw. statische (oder lokale) Prozedurvariablen.
  • Datenobjekte mit dem lokalen Speichertyp behalten ihre Werte von einem Aufruf einer Prozedur bis zu dem nächsten nicht bei. Diese Objekte werden dem lokalen Speicherbereich zugeordnet. Jede Prozedur nimmt einen lokalen Speicherbereich auf.
  • Für Sprachen, die Prozeduren mit verschachtelter Ebene nicht unterstützen, wie z. B. ANSI-C, kann lediglich durch die definierende Prozedur auf die lokalen Datenobjekte verwiesen werden.
  • Für Sprachen, die Prozeduren mit verschachtelter Ebene unterstützen, wie z. B. Pascal, kann auf die lokalen Datenobjekte durch die definierende Prozedur oder deren Prozeduren auf einer niedrigeren verschachtelten Ebene verwiesen werden. Für diese Sprachen sind die Bereichsregeln zu denen in Pascal äquivalent.
  • Datenobjekte mit dem Parameterspeichertyp sind in dem Parameterspeicherbereich zugeordnet. Jede Prozedur nimmt einen Parameter speicherbereich auf.
  • Für Sprachen, welche verschachtelte Prozeduren nicht unterstützen, wie z. B. ANSI-C, kann lediglich durch die definierende Prozedur auf die Variablen in dem Parameterspeicherbereich verwiesen werden.
  • Für Sprachen, welche verschachtelte Prozeduren unterstützen, wie z. B. Pascal, kann auf Variablen in dem Parameterspeicherbereich von außerhalb der definierenden Prozedur abhängig von den Pascal-Bereichsregeln verwiesen werden. Dieser Bereich wird durch die aufrufende Prozedur zugeordnet.
  • Alle HPcode-Plus-Konstanten befinden sich in dem Konstantenspeicherbereich. Zusätzlich werden beliebige Datenobjekte mit dem Konstantenspeicherattribut, das durch die SYM-HPcode-Plus-Anweisung KIND_MODIFIER definiert wird, in dem Konstantenspeicherbere ich zugeordnet.
  • Die ANDF-Installationseinrichtungen 218, 228 behandeln den Konstantenspeicherbereich falls möglich als Nur-Lese-Bereich. Die ANDF-Herstellungseinrichtung 208 setzt jedoch nicht voraus, daß die Zielcomputerplattformen 216, 226 einen Nur-Lese-Speicher unterstützen können. Eine Zuweisung zu dem Konstantenspeicherbereich ergibt ein undefiniertes Verhalten.
  • Das Registerattribut dient als Hinweis für die ANDF-Installationseinrichtungen 218, 228, daß das zugeordnete Datenobjekt in einem schnellen Cache-Speicher zugeordnet werden sollte. Die ANDF-Installationseinrichtungen 218, 228 sind jedoch nicht verpflichtet, die Anforderung zu erfüllen. Das Laden einer Adresse einer Variablen mit dem Registerattributsatz kann das Registerattribut automatisch ausschalten.
  • 2.3 Speicherzuordnung und Datentypen
  • Die ANDF-Herstellungseinrichtung 208 erfordert keine Voraussetzungen, die die Art und Weise betreffen, mit welcher Datenobjekte in die Speicher der Zielcomputerplattformen 216, 226 abgebildet werden. Stattdessen genügt die ANDF-Herstellungseinrichtung 208 den Speicheranforderungen durch die SYM-HPcode-Plus-Anweisung.
  • Eine tatsächliche Speicherzuordnung wird durch die ANDF-Installationseinrichtungen 218, 228 durchgeführt. Die tatsächliche Größe und Ausrichtung jedes Datenobjekts wird basierend auf dem Datentyp, der in der SYM-HPcode-Plus-Anweisung spezifiziert ist, durch die ANDF-Installationseinrichtungen 218, 228 bestimmt.
  • HPcode-Plus definiert vordefinierte Datentypen. Eine Liste der vordefinierten HPcode-Plus-Datentypen ist in Fig. 5 dargestellt. Mit geringfügigen Unterschieden bilden sich die vordefinierten HPcode-Plus-Datentypen in die entsprechenden Datentypen in ANSI-C ab. Die Abbildung der ANSI-C-Datentypen in vordefinierte HPcode-Plus-Datentypen ist in Fig. 6 dargestellt.
  • Die vordefinierten HPcode-Plus-Datentypen weisen eindeutige vordefinierte Symbol-Identifizierer auf. Die vordefinierten HPcode-Plus-Datentypen sind die einzigen Datentypen, die nicht durch die SYM-HPcode-Plus-Anweisung definiert werden müssen. Dieselben sind die Bausteine für Anwender-definierte Datentypen.
  • Die Anwender-definierten Datentypen, welche alle Datentypen außer den vordefinierten HPcode-Plus-Datentypen darstellen, werden unter Verwendung der SYM-HPcode-Plus-Anweisung mit dem < sym kind> -Parameter definiert, der einem der Typenwerte entspricht, die in Fig. 7 aufgelistet sind.
  • Die ANDF-Installationseinrichtungen 218, 228 müssen sicherstellen, daß ihre Speicherzuordnungsschematas mit denen eines Kompilers auf der ursprünglichen Computerplattform 206 konsistent sind.
  • 2.4 HPcode-Plus-Obiektdatei
  • Die Kompilerzwischendarstellung 212, die von der ANDF-Herstellungseinrichtung 208 erzeugt wird, wird in einer HPcode-Plus-Objektdatei 1160 (Fig. 11) gespeichert.
  • Die HPcode-Plus-Objektdatei 1160 ist eine Datei, die eine Sequenz von HPcode-Plus-Anweisungen in der ASCII-Form enthält, welche bezüglich der Form gewissen Regeln folgen. Die HPcode-Plus-Objektdatei 1160 wird ferner als eine Kompilierungseinheit bezeichnet.
  • Wie es in Fig. 11 gezeigt ist, können einige HPcode-Plus-Objektdateien 1150, 1160 durch eine/einen Archiviereinrichtung/Linker 1154 archiviert oder gelinkt werden, um eine einzige HPcode-Plus-Archivdatei 1158 oder eine gelinkte HPcode-Plus-Datei 1170 zu erzeugen.
  • Das Format der HPcode-Plus-Objektdatei 1150, 1160 ist in Fig. 8 gezeigt.
  • HPcode-Plus-Anweisungsnamen sind in Fig. 8 aus Gründen der Lesbarkeit lediglich in Textform gezeigt. Bei tatsächlichen HPcode-Plus-Objektdateien 1150, 1160 werden stattdessen numerische Opcodes verwendet.
  • Die Anweisungen werden durch ASCII-Zeilenwechselzeichen abgegrenzt. Alle Ganzzahlen, einschließlich der Opcodes, werden durch Hexadezimal-Literale dargestellt, um die Größe der HPcode-Plus-Objektdatei 1150, 1160 zu minimieren.
  • In einer Zeile werden Felder durch eine oder mehrere Leerstellen abgegrenzt. Ein "Opcode"-Feld ist als erstes angeordnet, gefolgt von einer Null oder mehreren "Operanden"- Feldern. Operanden-Felder bestehen aus Ganzzahlen, aus mit Anführungszeichen versehenen Zeichenfolgen, aus Etiketten, aus reellen Zahlen, aus Ziffemfolgen, die Sätze darstellen, und aus "%" oder "#" gefolgt von Ganzzahlen, die Makroargumente bzw. SYM Symbol-ids (ids = identifications = Identifikationen) darstellen. Mit Anführungszeichen versehene Zeichenfolgen werden durch doppelte Anführungszeichen abgegrenzt (ein internes Anführungszeichen ist durch zwei doppelte Anführungszeichen in einer Reihe dargestellt).
  • Jede ENT/END-HPcode-Plus-Anweisungssequenz kennzeichnet den Code einer Prozedur. SYM-HPcode-Plus-Anweisungen in einem Paar von KIND_FUNCTION- und KIND_ END-SYM-HPcode-Plus-Anweisungen stellen die Datenvereinbarungen dieser Prozedur dar.
  • Für Sprachen, welche mehrere Einsprungspunkte ermöglichen, erscheint vor der HPcode-Plus-Anweisung END mehr als eine HPcode-Plus-Anweisung ENT. Die erste HPcode-Plus-Anweisung ENT signalisiert den frühesten Einsprungpunkt und definiert den Start des Bereichs einer Prozedur. Die HPcode-Plus-Anweisung END signalisiert das Ende der gesamten Prozedur.
  • Falls die HPcode-Plus-Objektdatei 1150, 1160 die Prozedur enthält, welche als der Programmeinsprungpunkt dient, dann wird die HPcode-Plus-Objektdatei 1150, 1160 speziell mit einer HPcode-Plus-Anweisung OPTN markiert. Die Ausführung eines HPcode-Plus-Computerprogramms beginnt mit der Programmeinsprungpunktprozedur. Jede HPcode-Plus-Anweisung wird der Reihe nach ausgeführt, es sei denn, ein Fehler tritt auf, oder eine HPcode-Plus-Anweisung wird ausgeführt, welche die Steuerung überträgt.
  • Falls das Quellencomputerprogramm 202 verschachtelte Prozeduren (Pascal, Cobol oder Ada) enthält, müssen die Prozedur auf der äußersten Ebene und alle inneren Prozeduren in derselben HPcode-Plus-Objektdatei 1150, 1160 erscheinen.
  • 2.5 HPcode-Plus-Anweisungssatz für ANSI-C
  • In seiner gegenwärtigen Ausführung kann HPcode-Plus als die Kompilerzwischensprache für architekturneutrale C-Kompiler auf OSF-Computerplattformen verwendet werden. Es sollte jedoch offensichtlich sein, daß die vorliegende Erfindung nicht auf diese Computerumgebung beschränkt ist.
  • Wie es im vorhergehenden beschrieben wurde, weist HPcode- Plus einen reichen Anweisungssatz zum Unterstützen hochstufiger Sprachen auf, die sich von C unterscheiden, wie z. B. Pascal, Fortran, Ada, Cobol, RPG, Business Basic, eine interne Algol-ähnliche Sprache und eine Sprache der vierten Generation, die HP-Transact genannt wird. Es wird in Betracht gezogen, HPcode-Plus zu modifizieren, um diese Sprachen auf eine architekturneutrale Art und Weise zu unterstützen.
  • Zusätzlich sollten die Kompilerzwischendarstellungen 212, die von ANDF-Kompilern 234 erzeugt werden, auf einer beliebigen Computerplattform arbeiten, vorausgesetzt, daß (1.) das Quellencomputerprogramm 202 auf eine maschinenunabhangige Art und Weise unter Verwendung standartisierter Funktionsaufrufe zu der Laufzeitbibliothek geschrieben wurde, und daß (2.) geeignete ANDF-Installationseinrichtungen 218, 228 auf den Zielcomputerplattfqrmen 216, 226 vorhanden sind.
  • Der HPcode-Plus-Anwendungssatz für ANSI-C ist in Fig. 3 dargestellt. Diese HPcode-Plus-Anweisungen werden in den folgenden Abschnitten beschrieben. In diesen Abschnitten werden Ausdrucksstapelelemente und zwingend durchlaufene Parameter durch "< > " gekennzeichnet. Optional durchlaufene Parameter werden durch "[]" gekennzeichnet. Die Abkürzung "op" stellt einen "Operanden" dar.
  • In seiner vorliegenden Form unterstützt HPcode-Plus weder eine Parallelität noch eine Vektorisierung. Gegenwärtig arbeiten alle HPcode-Plus-Anweisungen auf skalaren Gegenständen. HPcode-Plus ist jedoch in der Lage, ausreichende Informationen zu führen, um Vektoroperationen zu unterstützen. Somit kann HPcode-Plus ohne weiteres gesteigert werden, um sowohl eine Parallelität als auch eine Vektorisierung zu unterstützen.
  • Existierende HPcode-Plus-Anweisungen, welche erforderlich sind, um weitere hochstufige Sprachen zu unterstützen, welche jedoch noch nicht vollständig architekturneutral sind, sind in Fig. 4 dargestellt.
  • 2.5.1. ACVT - Arithmetic ConVerT (Arithmetic convert = Arithmetisches Umwandeln)
  • Die Syntax der HPcode-Plus-Anweisung ACVT ist im folgenden dargestellt:
  • ACVT
  • ACVT wird verwendet, um Operanden in einen bekannten Datentyp umzuwandeln. ACVT hebt < op2> und < op1> von dem Ausdrucksstapel ab. ACVT führt auf < op2> und < op1> Datentypumwandlungen durch, um < op2> und < op1> für eine arithmetische Verarbeitung vorzubereiten. Nach der Umwandlung werden < op2> und < op1> auf dem Ausdrucksstapel abgelegt.
  • Die Umwandlungsregeln sind sprachenspezifisch. Die HPcode- Plus-Anweisung LANGUAGE OPTN (language option = Sprachenoption) zeigt an, welcher Satz von Regeln zu verwenden ist. Im folgenden sind beispielsweise die üblichen arithmetischen Umwandlungen für ANSI-C dargestellt:
  • o Falls einer der Operanden den Typ long double (long double = lang doppelt) aufweist, wird der andere Operand in long double umgewandelt.
  • o Andernfalls, falls einer der Operanden den Typ double (double = doppelt) aufweist, wird der andere Operand in double umgewandelt.
  • o Andernfalls, falls einer der Operanden den Typ float (float = gleiten) aufweist, wird der andere Operand in float umgewandelt.
  • o Anderfalis, falls ein Operand den Typ long int (long int = long integer = lange Ganzzahl) und der andere Operand den Typ unsigned int (unsigned int = unsigned integer = vorzeichenlose Ganzzahl) aufweist, und falls long int alle Werte von unsigned int darstellen kann, dann wird der Operand des Typs unsigned int in long int umgewandelt; falls long int nicht alle Werte von unsigned int darstellen kann, werden beide Operanden in unsigned int umgewandelt.
  • o Andernfalls, falls einer der Operanden den Typ long int aufweist, wird der andere Operand in long int umgewandelt.
  • o Andernfalls, falls einer der Operanden den Typ unsigned int aufweist, wird der andere Operand in unsigned int umgewandelt.
  • o Andernfalls werden beide Operanden in den Typ integer umgewandelt.
  • Die ANDF Installationseinrichtungen 218, 228 verwenden eine allgemeine Umwandlungstabelle, um die Umwandlungsregeln zu implementieren. Diese Umwandlungstabelle ist als eine zweidimensionale Umwandlungstabelle wie folgt implementiert:
  • Jede Sprache weist eine eindeutige Umwandlungstabelle auf, welche sich auf jeder Zielcomputerplattform 216, 226 befindet.
  • 2.5.2. ADD - ADD (Add = Addieren)
  • Die Syntax der HPcode-Plus-Anweisung ADD ist im folgenden dargestellt:
  • ADD
  • ADD hebt < op1> und < op2> von dem Ausdrucksstapel ab. Die Addition < op1> + < op2> wird durchgeführt, um ein Ergebnis zu erzeugen. Das Ergebnis, das denselben Datentyp wie < op1> und < op2> aufweist, wird dann auf dem Ausdrucksstapel abgelegt.
  • 2.5.3. AND - logical AND (Logical AND = Logisches UND)
  • Die Syntax der HPcode-Plus-Anweisung AND ist im folgenden dargestellt:
  • AND
  • AND hebt < op1> und < op2> von dem Ausdrucksstapel ab. Eine logische UND-Operation < op1> UND < op2> wird durchgeführt, um ein Ergebnis zu erzeugen. Das Ergebnis, das denselben Datentyp wie < op1> und < op2> aufweist, wird daraufhin auf dem Ausdrucksstapel abgelegt.
  • Eine bitweise UND-Verknüpfug wird durchgeführt, wenn < op1> und < op2> Ganzzahlen oder Zeichen sind. Das heißt, entsprechende Bits in < op1> und < op2> werden der UND-Operation unterzogen, um < result> (result = Ergebnis) zu erzeugen.
  • 2.5.4. CEND - Conditional evaluate END (Conditional evaluate END = Bedingtes Bewerten von END)
  • Die Syntax der HPcode-Plus-Anweisung CEND ist im folgenden dargestellt:
  • CEND
  • Diese HPcode-Plus-Anweisung markiert das Ende einer bedingt bewerteten Anweisungssequenz, die durch eine passende HPcode-Plus-Anweisung CEXP begonnen wurde.
  • Die CEND-HPcode-Plus-Anweisung manipuliert den Ausdrucksstapel nicht. Der Gegenstand, der sich auf der Spitze des Ausdrucksstapels befindet, ist das Ergebnis, das durch die passende CEXP-Anweisung erzeugt wird. Der Typ des obersten Gegenstandes auf dem Stapel muß der gleiche sein, wie der Datentyp der zwei CEXP-Klauseln.
  • Die CEND-HPcode-Plus-Anweisung kann lediglich verwendet werden, um die letzte CEXP-HPcode-Plus-Anweisung zu beenden. Es ist ein Fehler, falls es keine vorhergehende bedingte Anweisung gibt.
  • 2.5.5. CEVL - Conditional EVaLuate (Conditional evaluate = Bedingtes Bewerten)
  • Die Syntax der HPcode-Plus-Anweisung CEVL ist im folgenden dargestellt:
  • CEVL
  • Diese HPcode-Plus-Anweisung läßt den Ausdrucksstapel unverändert. CEVL wirkt als Begrenzer zwischen zwei Teilen eines bedingten Ausdrucks. Beispielsweise sind zwei CEVLs mit jeder CEXP-Anweisung erforderlich. Ein CEVL trennt < boolean value> (boolean value = boolscher Wert) von < true expression> (true expression = wahrer Ausdruck), wobei das andere CEVL < false expression> (false expression = falscher Ausdruck) von < true expression> trennt.
  • Auf die Stapelgegenstände auf dem Ausdrucksstapel wird zu dem Zeitpunkt von CEVL nicht zugegriffen, bis der bedingte Ausdruck mit einer CEXP-Anweisung beendet wird.
  • 2.5.6. CEXP - Conditionally evaluate EXPression
  • (Conditionally evaluate expression = Bedingtes Bewerten eines Ausdrucks)
  • Die Syntax der HPcode-Plus-Anweisung CEXP ist im folgenden dargestellt:
  • CEXP
  • Diese HPcode-Plus-Anweisung hebt einen Boolschen Operanden < boolean op> von der Spitze des Ausdrucksstapels ab. Falls < boolean op> FALSE (FALSE = FALSCH) ist, dann wird die Steuerung an eine passenden CSEP-Anweisung übergeben. Ein Gegenstand, der sich auf der Spitze des Ausdrucksstapels befindet, wenn eine passende CEND-Anweisung auftritt, wird als Ergebnis der CEXP-Anweisung behandelt.
  • Falls der Gegenstand, der von der Spitze des Ausdrucksstapeis abgehoben wird, TRUE (TRUE = WAHR) ist, dann werden die HPcode-Anweisungen bis zu der passenden CSEP bewertet. Die Steuerung wird daraufhin an die passende CEND-HPcode-Plus- Anweisung übergeben. Der Gegenstand, der sich auf der Spitze des Stapels befindet, wenn die passende CSEP-Anweisung auftritt, wird als das Ergebnis der CEXP-HPcode-Plus-Anweisung behandelt.
  • Die HPcode-Plus-Anweisung zwischen der CEXP- und der passenden CSEP-HPcode-Plus-Anweisung stellt die wahre Klausel der bedingten Bewertung dar. Die HPcode-Plus-Anweisungen zwischen der CSEP- und der passenden CEND-HPcode-Plus-Anweisung stellt die falsche Klausel der bedingten Bewertung dar.
  • Sowohl die wahre Klausel als auch die falsche Klausel müssen entweder einen Null- oder einen Eins-Gegenstand ergeben, der auf dem Ausdrucksstapel abgelegt wurde. Der Datentyp des resultierenden Gegenstandes, der von einer der Klauseln auf dem Ausdrucksstapel abgelegt wurde, muß mit dem Datentyp des Ergebnisses der CEXP-HPcode-Plus-Anweisung zusammenpassen und übereinstimmen.
  • Es ist für die wahre und falsche Klausel möglich, kein Ergebnis auf dem Stapel zu lassen. Insbesondere ereignet sich dies mit dem bedingten ANSI-C-Ausdrucksoperator, falls die wahre und die falsche Klausel vom Typ void (void = ungültig) sind. In diesem Fall gibt es kein < result> , das auf den Ausdrucksstapel gelegt wird.
  • Es ist ein Fehler, die CEXP-HPcode-Plus-Anweisung zu spezifizieren, ohne die passenden CSEP- und CEND-HPcode-Plus-Anweisungen zu spezifizieren. Es ist ferner entweder für die wahre Klausel oder die falsche Klausel ein Fehler, auf Gegenstände zu verweisen, die auf dem Ausdrucksstapel außerhalb der jeweiligen Klauseln abgelegt werden.
  • 2.5.7. CLDC - C LoaD Constant
  • (Load constant = laden einer Konstante)
  • Die Syntax der HPcode-Plus-Anweisung CLDC ist im folgenden dargestellt:
  • CLDC < flag> < constant value> ;
  • (flag = Flag; constant value = konstanter Wert)
  • CLDC wandelt < constant value> in einen Datentyp um, der durch < flag> angezeigt ist, um ein Ergebnis zu erzeugen. CLDC legt daraufhin das Ergebnis auf dem Ausdrucksstapel ab.
  • Die Werte und die entsprechenden Datentypen von < flag> sind im folgenden dargestellt.
  • Falls < flag> 0 ist, dann wandelt die ANDF-Installationseinrichtung 218, 228 wenn möglich < constant value> in TYPE_INT um. Falls dies nicht möglich ist, dann wandelt die ANDF-Installationseinrichtung 218, 228 wenn möglich < constant value> in TYPE_LONGINT um. Falls dies nicht möglich ist, dann wandelt die ANDF-Installationseinrichtung 218, 228 < constant value> in TYPE_UNS_LONGINT um.
  • Die ANDF-Herstellungseinrichtung 208 weiß nicht, welchen endgültigen Datentyp < constant value> annehmen wird. Folglich kann die ANDF-Herstellungseinrichtung 268 die Anweisung CLDC nicht vor den arithmetischen Operationen verwenden. Für die arithmetischen Operationen müssen die ANDF-Herstellungseinrichtungen die HPcode-Plus-Anweisung ACVT verwenden.
  • 2.5.8. COMM - COMMent Syntax
  • (Comment syntax = Syntax kommentieren)
  • Die Syntax der HPcode-Plus-Anweisung COMM ist im folgenden dargestellt:
  • COMM < comment>
  • COMM wird verwendet, um Kommentare in der HPcode-Plus-Objektdatei 1150, 1160 zu plazieren. Die COMM-HPcode-Plus-Anweisungen können überall in der HPcode-Plus-Objektdatei 1150, 1160 erscheinen.
  • 2.5.9. CSEP - Conditional evaluation SEParator
  • (Conditional evaluation separator = Begrenzer einer bedingten Bewertung)
  • Die Syntax der HPcode-Plus-Anweisung CSEP ist im folgenden dargestellt:
  • CSEP
  • CSEP läßt den Stapel unverändert. CSEP wird in Verbindung mit CEXP-HPcode-Plus-Anweisungen verwendet. CSEP-HPcode- Plus-Anweisungen wirken einfach als Abgrenzungen zwischen wahren und falschen Klauseln von passenden CEXP-HPcode- Plus-Anweisungen.
  • Ein Fehler wird erzeugt, falls CSEP-HPcode-Plus-Anweisungen nicht von CEXP-HPcode-Plus-Anweisungen begleitet werden.
  • 2.5.10. CSJP - CaSe JumP
  • (Case jump = Fallsprung)
  • Die Syntax der HPcode-Plus-Anweisung CSJP ist im folgenden dargestellt:
  • CSJP < else label> ; (else label = sonst Etikette)
  • CSJP hebt < selector> (selector = Auswähler) von dem Ausdrucksstapel ab.
  • CSJP verwendet < selector> , um entweder zu einer Position, die von einer HPcode-Plus-Anweisung CTAB spezifiziert wird, oder zu < else label> zu springen.
  • Auf CSJP müssen eine oder mehrere aufeinanderfolgende CTAB- HPcode-PLUS-Anweisungen unmittelbar folgen, von denen jede eine Etikette und einen Bereich von Werten spezifizieren.
  • Kein Bereichepaar darf sich überlappen.
  • CSJP verzweigt sich zu der Etikette, die durch die CTAB-HPcode-Plus-Anweisung spezifiziert ist, deren Bereich < selector> umfaßt. Falls keiner der CTAB-Bereiche < selector> umfaßt, dann verzweigt sich CSJP zu < else label> .
  • < selector> muß der einzige Gegenstand auf dem Ausdrucksstapel sein, wenn CSJP ausgeführt wird.
  • 2.5.11. CTAB - Case TABle
  • (Case table = Falltabelle)
  • Die Syntax der HPcode-Plus-Anweisung CTAB ist im folgenden dargestellt:
  • CTAB < case label> [#]< low bound> [#]< high bound> ;
  • (case label = Falletikette; bw bound = untere Grenze; high bound = obere Grenze)
  • CTAB spezifiziert eine Eintragung in einer Fallsprungtabelle. CTAB muß entweder auf eine HPcode-Plus-Anweisung CSJP oder eine weitere CTAB-HPcode-Plus-Anweisung unmittelbar folgen. Es ist erlaubt, daß unterschiedliche CTABS das gleiche < case label> aufweisen.
  • < Low bound> ist eine Ganzzahl oder ein Zeichen, das die untere Grenze des Bereichs spezifiziert, welcher < case label> auswählt. Falls [#J übergeben wird, muß < low bound> ein Ganzzahlsymbolidentifizierer einer Ganzzahl oder Zeichenkonstante sein.
  • < High bound> ist eine Ganzzahl oder ein Zeichen, wodurch die untere Grenze des Bereichs spezifiziert wird, welchen < case label> auswählt. < Low bound> muß kleiner oder gleich < high bound> sein. Falls [#] übergeben wird, muß < high bound> ein Ganzzahlsymbolidentifizierer oder eine Ganzzahl oder Zeichenkonstante sein.
  • 2.5.12. CUP - Call User Procedure
  • (Call user procedure = Aufrufen einer Anwenderprozedur)
  • Die Syntax der HPcode-Plus-Anweisung CUP ist im folgenden dargestellt:
  • CUP < proc symid>
  • CUP wird verwendet, um eine Prozedur oder eine Funktion aufzurufen. < Proc symid> , welche die Symbol-id der Prozedur oder Funktion darstellt, muß vorher durch die KIND_FUNC_ DCL- oder KIND_FUNCTION-SYM-HPcode-Plus-Anweisung definiert werden.
  • CUP initiiert unter Verwendung der Parameter in dem Prozedur- oder Funktionsparameterbereich den Prozedur- oder Funktionsaufruf. Diese Parameter wurden durch frühere PAR-HPcode-Plus-Anweisungen in dem Prozedur- oder Funktionsparameterbereich plaziert.
  • Für Funktionsaufrufe (d. h., wenn der Typ der Prozedur nicht TYPE_VOID ist) reserviert CUP einen Bereich in dem Speicher für einen Rücksprungwert. Der Rücksprungwert wird tatsächlich durch eine HPcode-Plus-Anweisung STFN in diesem Speicherbereich plaziert.
  • 2.5.13. CVT - ConVerT
  • (Convert = Umwandeln)
  • Die Syntax der HPcode-Plus-Anweisung CVT ist im folgenden dargestellt:
  • CVT < result type> ;
  • (result type = Ergebnistyp)
  • CVT hebt < value> von dem Ausdrucksstapel ab. CVT wandelt < value> in den Datentyp um, der durch < result type> angezeigt ist. Der umgewandelte < value> wird auf dem Ausdrucksstapel abgelegt.
  • Die folgenden Umwandlungen sind erlaubt:
  • boolean => integer und character (character = Zeichen)
  • character => boolean, integer, Zeiger auf ein Datenobjekt, oder andere char-Typen
  • integer => boolean, character, floating point (floating point => Gleitkomma), Zeiger, oder andere integer-Typen
  • floating point => character, integer, oder andere floating point-Typen
  • Zeiger auf einen Typ eines Datenobjekts => character, integer oder Zeiger auf einen anderen Typ eines Datenobjekts
  • Zeiger auf eine Funktion eines Typs => Zeiger auf eine Funktion eines anderen Typs
  • 2.5.14. DEL - DELete
  • (Delete = Löschen)
  • Die Syntax der HPcode-Plus-Anweisung DEL ist im folgenden dargestellt:
  • DEL
  • DEL löscht den obersten Gegenstand auf dem Ausdrucksstapel.
  • 2.5.15. DIV - Divide
  • (Divide = Dividieren)
  • Die Syntax der HPcode-Plus-Anweisung DIV ist im folgenden dargestellt:
  • DIV
  • DIV hebt < left op> und < right op> von dem Ausdrucksstapel ab. Eine Division < left op> / < right op> wird durchgeführt, um ein Ergebnis zu erzeugen. Das Ergebnis ist immer eine ganze Zahl. Beispielsweise ist 5/2 gleich 2 (und -5/2 gleich -2).
  • Das Ergebnis, das denselben Datentyp wie < left op> und < right op> aufweist, wird auf dem Ausdrucksstapel abgelegt.
  • 2.5.16 DUP - Duplicate
  • (Duplicate = Duplizieren)
  • Die Syntax der HPcode-Plus-Anweisung DUP ist im folgenden dargestellt:
  • DUP
  • DUP hebt < value> von dem Ausdrucksstapel ab. DUP legt daraufhin < value> zweimal auf den Ausdrucksstapel zurück.
  • 2.5.17. END - END of procedure
  • (End of procedure = Ende einer Prozedur)
  • Die Syntax der HPcode-Plus-Anweisung END ist im folgenden dargestellt:
  • END < proc symid>
  • END signalisiert das Ende einer Prozedur. Folglich muß END die letzte HPcode-Plus-Anweisung in der Prozedur sein. < Proc symid> muß mit dem Prozedursymbolidentifizierer zusammenpassen.
  • END-HPcode-Plus-Anweisungen treten paarweise mit ENT-HPcode-Plus-Anweisungen auf. Der Ausdrucksstapel muß leer sein, wenn END ausgeführt wird. END verhält sich wie eine HPcode- Plus-Anweisung RET.
  • 2.5.18. ENT - procedure ENTry
  • (Procedure entry = Prozedureintritt)
  • Die Syntax der HPcode-Plus-Anweisung ENT ist im folgenden dargestellt:
  • ENT < proc symid>
  • ENT identifiziert einen Prozedureintrittspunkt. Die Prozedur muß mit der HPcode-Plus-Anweisung ENT beginnen, um den Haupteintrittspunkt der Prozedur zu identifizieren.
  • Weitere ENT-HPcode-Plus-Anweisungen können in dem Prozedurkörper plaziert werden, um andere Eintrittspunkte (die von einigen Programmiersprachen, wie z. B. Fortran, verwendet werden) zu identifizieren. Falls andere Eintrittspunkte spezifiziert sind, muß der Steuerfluß durch die Prozedur derart beschaffen sein, daß nur eine ENT-HPcode-Plus-Anweisung tatsächlich ausgeführt wird. Dies kann erreicht werden, indem jede ENT-HPcode-Plus-Anweisung entweder durch die RET-HPcode-Plus-Anweisung oder eine Verzweigungsanweisung, welche einen anderen Eintrittspunkt spezifiziert, eingeleitet wird.
  • Es muß eine passende END-HPcode-Plus-Anweisung für jede Haupteintritte-ENT-HPcode-Plus-Anweisung geben.
  • 2.5.19. EQU - EQuals
  • (Equals = Ist gleich)
  • Die Syntax der HPcode-Plus-Anweisung EQU ist im folgenden dargestellt:
  • EQU
  • EQU hebt < right op> und < left op> von dem Ausdrucksstapel ab. Falls < right op> und < left op> gleich sind, dann wird der Boolsche Wert TRUE (TRUE = WAHR) auf dem Ausdrucksstapel abgelegt. Andernfalls wird der Boolsche Wert FALSE (FALSE = FALSCH) auf dem Ausdrucksstapel abgelegt.
  • 2.5.20. FJP - False JumP
  • (False jump = Falscher Sprung)
  • Die Syntax der HPcode-Plus-Anweisung FJP ist im folgenden dargestellt:
  • FJP < label>
  • FJP hebt einen Boolschen Wert < condition> (condition = Bedingung) von dem Ausdrucksstapel ab. < Condition> muß der einzige Gegenstand auf dem Ausdrucksstapel sein, wenn FJP ausgeführt wird.
  • FJP springt zu < label> , falls < condition> FALSE ist. < Label> muß in einer LAB-HPcode-Plus-Anweisung in der gegenwärtigen Prozedur auftreten.
  • 2.5.21. GEQ - Greater than or Equal
  • (Greater than or equal = Größer als oder gleich)
  • Die Syntax der HPcode-Plus-Anweisung GEQ ist im folgenden dargestellt:
  • GEQ
  • GEQ hebt < left op> und < right op> von dem Ausdrucksstapel ab. Falls < left op> größer als oder gleich < right op> ist, wird der Boolsche Wert TRUE auf dem Ausdrucksstapel abgelegt. Andernfalls wird der Boolsche Wert FALSE auf dem Ausdrucksstapel abgelegt. Für Boolsche Datentypen ist TRUE größer als FALSE.
  • 2.5.22. GRT - GReaTer than
  • (Greater than = Größer als)
  • Die Syntax der HPcode-Plus-Anweisung GRT ist im folgenden dargestellt:
  • GRT
  • GRT hebt < right op> und dann < left op> von dem Ausdrucksstapel ab. Falls < left op> größer als < right op> ist, wird der Boolsche Wert TRUE auf dem Ausdrucksstapel abgelegt. Andernfalls wird FALSE auf dem Ausdrucksstapel abgelegt.
  • 2.5.23. ICUP - Indirect Call User Procedure
  • (Indirect call user procedure = Indirektes Aufrufen einer Anwenderprozedur)
  • Die Syntax der HPcode-Plus-Anweisung ICUP ist im folgenden dargestellt:
  • ICUP
  • ICUP hebt < function ptr> von dem Ausdrucksstapel ab. ICUP ruft dann eine Prozedur auf, auf welche durch < function ptr> gezeigt wird. Die aufgerufene Prozedur verwendet Prozedurvariablen, welche statisch oder durch LDP-HPcode-Plus-Anweisungen vorher initialisiert wurden. ICUP wird im allgemeinen verwendet, um Prozeduren als Parameter in Pascal zu unterstützen.
  • Falls ICUP eine Funktion aufruft (d. h. falls der Prozedurdatentyp nicht TYPE_VOID ist), wird nach dem Aufruf ein Rücksprungwert auf dem Ausdrucksstapel abgelegt.
  • 2.5.24. ICVT - Integral ConVerT
  • (Integral convert = umwandeln einer ungebrochenen Zahl)
  • Die Syntax der HPcode-Plus-Anweisung ICVT ist im folgenden dargestellt:
  • ICVT
  • ICVT hebt < value> von dem Ausdrucksstapel ab. ICVT führt ein ungebrochenes Setzen oder "integrales Promoten" von < value> , wie es von ANSI-C definiert ist, durch, um ein Ergebnis zu erzeugen. ICVT legt daraufhin das Ergebnis auf dem Ausdrucksstapel ab.
  • ICVT akzeptiert lediglich Typen vorzeichenloser ungebrochener Zahlen. Für vorzeichenbehaftete Varianten sollte CVT verwendet werden.
  • Da die ANDF-Herstellungseinrichtung 208 den Datentyp des Ergebnisses nicht bestimmen kann, kann das Ergebnis nicht unmittelbar für eine arithmetische Operation verwendet werden, welche es erfordert, daß die Operanden von demselben Typ sind. Die ACVT-HPcode-Plus-Anweisung sollte verwendet werden, falls eine arithmetische Operation durchgeführt werden soll.
  • 2.5.25. ILOD - Indirect LOaD
  • (Indirect load = Indirektes Laden)
  • Die Syntax der HPcode-Plus-Anweisung ILOD ist im folgenden dargestellt:
  • ILOD
  • ILOD hebt < address> (address = Adresse) von dem Ausdrucksstapel ab. < Address> stellt eine Adresse eines Datenobjekts dar. Das Datenobjekt, auf das durch < address> verwiesen wird, wird wiedergewonnen und dann auf dem Ausdrucksstapel abgelegt.
  • Falls < address> auf eine Struktur oder ein Array verweist, wird die Struktur oder das Array mit der ILOD-HPcode-Plus- Anweisung auf dem Ausdrucksstapel abgelegt.
  • 2.5.26. INC - INCrement
  • (Increment = Inkrementieren)
  • Die Syntax der HPcode-Plus-Anweisung INC ist im folgenden dargestellt:
  • INC < offset> ; (offset = Versatz)
  • INC hebt < value> von dem Ausdrucksstapel ab und inkrementiert < value> um < offset> , um ein Ergebnis zu erzeugen. Falls < value> eine Adresse ist, ist < offset> auf die Größe des Datenobjekts skaliert, auf das durch < value> gezeigt wird. Das Ergebnis wird auf dem Ausdrucksstapel abgelegt.
  • 2.5.27. INIT - INITialize static data area
  • (Initialize static data area = Initialisieren eines statischen Datenbereichs)
  • Die Syntax der HPcode-Plus-Anweisung INIT ist im folgenden dargestellt:
  • INIT < target id> < source id> ;
  • (target id = Ziel-id; source id = Quellen-id)
  • INIT wird verwendet, um statische, globale und konstante Datenbereiche zu initialisieren. Eine Quelle, die durch < source id> dargestellt wird, ist mit einem Ziel, das durch < target id> dargestellt ist, kompatibel, falls
  • o < source id> und < target id> von demselben Datentyp sind,
  • o < source id> und < target id> beides einfache Typen sind, und < source id> unter Verwendung einer CVT-HPcode-Plus- Anweisung in < target id> umgewandelt werden kann. In diesen Fällen führen die ANDF-Installationseinrichtungen 218, 228 implizite CVT-Anweisungen aus, oder
  • o < source id> und < target id> Arraytypen sind, und die Typen der Arrayelernente gleich sind, wobei jedoch die Dimensionsgröße der Quelle kleiner als die des Ziels ist. In diesen Fällen führen die ANDF-Installationseinrichtungen 218, 228 eine partielle Initialisierung durch.
  • 2.5.28. INST - Indirect Non-destructive STore
  • (Indirect non-destructive store = Indirektes nicht löschendes Speichern)
  • Die Syntax der HPcode-Plus-Anweisung INST ist im folgenden dargestellt:
  • INST
  • INST hebt < item> (item = Gegenstand) und dann < address> von dem Ausdrucksstapel ab. Daraufhin speichert INST < item> in < address> . Ferner legt INST < item> zurück auf den Ausdrucksstapel.
  • 2.5.29. IOR - Inclusive OR
  • (Inclusive OR = INKLUSIV-ODER)
  • Die Syntax der HPcode-Plus-Anweisung IOR ist im folgenden dargestellt:
  • IOR
  • IOR hebt < op1> und < op2> von dem Ausdrucksstapel ab. Eine logische ODER-Operation < op1> ODER < op2> wird durchgeführt, um ein Ergebnis zu erzeugen. Das Ergebnis, das den gleichen Datentyp wie < op1> und < op2> aufweist, wird dann auf dem Ausdrucksstapel abgelegt.
  • Für Ganzzahl- und Zeichen-Datentypen wird eine bitweise ODER-Verknüpfung durchgeführt. Das heißt, daß entsprechende Bits in < op1> und < op2> ODER-Operation unterzogen werden.
  • 2.5.30. ISTR - Indirect SToRe
  • (Indirect store = Indirektes Speichern)
  • Die Syntax der HPcode-Plus-Anweisung ISTR ist im folgenden dargestellt:
  • ISTR
  • ISTR hebt < item> und dann < address> von dem Ausdrucksstapel ab. ISTR speichert dann < item> in < address> .
  • 2.5.31. IXE - IndeX an Element
  • (Index an element = Indexieren eines Elements)
  • Die Syntax der HPcode-Plus-Anweisung IXE ist im folgenden dargestellt:
  • IXE < data type> ;
  • (data type = Datentyp)
  • IXE hebt < index item> und < base address> von dem Ausdrucksstapel ab. Der Wert von < index item> wird mit der Größe des Datentyps, der durch < data type> spezifiziert ist, multipliziert. Das Produkt dieser Multiplikation wird zu < base address> addiert, um ein Ergebnis zu erzeugen. Das Ergebnis, das eine Indexadresse darstellt, wird dann auf dem Ausdrucksstapel abgelegt.
  • 2.5.32. IXF - IndeX a Field
  • (Index a field = Indexieren eines Feldes)
  • Die Syntax der HPcode-Plus-Anweisung IXF ist im folgenden dargestellt:
  • IXF < fieldtype> ;
  • (fieldtype = Feldtyp)
  • IXF hebt < base address> von dem Ausdrucksstapel ab. < Base address> stellt die Adresse einer Struktur dar. < Fieldtype. stellt die Symbol-id eines Feldes innerhalb der Struktur dar.
  • IXF bestimmt den Versatz von dem Beginn der Struktur (durch < base address> spezifiziert) bis zu dem Feld (durch < fieldtype> spezifiziert ist). IXF fügt den Versatz zu (base address) hinzu und legt dann die Summe dieser Addition in dem Ausdrucksstapel ab.
  • < fieldtype> kann im Fall von verschachtelten Strukturen ein Feld eines Strukturtyps sein.
  • 2.5.33. LAB -LABel
  • (Label = Etikette)
  • Die Syntax der HPcode-Plus-Anweisung LAB ist im folgenden dargestellt:
  • LAB < label> < flag>
  • LAB definiert die Position von < label> in einer Sequenz von HPcode-Plus-Anweisungen. Das Ausführen von LAB hat keine Auswirkung auf den Ausdrucksstapel, obwohl der Ausdrucksstapel leer sein muß, wenn dieselbe ausgeführt wird.
  • < Label> besteht aus einem oder mehreren Ziffern oder alphabetischen Zeichen oder "$". Alle Etiketten müssen innerhalb einer Kompilierungseinheit eindeutig sein. Externe Etiketten müssen mit einem Buchstaben beginnen. Die Werte von < flag> und deren zugeordnete Zustände sind:
  • Es ist zu beachten, daß GOOB nicht durch ANSI-C verwendet wird. GOOB wird für Pascal verwendet, um zu einer nicht-lokalen Etikette zu verzweigen.
  • 2.5.34. LDA - LoaD Address
  • (Load address = laden einer Adresse)
  • Die Syntax der HPcode-Plus-Anweisung LDA ist im folgenden dargestellt:
  • LDA < symid>
  • LDA legt die Adresse, die durch < symid> spezifiziert ist, in den Ausdrucksstapel ab. < Symid> ist die Symbol-id einer Variablen (definiert durch eine KIND_SVAR-, KIND_FPARAM-, oder KIND_DVAR-SYM-HPcode-Plus-Anweisung) oder einer Konstanten (definiert durch eine KIND_CONST-SYM-HPcode-Plus-Anweisung oder durch eine andere Konstante, die die SYM-HPcode-Plus- Anweisung definiert).
  • 2.5.35. LDC - LoaD Constant
  • (Load constant = laden einer Konstante)
  • Die Syntax der HPcode-Plus-Anweisung LDC ist im folgenden dargestellt:
  • LDC < type symid> < value>
  • LDC legt eine einfache Konstante in den Ausdrucksstapel ab (eine HPcode-Plus-Anweisung LOD wird verwendet, um eine Mengenkonstante in den Auedrucksstapel abzulegen).
  • < Type symid> und < value> spezifizieren den Datentyp bzw. den Wert der Konstante. (Value) muß sich in dem Bereich befinden, der < type symid> zugeordnet ist.
  • Das äußere Format von < Value> ist von dem Wert von < type symid> abhängig:
  • TYPE_BOOLEAN Entweder eine Ganzzahl 0 oder eine Ganzzahl 1, die jeweils FALSE oder TRUE darstellen.
  • TYPE_CHAR Ein ASCII-Zeichen in doppelten Anführungszeichen, wobei ein doppeltes Anführungszeichen durch """" dargestellt wird. Ferner ist eine Ganzzahl erlaubt. Die Ganzzahl wird durch die ANDF-Installationseinrichtung 218, 228 implizit in ein Zeichen umgewandelt.
  • TYPE_UNS_CHAR Ein ASCII-Zeichen in doppelten Anführungszeichen, wobei ein doppeltes Anführungszeichen durch """" dargestellt wird. Ferner ist eine vorzeichenlose Ganzzahl erlaubt. Die Ganzzahl wird durch die ANDF-Installationseinrichtung 218, 228 implizit in ein Zeichen umgewandelt.
  • TYPE_SINT Eine Ganzzahl. Ferner ist ein ASCII-Zeichen in doppelten Anführungszeichen erlaubt. Das ASCII-Zeichen wird durch die ANDF-Installationseinrichtung 218, 228 implizit in eine Ganzzahl umgewandelt.
  • TYPE_INT Eine Ganzzahl. Ferner ist ein ASCII-Zeichen in doppelten Anführungszeichen erlaubt. Das ASCII-Zeichen wird durch die ANDF-Installationseinrichtung 218, 228 implizit in eine Ganzzahl umgewandelt.
  • TYPE_LONGINT Eine Ganzzahl. Ferner ist ein ASCII-Zeichen in doppelten Anführungszeichen erlaubt. Das ASCII-Zeichen wird durch die ANDF-Installationseinrichtung 218, 228 implizit in eine Ganzzahl umgewandelt.
  • TYPE_UNS_SINT Eine positive Ganzzahl. Ferner ist ein ASCII-Zeichen in doppelten Anführungszeichen erlaubt. Das ASCII-Zeichen wird durch die ANDF-Installationseinrichtung 218, 228 implizit in eine positive Ganzzahl umgewandelt.
  • TYPE_UNS_INT Eine positive Ganzzahl. Ferner ist ein ASCII-Zeichen in doppelten Anführungszeichen erlaubt. Das ASCII-Zeichen wird durch die ANDF-Installationseinrichtung 218, 228 implizit in eine positive Ganzzahl umgewandelt.
  • TYPE_UNS_LONGINT Eine positive Ganzzahl. Ferner ist ein ASCII-Zeichen in doppelten Anführungszeichen erlaubt. Das ASCII-Zeichen wird durch die ANDF-Installationseinrichtung 218, 228 implizit in eine positive Ganzzahl umgewandelt.
  • 2.5.36. LDP - LoaD Procedure entry
  • (Load procedure entry = Laden eines Prozedureintritts)
  • Die Syntax der HPcode-Plus-Anweisung LDP ist im folgenden dargestellt:
  • LDP < proc>
  • LDP legt < proc> , d. h. die Symbol-id einer Prozedur, auf dem Ausdrucksstapel ab. LDP wird typischerweise verwendet, um Prozeduren als Parameter zu übergeben, oder um Prozeduren Prozedurvariablen zuzuweisen.
  • 2.5.37. LEO - Less than or EQual
  • (Less than or equal = Kleiner als oder gleich)
  • Die Syntax der HPcode-Plus-Anweisung LEQ ist im folgenden dargestellt:
  • LEQ
  • LEQ hebt < right op> und < left op> von dem Ausdrucksstapel ab. Falls < left op> kleiner als < right op> ist, wird der Boolsche Wert TRUE auf dem Ausdrucksstapel abgelegt. Andernfalls wird der Boolsche Wert FALSE auf dem Ausdrucksstapel abgelegt.
  • 2.5.38. LES - LESs Than
  • (Less than = Kleiner als)
  • Die Syntax der HPcode-Plus-Anweisung LES ist im folgenden dargestellt:
  • LES
  • LES hebt < right op> und < left op> von dem Ausdrucksstapel ab. Falls < left op> kleiner als < right op> ist, wird der Boolsche Wert TRUE auf dem Ausdrucksstapel abgelegt. Andernfalls wird der Boolsche Wert FALSE auf dem Ausdrucksstapel abgelegt.
  • 2.5.39. LOC - Location
  • (Location = Position)
  • Die Syntax der HPcode-Plus-Anweisung LOC ist im folgenden dargestellt:
  • LOC
  • LOC wird zum Zwecke des Debuggens verwendet. Die ANDF-Herstellungseinrichtung 208 erzeugt LOC-HPcode-Plus-Anweisungen, wenn SYMBOLIC-DEBUG-OPTN-HPcode-Plus-Anweisungen auftreten.
  • LOC wird verwendet, um eine Quellensprachenanweisungsvorschriftzahl (d. h. den Versatz) mit einem Momentanadresszähler zu korrelieren. LOC muß den HPcode-Plus-Anweisungen, die den Quellensprachenanweisungsvorschriften zugeordnet sind, vorausgehen.
  • 2.5.40. LOD - LOaD
  • (Load = Laden)
  • Die Syntax der HPcode-Plus-Anweisung LOD ist im folgenden dargestellt:
  • LOD < item>
  • LOD legt < item> auf dem Ausdrucksstapel ab. < Item> kann eine einfache Variable, eine Konstante oder eine Mengenvariable, wie z. B. ein Array oder eine Struktur, sein.
  • 2.5.41. MCAL - Macro CALl
  • (Macro call = Makro aufrufen)
  • Die Syntax der HPcode-Plus-Anweisung MCAL ist im folgenden dargestellt:
  • MCAL < macro> < parm list>
  • MCAL ruft < macro> auf. < Macro> stellt die Symbol-id einer gültigen Makrodefinition dar. < Macro> muß vorher in einer KIND_MACRO-SYM-Anweisung definiert werden.
  • < Parm list> stellt die tatsächlichen Parameter für < macro> dar. Die Zahl der Parameter in < parm list> muß mit der Definition für < macro> übereinstimmen.
  • 2.5.42. MPY - MultiPlY
  • (Multiply = Multiplizieren)
  • Die Syntax der HPcode-Plus-Anweisung MPY ist im folgenden dargestellt:
  • MPY
  • MPY hebt < op1> und < op2> von dem Ausdrucksstapel ab. Eine Multiplikation < op1> *< op2> wird durchgeführt, um ein Ergebnis zu erzeugen. Das Ergebnis, das denselben Datentyp wie < op1> und < op2> aufweist, wird daraufhin auf dem Ausdrucksstapel abgelegt.
  • 2.5.43. MST - Mark STack
  • (Mark stack = Stapel markieren)
  • Die Syntax der HPcode-Plus-Anweisung MST ist im folgenden dargestellt:
  • MST
  • MST wird verwendet, um den Ausdrucksstapel als Vorbereitung auf einen Prozeduraufruf zu markieren. Nach dem Markieren des Ausdrucksstapels mit MST können tatsächliche Parameter für die Prozedur auf dem Ausdrucksstapel mit PAR-HPcode- Plus-Anweisungen abgelegt werden.
  • Der Ausdrucksstapel muß vor dem Ausführen von MST nicht leer sein.
  • 2.5.44. NEG - NEGate
  • (Negate = Negieren)
  • Die Syntax der HPcode-Plus-Anweisung NEG ist im folgenden dargestellt:
  • NEG
  • NEG hebt < value> von dem Ausdrucksstapel ab. NEG negiert daraufhin < value> , um ein Ergebnis zu erzeugen. Das Ergebnis wird auf dem Ausdrucksstapel abgelegt.
  • < Value> muß eine vorzeichenbehaftete Ganzzahl oder eine Gleitkommazahl sein. Das Ergebnis weist denselben Typ wie < value> auf.
  • 2.5.45. NEQ - Not EQuals
  • (Not equals = ungleich)
  • Die Syntax der HPcode-Plus-Anweisung NEQ ist im folgenden dargestellt:
  • NEQ
  • NEQ hebt < right op> und < left op> von dem Ausdrucksstapel ab. Falls < right op> und < left op> nicht gleich sind, wird der Boolsche Wert TRUE auf dem Ausdrucksstapel abgelegt. Andernfalls wird der Boolsche Wert FALSE auf dem Ausdrucksstapel abgelegt.
  • < Right op> und < left op> müssen von dem gleichen Datentyp sein.
  • 2.5.46. NOP - No Op
  • (No Operation = keine Operation)
  • Die Syntax der HPcode-Plus-Anweisung NOP ist im folgenden dargestellt:
  • NOP < argument list> ; (argument list = Argumentliste)
  • NOP stellt eine Null- oder eine "Non"-Operation dar.
  • Die ANDF Installationseinrichtungen 218, 228 ignorieren NOP-Anweisungen. Parameter in der < argument list> werden an die nächste HPcode-Plus-Anweisung übergeben.
  • 2.5.47. NOT - NOT
  • (NOT = NICHT)
  • Die Syntax der HPcode-Plus-Anweisung NOT ist im folgenden dargestellt:
  • NOT
  • NOT hebt < value> von dem Ausdrucksstapel ab. NOT führt daraufhin eine logische NOT-Operation auf < value> durch, um ein Ergebnis zu erzeugen. Das Ergebnis wird daraufhin auf dem Ausdrucksstapel zurückgelegt.
  • Für Ganzzahl- und Zeichentypen wird jedes Bit von < value> der NOT-Operation unterzogen. Für Boolsche Typen werden die Werte TRUE und FALSE der NOT-Operation unterzogen.
  • 2.5.48. OPTN - Option
  • Die Syntax der HPcode-Plus-Anweisung OPTN ist im folgenden dargestellt:
  • OPTN < option number> < parameter list>
  • OPTN wird verwendet, um Optionsinformationen von der ANDF- Herstellungseinrichtung 208 zu den ANDF-Installationseinrichtungen 218, 228 zu übertragen. Im allgemeinen bewirken die Optionsinformationen, daß die ANDF-Installationseinrichtungen 218, 228 die Art und Weise ändern, mit welcher dieselben einen Code erzeugen.
  • < Option number> stellt eine Option dar. (Parameter list) stellt eine Sequenz von Null oder mehreren Parametern dar. Die Zahl und Interpretation von < parameter list> hängt von dem Wert von < option number> ab.
  • OPTN-HPcode-Plus-Anweisungen können lediglich in spezifischen Teilen der HPcode-Plus-Objektdatei 1150, 1160 angeordnet werden. Beispielsweise können in Abhängigkeit von dem Wert von < option number> einige OPTN-HPcode-Plus-Anweisungen überall in einer Prozedur angeordnet werden. Die anderen müssen außerhalb der Prozedur (d. h. vor einer KIND_ FUNCTION-SYM-Anweisung) angeordnet werden.
  • Im allgemeinen bleibt OPTN, sobald dieselbe eingestellt ist, solange wirksam, bis dieselbe zurückgesetzt wird.
  • Mögliche Werte für < option number> sind im folgenden aufgelistet:
  • LANGUAGE TYPE (= Sprachentyp)
  • WARNING LEVEL (= Warnstufe)
  • CODE LISTING (= Codeauflistung)
  • LOCALITY SET (= Lokalitätseinstellung)
  • INIT (= Initialisieren)
  • SYMBOLIC DEBUG (= Symbol-Debuggen)
  • COPYRIGHT
  • PROGRAM ENTRY PT (= Programmeintrittspunkt)
  • HPcode Plus VERSION
  • COMPILATION REC (= Kompilierungsdatensatz)
  • OPTIMIZATION (= Optimierung)
  • ASSEMBLER FILE (= Assembierdatei)
  • USER VERSION (= Anwenderversion)
  • ROUNDING MODE (= Rundungsmodus)
  • CONVERSION OVERFLOW CHK (= Umwandlungsüberlaufüberprüfung)
  • ARITHMETIC OVERFLOW CHK (= arithmetische Überlaufüberprüfung)
  • PROCEDURE SIDE EFFECT (= prozedurseiteneffekt)
  • LIBRARY FILE (= Bibliotheksdatei)
  • PROGRAM FILE (= Programmdatei)
  • 2.5.49. PAR - PARameter
  • Die Syntax der HPcode-Plus-Anweisung PAR ist im folgenden dargestellt:
  • PAR
  • PAR hebt < value> von dem Ausdrucksstapel ab. PAR speichert < value> in dem Pararneterbereich einer Prozedtir, die aufgerufen werden soll.
  • 2.5.50. REM - REMainder
  • (Remainder = Rest)
  • Die Syntax der HPcode-Plus-Anweisung REM ist im folgenden dargestellt:
  • REM
  • REM hebt < left op> und < right op> von dem Ausdrucksstapel ab. Eine Division < left op> / < right op> wird durchgeführt, um ein Ergebnis zu erzeugen. Das Ergebnis stellt den Rest der Divisionsoperation dar. Beispielsweise ist 4/2 gleich 0, 5/2 gleich 1 und -5/2 gleich -1.
  • Das Ergebnis wird daraufhin auf dem Ausdrucksstapel abgelegt.
  • 2.5.51. RET - Return
  • (Return = Rücksprung)
  • Die Syntax der HPcode-Plus-Anweisung RET ist im folgenden dargestellt:
  • RET
  • RET bringt die Programmsteuerung von einer aufgerufenen Prozedur zu einer aufrufenden Prozedur zurück. Vor dem Zurückbringen der Programmsteuerung stellt RET die statische und dynamische Berechnungsumgebung der aufrufenden Prozedur wieder her. Falls die gegenwärtige Prozedur ein Programmeintrittspunkt ist, wird eine normale Programmbeendigung auftreten.
  • Der Ausdrucksstapel muß leer sein, bevor RET ausgeführt wird.
  • 2.5.52. RND - Round
  • (Round = Runden)
  • Die Syntax der HPcode-Plus-Anweisung RND ist im folgenden dargestellt:
  • RND < result dtype>
  • RND hebt < real value> von dem Ausdrucksstapel ab. Falls < real value> positiv ist, dann fügt RND 0,5 zu < real value> hinzu, um ein temporäres Ergebnis zu erzeugen. Falls < real value> negativ ist, dann fügt RND -0,5 zu < real value> hinzu, um das temporäre Ergebnis zu erzeugen.
  • Der ganzzahlige Teil des temporären Ergebnisses wird in den Datentyp umgewandelt, der durch < result dtype> angezeigt wird, und wird daraufhin auf dem Ausdrucksstapel abgelegt.
  • 2.5.53. ROT - ROTate
  • (Rotate = Drehen)
  • Die Syntax der HPcode-Plus-Anweisung ROT ist im folgenden dargestellt:
  • ROT
  • ROT dreht die drei obersten Gegenstände auf dem Ausdrucksstapel. Beispielsweise sei angenommen, daß der Ausdrucksstapel < op1> < op2> < op3> vor ROT enthält, wobei sich < op1> ganz oben auf dem Ausdrucksstapel befindet. Nach ROT würde der Ausdrucksstapel < op 3> < op1> < op2> enthalten, wobei sich < op3> ganz oben auf dem Ausdrucksstapel befindet.
  • 2.5.54. SHFT - SHiFT
  • (Shift = Verschieben)
  • Die Syntax der HPcode-Plus-Anweisung SHFT ist im folgenden dargestellt:
  • SHFT < direction> ;
  • (direction = Richtung)
  • SHFT hebt < item> und < shift count> von dem Ausdrucksstapel ab. SHFT verschiebt daraufhin < item> um < shift count> -Bitpositionen, um ein Ergebnis zu erzeugen. Das Ergebnis wird auf dem Ausdrucksstapel abgelegt.
  • Wenn < direction> 0 ist, verschiebt sich < item> abhängig von dem Vorzeichen von < shift count> entweder nach rechts oder nach links. Falls die ANDF-Herstellungseinrichtung 208 die Verschiebungsrichtung kennt, dann sollte < direction> für eine Verschiebung nach links auf 1 und für eine Verschiebung nach rechts auf -1 eingestellt werden. < Shift count> muß positiv sein, wenn < direction> 1 oder -1 ist.
  • Die Bedeutung von SHFT hängt von dem Datentyp von < item> ab. Für vorzeichenbehaftete Ganzzahlen wird eine arithmetische Verschiebung durchgeführt. Für vorzeichenlose Ganzzahlen wird eine logische Verschiebung durchgeführt.
  • Da das Ergebnis von der Größe von < item> abhängt, muß SHFT mit Vorsicht verwendet werden. Die ANDF-Installationseinrichtungen 218, 228 können eine Warnung erzeugen, wenn SHFT verwendet wird.
  • 2.5.55. STFN - STore FuNction result
  • (Store function result = Funktionsergebnis speichern)
  • Die Syntax der HPcode-Plus-Anweisung STFN wird im folgenden dargestellt:
  • STFN
  • STFN wird verwendet, um ein Funktionsergebnis zurückzubringen. Insbesondere hebt STFN < value> von dem Ausdrucksstapel ab. STFN speichert daraufhin < value> in dem Speicherrücksprungbereich, der von der HPcode-Plus-Anweisung CUP beiseite gelegt wird. Der Datentyp von < value> muß mit dem Funktionsrücksprungwertdatentyp, der in der KIND_FUNCTION-SYM- Anweisung definiert wird, zusammenpassen.
  • 2.5.56. STR - SToRe
  • (Store = Speichern)
  • Die Syntax der HPcode-Plus-Anweisung STR ist im folgenden dargestellt:
  • STR < variable symid>
  • STR hebt < value> von dem Ausdrucksstapel ab und speichert < value> in der Variablen, die durch < variable symid> spezifiziert ist. Der Datentyp von < value> muß mit dem von < variable symid> übereinstimmen.
  • Falls < variable symid> die Symbol-id einer Konstanten darstellt (d. h., daß das Konstantenattribut eingestellt ist), dann ist das Verhalten von STR implementierungsabhängig. In diesen Fällen erzeugen die ANDF-Installationseinrichtungen 218, 228 eine Warnmeldung.
  • 2.5.57. SUB - SUBtract
  • (Subtract = Substrahieren)
  • Die Syntax der HPcode-Plus-Anweisung SUB ist im folgenden dargestellt:
  • SUB
  • SUB hebt < left op> und < right op> von dem Ausdrucksstapel ab. Eine Subtraktion < left op> - < right op> wird durchgeführt, um ein Ergebnis zu erzeugen. Das Ergebnis, das denselben Datentyp wie < left op> und < right op> aufweist, wird dann auf dem Ausdrucksstapel abgelegt.
  • Wenn < left op> und < right op> zwei Datenadressen darstellen, dann wird das Ergebnis eine skalierte Ganzzahl von TYPE_INT sein (das Ergebnis ist wie mit INC/IXE skaliert, jedoch auf eine umgekehrte Art und Weise). Die Datenobjekte, auf die durch < left op> und < right op> gezeigt wird, müssen den gleichen Datentyp aufweisen. Das Verhalten dieser Zeigersubtrakt ion ist implementierungsabhängig.
  • 2.5.58. SWP - SWaP
  • (Swap = tauschen)
  • Die Syntax der HPcode-Plus-Anweisung SWP ist im folgenden dargestellt:
  • SWP
  • SWP hebt die obersten zwei Stapelgegenstände ab und legt dieselben auf den Ausdrucksstapel zurück, derart, daß ihre Stapelpositionen umgekehrt sind.
  • 2.5.59. SYM - SYMbol Table
  • (Symbol Table = Symboltabelle)
  • Die Syntax von SYM ist im folgenden dargestellt:
  • SYM < symid> < sym kind> < sym info>
  • SYM wird verwendet, um die Speicherzuordnung von der ANDF- Herstellungseinrichtung 208 zu den ANDF-Installationseinrichtungen 218, 228 zurückzustellen. Insbesondere werden mittels SYM die Variablen-, Typen- und Konstanteninformationen von der ANDF-Herstellungseinrichtung 208 zu den ANDF-Installationseinrichtungen 218, 228 befördert. Die ANDF-Installationseinrichtungen 218, 228 verwenden diese Informationen, um eine Speicherzuordnung, Ausrichtung, Initialisierung und eine maschinenabhängige Konstantenfaltung durchzuführen.
  • Die ANDF-Herstellungseinrichtung 208 verwendet SYM, um jedem Datenobjekt und jedem Datentyp eine eindeutige Symbolidentifikation (die auch symid oder Symbol-id genannt wird) zu geben. Die einzige Ausnahme für diese Regel besteht darin, daß die symid der Datentypen und Datenobjekte in lokalen Bereichen wiederverwendet werden kann.
  • Die ANDF-Herstellungseinrichtung 208 verwendet ferner die SYM-Anweisung, um jedem Datenobjekt einen Speichertyp (z. B. statisch, lokal oder Parameter) und ein Attribut (z. B. Konstante, Register oder flüchtig) zuzuordnen.
  • Die SYM-Parameter (oder Felder) symid, sym kind und sym info werden in den folgenden Abschnitten beschrieben.
  • 2.5.59.1. Symid
  • Symid steht für Symbol-Identifizierer. Symids werden von HPcode-Plus-Anweisungen verwendet, um Variablen, Datentypen und Konstanten zu bezeichnen. Beispielsweise verwenden HPcode-Plus-Anweisungen den Datenobjekt-symid und nicht eine tatsächliche physische Adresse, um auf ein Datenobjekt in dem Speicher zuzugreifen.
  • Die ANDF-Herstellungseinrichtung 208 weist symid Werte zu, die bei 256 beginnen, obwohl die Zuweisung nicht sequentiell sein muß. Die ANDF-Herstellungseinrichtung 208 weist jedoch symid keine Werte zu, die größer als 65535 sind, außer es sind alle kleineren Werte verwendet worden.
  • Die ANDF-Installationseinrichtungen 218, 228 müssen symids mit Werten bis zumindest 65535 akzeptieren.
  • HPcode-Plus umfaßt vordefinierte symids für vordefinierte Datentypen, die in Fig. 5 aufgelistet sind. Diese Datentypen sind die einzigen, die nicht explizit durch 3H-SYM-HPcode- Plus-Anweisungen definiert werden müssen. Die vordefinierten symids sind in Fig. 9 dargestellt.
  • Die Größe der vordefinierten Datentypen hängt von der Zielcomputerplattform 216, 226 ab und wird durch die ANDF-Installationseinrichtung 218, 228 bestimmt. Folglich kann TYPE_INT auf einer Computerplattform 16 Bit und auf einer anderen Computerplattform 32 Bit betragen. Die ANDF-Herstellungseinrichtung 208 kann nur auf gewisse minimale Bereiche bauen, und darauf, daß TYPE_SHORTINT nicht größer als TYPE _-INT ist, und TYPE_INT nicht größer ist als TYPE_LONGINT.
  • Eine Funktion beginnt mit einer KIND_FUNCTION-Vereinbarung und endet mit einem passenden KIND_END-Vereinbarung. Es können geeignet verschachtelte Funktionen, wie bei Pascal, vorhanden sein. Die Verschachtelungsstruktur wird implizit durch die Anordnung von KIND_FUNCTION- und KIND_END-SYM- HPcode-Plus-Anweisungspaaren bestimmt.
  • Gewisse symids, wie z. B. die KIND_DVAR-Vereinbarungen von dynamischen Variablen und die KIND_FPARAM-Vereinbarungen von formalen Parametern, sind ferner implizit der nächsten einschließenden Funktion zugeordnet.
  • Wenn die Funktion durch das passende KIND_END beendet wird, werden alle lokalen symid-Vereinbarungen der zugeordneten inneren Objekte unverfügbar. Die ANDF-Herstellungseinrichtung 208 kann beliebige dieser "freigemachten" symid-Werte bei neuen SYM-Vereinbarungen erneut verwenden. Die ANDF-Herstellungseinrichtung 208 verwendet diese symid-Werte erneut, um die Größe der Tabellen an den ANDF-Installationseinrichtungen 218, 228 zu minimieren.
  • Zusätzlich kann die ANDF-Herstellungseinrichtung 208 der ANDF-Installationseinrichtung 218, 228 explizit mitteilen, daß weitere symid-Werte (wie z. B. eine Typ-Vereinbarung) bei einer Funktionsbeendigung "freigemacht" wurden. Dies wird durch eine Verwendung eines < free> -Parameters (free = frei) bei diesen symid-Vereinbarungen durchgeführt. Falls der < free> -Parameter 0 ist, wird der symid-Wert nicht freigemacht. Falls der < free> -Parameter 1 ist, wird der symid- Wert der nächsten einschließenden Funktion zugeordnet, und wenn die Funktion beendet wird, wird der symid-Wert freigemacht.
  • 2.5.59.2. Sym Kind and SYM Info
  • < Sym kind> und < sym info> sind Felder, welche eine Symbolart bzw. Symbol-Informationen enthalten. Die Struktur von < sym info) hängt von dem Wert von < sym kind> ab. Mögliche Werte von < sym kind> sind in Fig. 10 dargestellt.
  • Darunter sind die Beschreibungen aufgelistet, die die Beziehung von < sym kind> und < sym info> zeigen. Diese Beschreibungen enthalten Definitions- und Verwendungsinformationen.
  • 2.5.59.2.1. KIND_POINTER
  • Syntax: SYM < symid> KIND_POINTER < free> < type> [< name> ]
  • Diese SYM-Variation definiert einen Datenobjektzeigertyp.
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • < type> ist eine Symbol-id für den Datentyp, auf den der Zeiger zeigen soll. < Type> muß einen Datentyp darstellen und kann entweder ein vordefinierter HPcode-Plus-Datentyp (der in Fig. 5 aufgelistet ist), ein bestehender Symbol-id-Typ oder ein Vorwärtsverweis auf einen Symbol-id-Typ sein. In dem letzten Fall ist es zulässig, niemals den fehlenden Verweis zuzuführen, solange die Informationen über den fehlenden Typ nicht benötigt werden. Um einen Zeigertyp zu einer Funktion zu definieren, wird auf den KIND_FUNC_ PTR-SYM-Eintritt im folgenden verwiesen.
  • < name> ist ein Name, welcher verwendet wird, um während der Symbol-Debug-Operationen auf den Zeigertyp zu verweisen.
  • 2.5.59.2.2. KIND STRUCTURE
  • Syntax: SYM < symid> KIND_STRUCT < free> < firstfield> < packing> [< name> ]
  • Diese SYM-Variation definiert einen Strukturdatentyp.
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • < first field> ist eine Symbol-id des ersten Feldes in einer Struktur. Dies kann ein Vorwärtsverweis auf eine Symbol-id sein. < First field> kann ferner ein spezieller Wert 0 sein, der eine unvollständige Strukturdefinition anzeigt, welche später vervollständigt werden kann. Symbol-ids von Felddefinitionen sind durch eine Verwendung der KIND_FIELD-Symbol- Vereinbarung in einer Liste zusammengekettet. Alle Felder der Struktur müssen vereinbart sein, bevor die Größe der Struktur benötigt wird.
  • < packing> ist ein Flag, welches anzeigt, ob die Struktur eine normale, gepackte oder eine zermalmte oder "crunched" Packung aufweist.
  • Eine normale Packung impliziert, daß die ANDF-Installationseinrichtung 218, 228 Felder und Arrayelemente auf eine Art und Weise packt, welche mit dem Packungsverfahren der Zielcomputerplattform 216, 226 konsistent ist.
  • Gepackt impliziert, daß die ANDF-Installationseinrichtung 218, 228 Felder und Arrayelemente auf eine Art und Weise packt, welche mit dem gepackten Packungsverfahren der Zielcomputerplattform 216, 226 konsistent ist. Sprachen wie Pascal, ermöglichen es den Anwendern, eine gepackte oder "PACKED" Packung für Arrays und Strukturen zu spezifizieren.
  • Eine crunched Packung bedeutet, daß die ANDF-Installationseinrichtung 218, 228 Felder nicht erweitern und keine Löcher zurücklassen darf. Jedes Feld ist bitmäßig ausgerichtet, um Platz zu sparen.
  • < name> ist der Name, welcher verwendet wird, um auf den Strukturtyp während der Symbol-Debug-Operationen zu verweisen.
  • 2.5.59.2.3. KIND_UNION
  • Syntax: SYM < symid> KIND_UNION < free> < first field> [< name> ]
  • Diese SYM-Variation definiert einen Vereinigungsdatentyp.
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • < first field> ist eine Symbol-id des ersten Feldes in der Vereinigung. Dies kann ein Vorwärtsverweis auf eine Symbolid sein. < First field> kann ferner der spezielle Wert sein, der eine unvollständige Vereinigungsdefinition anzeigt, welche später vervollständigt werden kann. Symbol-ids der Felddef initionen sind durch die Verwendung der KIND_- FIELD-Symbol-vereinbarungen in einer Liste aneinandergekettet. Alle Felder der Vereinigung müssen vereinbart werden, bevor die Größe der Vereinigung verwendet wird.
  • < name> ist der Name, welcher verwendet wird, um auf den Vereinigungstyp während der Symbol-Debug-Operationen zu verweisen.
  • Von Pascal abweichende Datensätze können in HPcode-Plus als eine Struktur implementiert werden, deren letztes Feld eine Vereinigung von Strukturen ist.
  • 2.5.59.2.4. KIND_ARRAY
  • Syntax: SYM < symid> KIND_ARRAY < free> < size> < type> < packing> [< name> ]
  • Diese SYM-Variation definiert eine Struktur eines Arrays.
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • < size> (size = Größe) zeigt die Anzahl der Elemente in dem Array an. < Size> kann eine einfache Ganzzahlkonstante oder ein symid (das die #n-Notation verwendet) einer bereits definierten Symbol-Konstante oder Variable (bei Sprachen, wie z.B. FORTRAN und Ada, welche dynamische Größen unterstützen) sein. < Size> ist auf die Konstante 0 eingestellt, um ein Array mit unbekannter Größe zu spezifizieren. Die Arraydefinition wird später mit einer zusätzlichen SYM-HPcode-Plus-Anweisung vervollständigt.
  • Ein mehrdimensionales Array wird als Array von Arrays definiert.
  • < type> ist eine Symbol-id, welche den Datentyp jedes Elements des Arrays anzeigt.
  • < packing> ist ein Flag, das den Packungs-Typ anzeigt, der wie bei der vorhergehenden Beschreibung für KIND_STRUCT erwünscht ist.
  • 2.5.59.2.5. KIND_ENUM
  • Syntax: SYM < symid> KIND_ENUM < free> < member> < basetype> [< name> ]
  • Diese SYM-Variation definiert einen aufgezählten Typ.
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • < member> ist eine Symbol-id der Vereinbarung des ersten Elements. < member> kann ein Vorwärtsverweis auf eine Symbol-id sein. < member> kann ferner ein spezieller Wert 0 sein, der eine Definition eines unvollständigen aufgezählten Typs anzeigt, welcher später vervollständigt werden kann. Die Symbol-ids der Elementdefinitionen werden durch eine Verwendung der KIND_MEMBER-Symbol-Vereinbarung in einer Liste aneinandergekettet. Alle Elemente des aufgezählten Typs müssen erscheinen, bevor die Größe des aufgezählten Typs verwendet wird.
  • < base type> ist ein symid eines Typs einer vordefinierten ungebrochenen Zahl. Wenn ein Element des aufgezählten Typs auf dem HPcode-Plus-Ausdrucksstapel angeordnet ist, wird eine implizierte Typumwandlung in den < base type> durchgeführt. Auf ähnliche Weise können Gegenstände des < base type> auf dem Stapel in Variablen des Aufzählungstyps ohne eine explizite Umwandlung abgespeichert werden.
  • < name> ist ein Name, welcher verwendet wird, um auf den aufgezählten Typ während der Syrnbol-Debug-Operationen zu verweisen.
  • Es ist zu beachten, daß die Breite des aufgezählten Typs nicht notwendigerweise die gleiche ist, wie die Breite des < base type> . Die tatsächliche Größe einer Variablen des aufgezählten Typs wird durch die ANDF-Installationseinrichtung 218, 228 entschieden. Die tatsächliche Größe sollte ein Mehrfaches der Größe von TYPE CHAR sein. Bei einer crunched Struktur oder einem Array sollte die Größe eines aufgezählten Typenfelds oder Elements so klein wie möglich sein.
  • 2.5.59.2.6. KIND_FUNCT_PTR
  • Syntax: SYM < symid> KIND_FUNC_PTR < free> < return type> [< name> ]
  • Die SYM-Variation definiert einen "Zeiger-Auf-Eine-Prozedur"-Datentyp.
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • < return type> ist eine Symbol-id des Datentyps, der durch die Prozedur zurückgebracht wird.
  • < name> ist ein Name, welcher verwendet wird, um auf den Funktionszeigertyp während der Symbol-Debug-Operationen zu verweisen.
  • 2.5.59.2.7. KIND_MODIFIER
  • Syntax: SYM < symid> KIND_MODIFIER < free> < modification> < type> [< name> ]
  • Diese SYM-Variation definiert einen modifizierten Typ einer bestehenden Typvereinbarung. Der ursprüngliche Datentyp und der modifizierte Datentyp sind kompatibel.
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • < modification> ist ein Flag mit den möglichen Werten 0, 1 oder 2.
  • Ein < modification> -Wert von 0 zeigt an, daß der neue Datentyp ein Synonym des ursprünglichen Datentyps (mit möglicherweise einem unterschiedlichen Namen zum Zweck des Symbol-Debuggens) ist.
  • Ein < modification> -Wert von 1 zeigt die Addition eines konstanten Attributs zu dem ursprünglichen Datentyp an. Variablen mit dem konstanten Attribut können nicht modifiziert werden, und können in einem Nur-Lese-Speicher plaziert werden. Von der ANDF-Installationseinrichtung 218, 228 muß keine Überprüfung durchgeführt werden, um sicherzustellen, daß konstante Variablen nicht tatsächlich modifiziert sind.
  • Ein < modification> -Wert von 2 zeigt das Hinzufügen eines flüchtigen Attributs zu dem ursprünglichen Datentyp an. Bei Variablen mit dem flüchtigen Attribut existieren Beschränkungen bezüglich der Menge an Bezeichnen oder "cacheting", die die ANDF-Installationseinrichtung 218,228 auf die Werte derselben durchführen kann.
  • < name> ist ein Name, welcher verwendet wird, um auf den modifizierten Datentyp während der Symbol-Debug-Operationen zu verweisen.
  • 2.5.59.2.8. KIND_FIELD
  • Syntax: SYM < symid> KIND_FIELD < type> < field> [< name> ] [< bit length> ];
  • (bit length = Bitlänge)
  • Diese Symbol-Variation vereinbart ein Feld in einer Struktur oder einer Vereinigung. Diese Vereinbarung ist weder eine Typ- noch eine Variablenvereinbarung. Außerhalb ihrer Definition in SYM-Anweisungen werden Feldsymbol-ids bei IXF-HPcode-Plus-Anweisungen und bei einer SYM-Initialisierung von Vereinigungen verwendet.
  • < type> ist eine Symbol-id des Typs des Feldes.
  • < field> ist eine Symbol-id des nächsten Feldes in der Struktur oder Vereinigung, falls es eine gibt. Andernfalls ist dieser Parameter 0. Dies kann ein Vorwärtsverweis sein.
  • < name> ist ein Name, welcher verwendet wird, um auf das Feld während Symbol-Debug-Operationen zu verweisen.
  • < bit length> ist entweder eine Ganzzahlkonstante oder eine Symbol-id einer Konstante einer ungebrochenen Zahl (in einer #n-Notation). Dies zeigt die Länge des Feldes in Bits an. Eine < bit length> von 0 zeigt eine Ausrichtungsvorschrift in der Struktur (sogar bei crunched Strukturen) an. Eine < bit length> von -1 oder eine, die gänzlich fehlt, zeigt an, daß das Feld dieselbe Zahl von Bits wie freie Variablen des Feldes < type> aufweisen sollte.
  • Der symid, der KIND_FIELD zugeordnet ist, wird bei der Beendigung der nächsten einschließenden Funktion freigemacht, falls und nur falls der symid der Struktur oder der Vereinigung freigemacht wird.
  • 2.5.59.2.9. KIND_FUNCTION
  • Syntax: SYM < symid> KIND_FUNCTION < type> < flag> < fparam> [< visible name> ][< name> ]
  • Diese SYM-Variation markiert den Beginn einer Funktionsdefinition. Es muß eine passende KIND_ END-SYM-HPcode-Plus-Anweisung geben, um die Funktion zu beenden. Funktionsdefinitionen können geeignet verschachtelt sein.
  • < type> ist eine Symbol-id des Typs, der durch die Funktion zurückgebracht wird.
  • < flag> ist ein Flag, welches anzeigt, ob die Funktion eine feste Anzahl oder eine variable Anzahl von Argumenten akzeptiert.
  • < fparam> ist eine Symbol-id des ersten formalen Parameters (der durch eine KIND_FPARAM-SYM-HPcode-Plus-Anweisung definiert wird) in einer Liste von formalen Parametern für die Prozedur/Funktion. Dieser Parameter sollte 0 sein, falls es keine Parameter gibt. Dies kann ein Vorwärtsverweis auf eine Symbol-id sein.
  • < visible name> ist ein Name der Prozedur, den externe Kompilierungseinheiten verwenden, um auf die Prozedur zu verweisen. Derselbe wird von einem Linker (nicht gezeigt in Fig. 2) zur Auflösung verwendet. Falls keine externen Verweise erlaubt sind, kann dieser Parameter fehlen oder es kann der leere Name "" vorgesehen sein.
  • < name> ist ein interner Name für die Prozedur. < name> und < visible name> können unterschiedlich sein. < name> kann aus Informationszwecken an einen Linker (nicht gezeigt in Fig. 2) weitergegeben werden. < name> ist jedoch lokal. Somit kann < name> nicht verwendet werden, um externe Verweise aufzulösen.
  • Die symids, die den KIND_ FUNCTION-SYM-HPcode-Plus-Anweisungen zugeordnet sind, werden freigemacht, wenn die nächsten einschließenden Funktionen beendet werden.
  • 2.5.59.2.10. KIND_FUNC_DCL
  • Syntax: SYM < symid> KIND_FUNC_DCL < free> < type> [< visible> ) [< name> ];
  • (visible = sichtbar)
  • Diese SYM-Variation vereinbart eine Prozedur oder eine Funktion, welche zu der Kompilierungseinheit extern sein kann.
  • < free> it ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • < type> ist eine Symbol-id des Typs, der durch die Funktion zurückgebracht wird.
  • < visible name> ist ein Name, der verwendet wird, um auf die Prozedur zu verweisen. Derselbe wird von dem Linker (nicht gezeigt in Fig. 2) zur Auflösung verwendet.
  • < name> ist ein interner Name, welcher während der Symbol-Debug-Operationen verwendet wird.
  • 2.5.59.2.11. KIND_FPARAM
  • Syntax: SYM < symid> KIND_FPARAM < type> < next fparam> < memory> [< name> ]
  • Diese SYM-Variation vereinbart einen formalen Parameter einer Prozedur oder Funktion.
  • < type> zeigt den Typ des formalen Parameters an.
  • < next fparam> ist eine Symbol-id des nächsten formalen Parameters in der Liste. Falls dieser Parameter 0 ist, gibt es keine weiteren formalen Parameter. Dies kann ein Vorwärtsverweis sein.
  • < memory> ist ein Flag mit den möglichen Werten 0 oder 1. Dies gibt der ANDF-Installationseinrichtung 218, 228 einen Hinweis, ob dieselbe es versuchen sollte, den Parameter in einem normalen (0) oder "schnellen" (1) Speicher zuzuordnen.
  • < name> ist ein Name, welcher verwendet wird, um auf den formalen Parameter während der Symbol-Debug-Operationen zu verweisen.
  • Der symid, der einer KIND_FPARAM-SYM-HPcode-Plus-Anweisung zugeordnet ist, wird freigemacht, wenn die nächste einschließende Funktion beendet wird.
  • 2.5.59.2.12. KIND_SVAR
  • Syntax: SYM < symid> KIND_SVAR < free> < type> < imported> [< visible name> ][< name> ]
  • (imported = importiert)
  • Diese SYM-Variation vereinbart eine statische Variable (bezüglich einer Speicherung).
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • < type> ist eine Symbol-id des Typs der Variablen.
  • < imported> ist ein Flag mit den möglichen Werten 0 oder 1. < imported> zeigt an, ob die Variable in dieser Kompilierungseinheit (0) definiert oder ein externer Verweis (1) ist.
  • < visible name> ist ein Name, welcher von dem Linker (nicht gezeigt in Fig. 2) verwendet wird, um die Verweise aufzulösen. < visible name> muß vorhanden sein, falls dies eine externe Vereinbarung ist. Falls keine externen Verweise für eine definierte Variable (beispielsweise eine statische Definition) erlaubt sind, kann dieser Parameter fehlen oder der leere Name "" kann vorgesehen sein.
  • < name> ist ein interner Name der Variable, für den Fall, daß < visible name> nicht derselbe ist. < name> kann aus Informationszwecken an den Linker weitergegeben werden. < name> ist jedoch ein lokaler Name. Folglich kann < name> nicht verwendet werden, um Verweise aufzulösen.
  • 2.5.59.2.13. KIND_DVAR
  • Syntax: SYM < symid> KIND_DVAR < type> < memory> [< name> ]
  • Diese SYM-Variation vereinbart eine dynamische Variable (d. h. lokale oder temporäre).
  • < type> zeigt die Symbol-id des Typs der Variable an.
  • < memory> ist ein Flag mit den möglichen Werten 0 oder 1. Dies gibt der ANDF-Istallationseinrichtung 218, 228 einen Hinweis, ob dieselbe versuchen sollte, den Parameter in einem normalen (0) oder einem "schnellen" (1) Speicher zuzuordnen.
  • < name> ist ein Name, welcher verwendet wird, um auf die Variable während der Symbol-Debug-Operationen zu verweisen.
  • Der symid, der einer KIND_DVAR zugeordnet ist, wird freigemacht, wenn die nächste einschließende Funktion beendet wird.
  • 2.5.59.2.14. KIND_MEMBER
  • Syntax: SYM < symid> KIND_MEMBER < member> [< name> ][< value> ]
  • Diese SYM-Variation definiert ein Element eines aufgezählten Typs. < symid> kann durch die ANDF-Herstellungseinrichtung 208 in einer LOD-HPcode-Plus-Anweisung verwendet werden.
  • < member> ist eine Symbol-id des nächsten Elements des aufgezählten Typs, das von einer KIND_MEMBER-Eintragung definiert wird. Dies kann ein Vorwärtsverweis sein. Falls dieser Parameter 0 ist, dann ist dies das letzte Element des aufgezählten Typs.
  • < name> ist ein Name, welcher verwendet wird, um auf das Element während der Symbol-Debug-Operationen zu verweisen.
  • < value> ist entweder eine Ganzzahlkonstante oder die Symbol-id einer ungebrochenen Konstante (in einer #n-Notation). Falls dieser < value> fehlt, dann ist der Wert gleich dem vorherigen Elementwert plus 1, oder 0, falls dies das erste Element ist.
  • Symids, die KIND_MEMBER-HPcode-Plus-Anweisungen zugeordnet sind, werden bei der Beendigung der nächsten einschließenden Funktion freigemacht, falls und nur falls der symid des aufgezählten Typs auch freigemacht wird.
  • 2.5.59.2.15. KIND_OFFSETOF
  • Syntax: SYM < symid> KIND_OFFSETOF < free> < struct> < field> [< result type> ]
  • (result type = Ergebnistyp)
  • Diese SYM-Variation definiert eine Symbol-id für den konstanten Versatz in Bytes eines Feldes vom Beginn der einschließenden Struktur.
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • < struct> ist eine Symbol-id des Strukturtyps.
  • < field> ist eine Symbol-id des Feldes, dessen Versatz zurückzubringen ist.
  • < result type> ist eine Symbol-id des Typs dieser symid-Konstante. Falls < result type> nicht spezifiziert ist, dann ist das Ergebnis TYPE_UNS_INT.
  • 2.5.59.2.16. KIND_SIZEOF
  • Syntax: SYM < symid> KIND_SIZEOF < free> < data type> [< result type> ]
  • Diese SYM-Variation definiert eine Symbol-id für die konstante Größe eines Datentyps, die als Zahl von TYPE_CHAR- großen Einheiten ausgedrückt wird.
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • < data type> ist eine Symbol-id des Typs, dessen Größe bestimmt wird.
  • < result type> ist eine Symbol-id des Typs einer < symid> Konstante. Falls diese nicht spezifiziert ist, ist das Ergebnis TYPE_UNS_INT.
  • 2.5.59.2.17. KIND_MAXOF
  • Syntax: SYM < symid> KIND_MAXOF < free> < data type>
  • Diese SYM-Variation definiert eine Symbol-id für den konstanten maximal darstellbaren Wert für den spezifizierten Typ.
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • < data type> ist eine Symbol-id des Typs, dessen maximaler Wert bestimmt wird. Der Ergebnistyp ist immer < data type> .
  • 2.5.59.2.18. KIND_MINOF
  • Syntax: SYM < symid> KIND_MINOF < free> < data type>
  • Diese SYM-Variation definiert eine Symbol-id für den konstanten minimal darstellbaren Wert für den spezifizierten Typ.
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • < data type> ist eine Symbol-id des Typs, dessen minimaler Wert bestimmt wird. Der Ergebnistyp ist immer < data type> .
  • 2.5.59.2.19. KIND_CONST
  • Syntax: SYM < symid> KIND_CONST < free> < type> < constant value list> [("name)"];
  • (constant value list = Liste konstanter Werte)
  • Diese SYM-Variation definiert eine Konstante. Die Konstante kann ein einfacher Wert, eine Strukturkonstante oder eine Liste von Werten in einem Array sein.
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • < type> bezeichnet eine Symbol-id des Typs der Konstante.
  • (constant value list) sind Werte, die verwendet werden, um die Konstante zu initialisieren.
  • < name> ist ein Name, welcher verwendet wird, um während der Symbol-Debug-Operationen auf die Konstante zu verweisen.
  • Eine Spezifikation einzelner skalarer Gegenstände oder skalarer Gegenstände, die innerhalb einer Mengenliste enthalten sind, wird in der folgenden Tabelle dargestellt: Skalare Gegenstände
  • Um eine Array- oder Strukturmenge zu spezifizieren, sind die Gegenstände reihenfolgenmäßig in eckigen Klammern [] aufgelistet. Für Arrays sind die Gegenstände in nachfolgenden Arrayelementen plaziert. Für Strukturen ist jeder Gegenstand in der Liste in der entsprechenden Feldposition plaziert. Um die Lesbarkeit der HPcode-Plus-Objektdatei zu erleichtern, wird das Zeilenwechselzeichen als gewöhnlicher Leerraum zwischen zwei einschließenden eckigen Klammern behandelt. Das heißt, daß eine Mengeninitialisierungsliste mehrere Zeilen überspannen kann.
  • In der Menge müssen nicht alle Gegenstände initialisiert werden.
  • Um verschachtelte Mengen zu initialisieren, kann die verschachtelte Menge durch eine Teilliste spezifiziert werden, die von eckigen Klammern eingegrenzt ist. Die verschachtelte Menge kann ferner durch eine einzige Symbol-id einer bereits definierten Konstante des verschachtelten Mengentyps dargestellt werden. Mehrdimensionale Arrays werden in einer Zeilenhauptheihenfolge initialisiert.
  • Ein leeres Paar von Anführungsstrichen "" bezeichnet einen nicht initialisierten Gegenstand in der Liste.
  • Nebeneinanderliegende Gegenstände in einer Liste, die durch mit Anführungszeichen versehene Zeichen initialisiert werden, können in einem einzigen Paar von Anführungszeichen zusammengefaßt werden. Beispielsweise kann "a" "b" "c" auch "abc" geschrieben werden.
  • Duplizierte Gegenstände in einer Liste können durch repeat* item (= wiederholen*Gegenstand) spezifiziert werden, wobei Wiederholen eine Ganzzahl oder eine Symbol-id der Ganzzahl in der #n-Notation ist. Nebeneinanderliegende nicht initialisierte Gegenstände können durch repeat*"" initialisiert werden.
  • Um eine Vereinigung zu initialisieren, ist der erste Gegenstand in der Liste ein Feld-symid (in der #n-Notation), der kennzeichnet, welches Feld der Vereinigung initialisiert wurde.
  • 2.5.59.2.20 KIND_NEW_CONST
  • Syntax: SYM < symid> KIND_NEW_CONST < free>
  • Diese SYM-Variation definiert eine neue Konstante. Die neue Konstante wird durch HPcode-Plus-Anweisungen definiert, welche auf die KIND_NEW_CONST-SYM-HPcode-Plus-Anweisung folgen.
  • Die KIND_NEW_CONST-SYM-HPcode-Plus-Anweisung ermöglicht es, daß die ANDF-Herstellungseinrichtung 208 Konstantenfaltungsaktivitäten an die ANDF-Installationseinrichtung 218, 228 überträgt, während dieselbe in der Lage ist, eine Symbol-id zu verwenden, um das Konstantenfaltungsergebnis darzustellen. Beliebige HPcode-Plus-Anweisungen können verwendet werden, um die Konstante zu erzeugen, mit Ausnahme von Prozeduraufrufen, Verzweigungen, Laden von Variablen und Speichern in Variablen. Die Operanden und Parameter aller HPcode-Plus-Anweisungen in der Sequenz müssen bekannte Konstanten darstellen, die für die ANDF-Installationseinrichtung 218, 228 verfügbar sind.
  • Am Ende der HPcode-Plus-Anweisungssequenz muß sich ein einziger Gegenstand auf dem Ausdrucksstapel mit einem konstanten Wert befinden. Der Wert und der Typ dieses Gegenstandes sind der Symbol-id des KIND_NEW_CONST zugeordnet.
  • KIND_NEW_CONST-Aufbaueinrichtungen können verschachtelt werden.
  • Es ist nicht erforderlich, daß die ANDF-Installationseinrichtungen 218, 228 die Anweisungen in den KIND_NEW_CONST- Sequenzen vorbewerten, wobei sich das HPcode-Plus-Programm jedoch verhalten muß, als ob dieselben es taten. Falls beispielsweise die Symbol-id einer KIND_NEW_CONST als der < size> -Spezifizierer in einer KIND_ARRAY-Vereinbarung verwendet wird, muß die Wirkung sein, als ob ein gewöhnlicher Ganzzahlwert spezifiziert worden wäre.
  • Gewisse Ausdrücke müssen von der ANDF-Herstellungseinrichtung 208 an die ANDF-Installationseinrichtung 218, 228 für eine Bewertung weitergegeben werden. Beispielsweise müssen Ausdrücke wie "a" + 6, die eine Berechnung mit Zeichenwerten beinhalten, an die ANDF-Installationseinrichtung 218, 228 weitergegeben werden. Im allgemeinen muß jeder Ausdruck, der die Maschinenabhängigkeiten betrifft, zu der ANDF-Installationseinrichtung 218, 228 zurückgestellt werden. Ein konstanter Ausdruck, wie z. B. 3 + 5, welcher garantiert in den minimalen Bereich paßt, der für TYPE_INT spezifiziert ist, kann jedoch durch die ANDF-Herstellungseinrichtung 208 gefaltet werden.
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • 2.5.59.2.21. KIND_MACRO
  • Syntax: SYM < symid> KIND_MACRO < free> < number of macro parameters> ;
  • (number of macro parameters = Anzahl der Makroparameter)
  • Diese SYM-Variation startet die Definition eines Makro. Das Makro wird durch HPcode-Plus-Anweisungen definiert, welche auf die KIND_MACRO-SYM-HPcode-Plus-Anweisung folgen. Das Makro wird durch eine passende KIND END-SYM-HPcode-Plus-Anweisung beendet.
  • Innerhalb des Körpers des Makros werden formale Parameter durch %1 für den ersten Parameter, durch %2 für den zweiten Parameter, usw. dargestellt. Die formalen Parameter werden durch die entsprechenden tatsächlichen Argumente ersetzt, wenn dieselben durch eine MCAL-HPcode-Plus-Anweisung aufgerufen werden.
  • Die ANDF-Herstellungseinrichtung 208 durchsucht die Kompilerzwischendarstellung 212 nach Sequenzen von HPcode-Plus- Anweisungen, die sich wiederholen. Die ANDF-Herstellungseinrichtung 208 kann daraufhin die KIND_MACRO-SYM-HPcode-Plus- Anweisung verwenden, um diese sich wiederholende Sequenz von HPcode-Plus-Anweisungen als Makro zu definieren, und daraufhin dieses Makro wenn erforderlich mit der MCAL-HPcode- Plus-Anweisung aufzurufen.
  • Es existieren folgende Einschränkungen für die Definition und Verwendung von Makros:
  • o Makros dürfen nicht innerhalb von Makros definiert werden.
  • o Makros dürfen keine rekursiven Aufrufe (entweder direkt oder indirekt durch andere Makros) zu sich selbst durchführen.
  • o Die Anzahl der tatsächlichen Parameter muß gleich der Anzahl der formalen Parameter sein.
  • o Die Makrodefinition muß vor deren Aufruf erscheinen.
  • Es muß Sorgfalt darauf verwendet werden, wenn Etiketten in Makros aufgenommen werden. Die Etiketten sollten entweder Parameter des Makros sein, oder ansonsten sollte das Makro lediglich einmal innerhalb einer Funktion aufgerufen werden (da Etiketten eindeutig sein müssen).
  • < free> ist ein Flag, welches anzeigt, ob < symid> freigemacht wird, wenn die nächste einschließende Funktion beendet wird.
  • 2.5.59.2.22. KIND_END
  • Syntax: SYM < symid> KIND_END
  • Diese SYM-Variation wird verwendet, um Definitionen früherer KIND_FUNCTION-, KIND_NEW_CONST-, und KIND_MACRO-SYM-HPcode- Plus-Anweisungen zu beenden. < symid> muß mit dem < symid> der beendeten SYM-HPcode-Plus-Anweisungen übereinstimmen.
  • Falls die beendete SYM-HPcode-Plus-Anweisung von dem Typ KIND_FUNCTION war, dann endet der Bereich der Funktion, und alle inneren symids, die der Funktion zugeordnet sind, werden freigemacht.
  • 2.5.59.2.23. KIND_SRCFILE
  • Syntax: SYM < symid> KIND SRCFILE < langtype> < LOC # of start of code> ;
  • (start of code = Beginn eines Code)
  • Diese SYM-Variation definiert die Charakteristika einer Quellendatei. Falls die Symbol-Debug-Option eingeschaltet ist, muß die ANDF-Herstellungseinrichtung 208 beim Start jeder Quellendatei, beim Start jeder aufgenommenen Datei und bei der Rückkehr von jeder aufgenommenen Datei diese SYM-HPcode-Plus-Anweisung ausgeben. Zusätzliche KIND_SRCFILE-SYMs können optional an die Kompilerzwischendarstellung 212 vor jeder KIND_FUNCTION-SYM-HPcode-Plus-Anweisung für diese Sprachen ausgeben werden, die das Ein- und Ausschalten von Debug-Informationen in der Quelle über Kompileroptionen zulassen. Dies garantiert, daß Debugger den Ursprung der Funktionen bestimmen können. KIND_ SRCFILE-SYM-HPcode-Plus-Anweisungen müssen vor KIND_FUNCTION-SYM-HPcode-Plus-Anweisungen erscheinen.
  • < "name"> kann entweder ein absoluter oder ein relativer Name sein. Namen von ANSI-C-Include-Dateien können in dem "< file- name> "-Format gegeben sein.
  • < langtype> ist eine Ganzzahl, welche eine Quellensprache wie folgt darstellt:
  • 0 LANG UNKNOWN (language unknown = unbekannte Sprache)
  • 1 LANG C
  • 2 LANG F77
  • 3 LANG PASCAL
  • 4 LANG COBOL
  • 5 LANG BASIC
  • 6 LANG ADA
  • < LOC # of start of code> ist eine Zeilennummer, die durch die ANDF-Herstellungseinrichtung 208 an die erste Zeile eines Codes innerhalb der Quellendatei gegeben wird, die bei der LOC-HPcode-Plus-Anweisung verwendet wird.
  • 2.5.59.2.24. KIND_LABEL
  • SYM < symid> KIND_LABEL (LOC # .."name">
  • Diese SYM-Variation definiert eine Etikette. Falls die Symbol-Debug-Option eingeschaltet ist, sollte für jede Quellenprogrammanweisungsvorschriftetikette eine KIND_LABEL-SYM- HPcode-Plus-Anwei sung ausgeben werden.
  • < "name"> ist der Name der Etikette.
  • < LOC #> ist die Zeilennummer, die der Etikette zugeordnet ist, die in der HPcode-Plus-Anweisung LOC verwendet wird.
  • 2.5.59.3. Incomplete Declarations
  • (Incomplete Declarations = unvollständige Vereinbarungen)
  • Die ANDF-Herstellungseinrichtung 208 kann unvollständige KIND_ARRAY-, KIND_STRUCT-, KIND_UNION-, und KIND_ENUM-SYM- HPcode-Plus-Anweisungen erzeugen. Das heißt, daß die Arraygröße oder das erste Feld oder das erste Element nicht definiert sein kann. In diesen Fällen erzeugt die ANDF-Herstellungseinrichtung 208 eine erste SYM-Anweisung mit einem Platzhalterwert von 0. Später, wenn die ANDF-Herstellungseinrichtung 208 vollständigere Informationen besitzt, wird unter Verwendung desselben symid eine zweite SYM-Anweisung derselben Art erzeugt, um die fehlenden Informationen zu ergänzen. Bis die zweite SYM-Anweisung vollständig ist, ist es nicht erforderlich, daß die ANDF-Installationseinrichtung 218, 228 die Größe des Datenobjekts kennt.
  • 2.5.60. TJP - True JumP
  • (true jump = wahrer Sprung)
  • Die Syntax der HPcode-Plus-Anweisung TJP ist im folgenden dargestellt:
  • TJB < label>
  • TJP hebt < condition> von dem Ausdrucksstapel ab. < condition> muß der einzige Gegenstand auf dem Ausdrucksstapel sein, wenn TJP ausgeführt wird.
  • TJP bewirkt, daß sich die Programmsteuerung zu < label> verzweigt, falls < condition> TRUE ist. Eine LAB-HPcode-Plus-Anweisung in der gegenwärtigen Prozedur muß < label> definieren.
  • 2.5.61. UJP - Unconditional JumP
  • (Unconditional Jump = nicht-bedingter Sprung)
  • Die Syntax der HPcode-Plus-Anweisung UJP ist im folgenden dargestellt:
  • UJP < label>
  • UJP bewirkt, daß sich die Programmsteuerung unbedingt zu < label> verzweigt. Eine LAB-Anweisung innerhalb der gegenwärtigen Prozedur muß < label> definieren. Der Ausdrucksstapel muß leer sein, wenn UJP ausgeführt wird.
  • 2.5.62. XOR - logical exclusive OR
  • (logical exclusive OR = logisches EXKLUSIVES ODER)
  • Die Syntax der HPcode-Plus-Anweisung XOR ist im folgenden dargestellt:
  • XOR
  • XOR hebt < op1> und < op2> von dem Ausdrucksstapel ab. Eine logische XOR-Operation, < op1> XOR < op2> , wird durchgeführt, um ein Ergebnis zu erzeugen. Das Ergebnis, das denselben Datentyp wie < op1> und < op2> aufweist, wird auf dem Ausdrucksstapel abgelegt.
  • Wenn < op1> und < op2> Ganzzahl- oder Zeichen-Datenwerte darstellt, wird eine bitweise XOR-Operation durchgeführt.
  • 3. ANDF-Herstellungseinrichtung
  • Fig. 11 stellt ein detailliertes Blockdiagramm der ANDF-Herstellungseinrichtung 208 der vorliegenden Erfindung dar. Die ANDF-Herstellungseinrichtung 208 ist aus zwei Komponenten aufgebaut: einer Vorverarbeitungseinrichtung 1114 und einem Kompiler 1122. Wie es in Fig. 11 gezeigt ist, umfaßt bei einem alternativen Ausführungsbeispiel der vorliegenden Erfindung die ANDF-Herstellungseinrichtung 208 ferner einen hochstufigen Optimierer 1144 und eine/einen Archiviereinrichtung/Linker 1154.
  • Diese vier Komponenten werden in den folgenden Abschnitten beschrieben:
  • 3.1. Vorverarbeitungseinrichtung
  • Die Vorverarbeitungseinrichtung 1114 empfängt ANSI-C-Quellendateien 202 (welche maschinenunabhängige Computerprogramme enthalten), anwenderdefinierte Kopfdateien 1102, systemspezifische Kopfdateien 1104 und Standardkopfdateien 1106.
  • Die Vorverarbeitungseinrichtung 1114 erweitert objektähnliche Makros und funktionsähnliche Makros, die in den ANSI-C- Quellendateien 202 gefunden wurden. Mit anderen Worten wickelt die Vorverarbeitungseinrichtung 1114 #define- und #include-Vorschriften (und bezogene Merkmale, wie z. B. #ifdef) ab.
  • Ein Beispiel des objektähnlichen Makros ist im folgenden gezeigt:
  • #define NULL
  • Ein Beispiel des funktionsähnlichen Makros ist im folgenden gezeigt:
  • #define offsetof (_s_name, _m_name)((size_t)& (((_s_name*)0)T_m_name))
  • Nach der Erweiterung der objektähnlichen Makros und funktionsähnlichen Makros wird die ANSI-C-Quellendatei 202 ein erweitertes maschinenunabhängiges Computerprogramm genannt. Die Vorverarbeitungseinrichtung 1114 plaziert das erweiterte maschinenunabhängige Computerprogramm in einer vorverarbeiteten Quellendatei 1118.
  • Beim Durchführen einer Makroerweiterung und einer Textersetzung verwendet die Vorverarbeitungseinrichtung 1114 Kopfdateien. Diese Kopfdateien können in drei Kategorien klassifiziert werden:
  • o Anwenderdefinierte Kopfdateien 1102,
  • o Systemspezifische Kopfdateien 1104, und
  • o Standardkopfdateien 1106.
  • Anwenderdefinierte Kopfdateien 1102 werden von Computerprogrammierern erzeugt. Aufgrund der Definition sind anwenderdefinierte Kopfdateien 1102 für bestimmte Anwender spezifisch.
  • Systemspezifische Kopfdateien 1104 sind, wie es aus den Namen hervorgeht, für bestimmte Computerplattformen 206, 218, 228 spezifisch. Als Grundregel sollten die maschinenunabhängigen Computerprogramme 202 keine Verweise auf systemspezifische Kopfdateien 1104 enthalten (außer die objekt- und funktionsähnlichen Makros, die in diesen Kopfdateien enthalten sind, sind auf eine maschinenunabhängige Art und Weise geschrieben, und sowohl auf der ursprünglichen Computerplattform 206 als auch den Zielcomputerplattformen 216, 226 verfügbar)
  • Standardkopfdateien 1106 sind Dateien, welche durch den ANSI-C-Standard spezifiziert sind. Dieselben sind im folgenden aufgelistet:
  • < assert.h> < locale.h> < stddef.h>
  • < ctype.h> < math.h> < stdio.h>
  • < errno.h> < setjmp.h> < stdlib.h>
  • < float.h> < signal.h> < string.h>
  • < limits.h> < stdard.h> < time.h>
  • Computerplattformen 206, 218, 228 müssen vollständige Kopien der Standardkopfdateien 1106 enthalten. Die Inhalte der Standardkopfdateien 1106 können sich jedoch unter den Computerplattformen 206, 208, 228 unterscheiden. Beispielsweise können objektähnliche Makros, funktionsähnliche Makros und Typdefinitionen, welche auf eine Art auf einer Computerplattform definiert sind, auf einer anderen Computerplattform unterschiedlich definiert sein. Folglich können die Standardkopfdateien 1106 von bestimmten Computerplattformen 206, 218, 228 abhängig sein. Trotzdem muß die ANDF-Herstellungseinrichtung 208 die Computerprogramme 202 akzeptieren, die Standardkopfdateien 1106 verwenden, und dieselbe muß sicherstellen, daß sich die Standardkopfdateien 1106 verhalten, als ob dieselben auf den Zielcomputerplattformen 216, 226 kompiliert worden wären.
  • Die Vorverarbeitungseinrichtung 1114 löst dieses Problem durch Verwenden eines Mechanismus, um die Übersetzung von Makro- und Typdefinitionen, die in den Standardkopfdateien 1106 gefunden werden, bis zum Installationszeitpunkt aufzuschieben (d. h. bis die ANDF-Installationseinrichtung 218, 228 das Computerprogramm 202 auf der Zielcomputerplattform 216, 226 installiert).
  • Insbesondere werden alle Standardkopfdateien 1106 durch Ersetzen der Datentypidentifizierer, der objektähnlichen Makroidentifizierer und der funktionsähnlichen Makroidentifizierer, die in den Standardkopfdateien 1106 enthalten sind, durch eindeutige Schlüsselwörter modifiziert. Bei dem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung sind die eindeutigen Schlüsselwörter zu den Datentypidentifizierem, den objektähnlichen Makroidentifizierern und den funktionsähnlichen Makroidentifizierern mit dem Zusatz eines Prefix "_ANDF_" selbst gleich.
  • Die vorgeschlagene Lösung wird in dem folgenden Beispiel dargestellt. Die Standardkopfdatei stddef.h (die aus Verweisgründen "Stddef.h Unmodified" (unmodified = unmodifiziert) genannt wird) enthält die folgenden Anweisungsvorschriften.
  • #define NULL 0
  • typedef unsigned int size_t;
  • typedef unsigned int wchar_t;
  • typedef unsigned int ptrdiff_t;
  • #define offsetof(_s_name, _m_name)
  • ((size_t)&(((_s_name*)0)T_m_name))
  • Identifizierer, wie z. B. "NULL", werden objektähnliche Makroidentifizierer genannt. Identifizierer, wie beispielsweise "size_t", werden Datentypdefinitionsidentifizierer genannt. Identifizierer, wie z. B. "offsetof", werden funktionsähnliche Makroidentifizierer genannt. Diese Identifizierer werden in der Standardkopfdatei stddef.h definiert.
  • Eine modifizierte ANDF-Version von stddef.h. (die aus Verweisgründen "Stddef.h Modifled" genannt wird) enthält die folgenden Anweisungsvorschriften
  • #define NULL _ANDF_NULL
  • #define size_t _ANDF_size_t
  • #define wchar_t _ANDF_wchar_t
  • #define ptrdiff_t _ANDF_ptrdiff_t
  • #define offsetof(_s_name,_m_name)
  • _ANDF_offsetof(_s_name,_m_name)
  • Die Anweisungsvorschriften, wie z. B. "#define NULL _ANDF_ - NULL" und "#define size_t _ANDF_size_t", werden objektähnliche Makrodefinitionen genannt. Anweisungsvorschriften, wie z. B. "#define offsetof(_s_name,_m_name) _ANDF_offsetof (_s_name,_m_name)", werden funktionsähnliche Makrodefinitionen genannt. Die objektähnlichen Makrodefinitionen weisen den objektähnlichen Makroidentifizierern und Typdefinitionsidentifizierern eindeutige Schlüsselwörter zu. Die funktionsähnlichen Makrodefinitionen weisen den funktionsähnlichen Makroidentifizierern eindeutige Schlüsselwörter zu.
  • Die Vorverarbeitungseinrichtung 1114 verwendet Stddef.h Modified für eine Makroerweiterung. Nun wird der folgende Programmauszug betrachtet:
  • #include (stddef.h)
  • main()
  • {
  • struct s {
  • size_t i;
  • wchar_t j;
  • ptrdiff_t p;
  • };
  • struct s x;
  • int a;
  • a = offsetof(struct s,j);
  • a = NULL;
  • ..
  • Eine Übersetzung des obigen Programmauszugs durch die Vorverarbeitungseinrichtung 1114 unter Verwendung von stddef.h Modifled wird im folgenden dargestellt. Die Übersetzung ist das erweiterte maschinenunabhängige Computerprogramm. Das erweiterte maschinenunabhängige Computerprogramm wird in der vorverarbeiteten Quellendatei 1118 angeordnet. Objektähnilche Makros und funktionsähnliche Makros, welche das Prefix "_ANDF_" enthalten, werden erweiterte objektähnliche Makros und erweiterte funktionsähnliche Makros genannt.
  • main()
  • {
  • struct s {
  • _ANDF_size_t i;
  • _ANDF_wchar_t j;
  • _ANDF_ptrdiff_t p;
  • struct s x;
  • int a;
  • a = _ANDF_offsetof(struct s,j);
  • a = _ANDF_NULL;
  • Die Aufgabe der Vorverarbeitungseinrichtung 1114 ist abgeschlossen. Wir werden nun den Betrieb des Kompilers 1122 und der ANDF-Installationseinrichtung 218, 228 bezüglich der Verarbeitung der Standardkopfdateien 1106 betrachten (der Kompiler 1122 und die ANDF-Installationseinrichtung 218, 228 werden ferner in den Abschnitten 3.2 bzw. 4.0 beschrieben).
  • Wie es in Fig. 11 gezeigt ist, empfängt der Kompiler 1122 die vorverarbeitete Quellendatei 1118 als Eingabe. Wie es im Abschnitt 3.2 beschrieben ist, übersetzt der Kompiler 1122 das erweiterte maschinenunabhängige Computerprogramm, das in der vorverarbeiteten Quellendatei 1118 enthalten ist, in HPcode-Plus-Anweisungen
  • Der Kompiler 1122 weiß jedoch, daß derselbe die eindeutigen Schlüsselwörter nicht vollständig übersetzen kann (d.h. diese Wörter, die mit "_ANDF_" beginnen). Die Übersetzung der eindeutigen Schlüsselwörter muß zu der ANDF-Installationseinrichtung 218, 228 zurückgestellt werden (d. h. die endgültige Interpretation der Datentypdefinitionen, der objektähnlichen Makroidentifizierer und der funktionsähnlichen Makroidentifizierer wird zu der ANDF-Installationseinrichtung 218, 228 zurückgestellt). Daher übersetzt der Kompiler 1122 einen Quellencode, der die eindeutigen Schlüsselwörter enthält, in HPcode-Plus-Anweisungen, die negative Symbol-ids enthalten.
  • Negative Symbol-ids stellen Platzhalter dar; Dieselben sind systemdefinierte und reservierte Symbole, die in die eindeutigen Schlüsselwörter abbilden (welche dementsprechend in die objektähnlichen und funktionsähnlichen Makroidentifizierer abbilden). Beim Auftreten einer negativen Symbol-id tauscht die ANDF-Installationseinrichtung 218, 228 die Datentypdefinitionserweiterungen, die objektähnlichen Makroerweiterungen und die funktionsähnlichen Makroerweiterungen gegen die negativen Symbol-ids aus. Die Datentypdefinitionserweiterungen, die objektähnlichen Makroerweiterungen und die funktionsähnlichen Makroerweiterungen werden auf den Zielcomputerplattformen 216, 226 definiert und sind von denselben abhängig.
  • Beispielsweise übersetzt der Kompiler 1122 die Inhalte der obigen vorverarbeiteten Quellendatei 1118 in die folgenden HPcode-Plus-Anweisungen. Wie es in Fig. 11 gezeigt ist, werden diese HPcode-Plus-Anweisungen in der HPcode-Plus-Objektdatei 1160 gespeichert.
  • SYM 401 KIND_STRUCT 1 402 0 "s"
  • ; definieren der Struktur s
  • SYM 402 KIND_FIELD -2 403 "i"
  • ; definieren, daß das Feld i den Type -2 =
  • _ANDF_size_t aufweist
  • SYM 403 KIND_FIELD -3 404 "j"
  • ; definieren, daß das Feld j den Type -3 = _ANDF_wchar_t
  • SYM 404 KIND_FIELD -4 0 "p"
  • ; das Feld p weist den Type -4 = _ANDF_ptrdiff_t auf
  • SYM 405 KIND_DVAR 4010 "x"
  • ; definieren der lokalen Variable x als Struktur s
  • SYM 406 KIND_DVAR TYPE_INT 0 "a"
  • ; definieren der lokalen Variable a
  • MCAL -5 401 403
  • ; aufrufen des Macro _ANDF_off setof
  • CVT TYPE_INT
  • ; umwandeln in einen Zieltyp
  • STR 406
  • ; speichern in "a"
  • LOD -1
  • ; "_ANDF_NULL" laden
  • CVT TYPE_INT
  • STR 406
  • ; speichern in "a"
  • Die Datentypdefinitionserweiterungen und objektähnlichen und funktionsähnlichen Makroerweiterungen, welche den reservierten negativen Symbol-ids entsprechen, werden in einer Standard-ANDF-Kopfdatei, die andf.h genannt wird, definiert und gespeichert. Andf.h existiert auf jedem Installierstandort 216, 226, wobei jedoch deren Inhalte von einem Installierstandort 216, 226 zum anderen variieren können. Die Inhalte von andf.h für die modifizierte ANDF-Version von stddef.h, d. h. Stddef.h Modified, werden im folgenden dargestellt (wie bereits erwähnt, können die tatsächlichen Inhalte von andf.h von einem Installierstandort 216, 226 zum anderen variieren. Ferner kann der Name von andf.h von einem Installierstandort 216, 226 zum anderen variieren).
  • SYM -1 KIND_CONST TYPE_INT 1 "__ANDF_NULL"
  • ; definieren von NULL als eine int-Konstante 1
  • SYM -2 KIND_MODIFIER 0 0 TYPE_UNS_INT "_ANDF_size_t"
  • ; definieren, daß size_t eine vorzeichenlose Ganzzahl ist
  • SYM -3 KIND_MODIFIER 0 0 TYPE_UNS_INT "_ANDF_wchar_t"
  • ; definieren, daß wchar_t eine vorzeichenlose Ganzzahl ist
  • SYM -4 KIND_MODIFIER 0 0 TYPE_UNS_INT "__ANDF_ptrdiff_t"
  • ; definieren, daß ptrdiff t eine vorzeichenlose Ganzzahl ist
  • SYM -5 KIND_MARCO 0 2 "_ANDF_offsetof"
  • ; definieren des Makro offsetof
  • SYM -500 KIND_POINTER 0 %1
  • ; erzeugen eines Zeigertyps
  • LDC TYPE_INT
  • ; laden einer Konstante
  • CVT -500
  • ; festlegen eines Zeigers auf die Struktur
  • IXF %2
  • ; erzeugen einer Feldadresse
  • CVT -2
  • ; festlegen von addr. auf den size_t-Typ
  • SYM -5 KIND_END
  • ; beenden des Makro offsetof
  • Die ANDF-Installationseinrichtung 218, 228 ersetzt negative Symbol-ids durch geeignete Datentypdefinitionserweiterungen und objektähnliche und funktionsähnliche Makroerweiterungen, indem beim Auftreten einer negativen Symbol-id auf andf.h verwiesen wird (in dieser Eigenschaft wirkt die ANDF-Installationseinrichtung 218, 228 wie eine Vorverarbeitungseinrichtung). Die Übersetzung der oben erwähnten HPcode-Plus- Objektdatei 1160 durch die ANDF-Installationseinrichtung 218, 228 ist im nachfolgenden dargestellt.
  • SYM 401 KIND_STRUCT 1 402 0 "S"
  • ; definieren der Structur s
  • SYM 402 KIND_FIELD TYPE_UNS_INT 403 "i"
  • ; definieren, daß das Feld i den Typ = vorzeichenlose Ganzzahl aufweist
  • SYM 403 KIND_FIELD TYPE_UNS_INT 404 "j"
  • ; definieren, daß das Feld j den Typ vorzeichenlose Ganzzahl aufweist
  • SYM 404 KIND_FIELD TYPE_UNS_INT 0 "p"
  • ; das Feld p weist den Typ vorzeichenlose Ganzzahl auf
  • SYM 405 KIND_DVAR 4010 "x"
  • ; definieren der localen Variable x als Structur s
  • SYM 406 KIND_DVAR TYPE_INT 0 "a"
  • ; definieren der localen Variable a
  • LDC TYPE_INT
  • ; Erweiterung des Makro offsetof beginnt
  • CVT KIND_POINTER 0 401
  • IXF 403
  • CVT TYPE_UNS_INT
  • ; Ende der Erweiterung des Makro offsetof
  • CVT TYPE_INT
  • ; umwandeln in Ziel-Typ
  • STR 406
  • ; speichern in "a"
  • LOD 1
  • ; _ANDF_NULL" laden
  • STR 406
  • ; speichern in "a"
  • ..
  • Strukturtypdefinitionen werden auf ähnliche Weise gehandhabt. Beispielsweise ist der div_t-Typ in < stdlib.h> wie folgt definiert.
  • typedef struct {
  • int quot;
  • int rem;
  • } div t;
  • Die entsprechende HPcode-Plus-Definition in andf.h ist im folgenden dargestellt.
  • SYM -10 KIND_STRUCT 0-11 0 "div_t"
  • ; definieren der Struktur div t
  • SYM -11 KIND FIELD TYPE_INT -12 "quot"
  • ; definieren des Feldes quot
  • SYM -12 KIND_FIELD TYPE_INT 0 "rem"
  • ; definieren des Feldes rem
  • Für den folgenden Code:
  • struct div_t x;
  • .. x.quot ..
  • Der Kompiler 1122 erzeugt die folgenden HPcode-Plus-Anweisungen. Diese Anweisungen werden wieder in der HPcode-Plus- Objektdatei 1160 plaziert.
  • SYM 406 KIND_DVAR -10 0 "x"
  • ; definieren der localen Variable x als Struktur div_t
  • LDA 406
  • IXF-11
  • ILOD
  • Die Typdefinition (typedef) von div_t kann auf unterschiedlichen Computerplattformen unterschiedlich sein. Der ANSI- C-Standard erfordert es, daß div_t die zwei Felder "quot" und "rem" aufweist, wobei die Reihenfolge jedoch implementierungsdefiniert ist. Da die HPcode-Plus-Symbol-ids jedoch standartisiert sind, sind die ANDF-Anweisungsvorschriften, um auf das Feld "x.quot" zu verweisen, auf allen Computerplattformen dieselben. Im folgenden wird nun die div_ t-Definition auf einer unterschiedlichen Computerplattform betrachtet:
  • typedef struct {
  • int rem;
  • int quot;
  • } div_t;
  • Die entsprechende ANDF-Definition in andf.h enthält die folgenden Anweisungsvorschriften.
  • SYM -10 KIND_STRUCT 0-12 0 "div_t"
  • ; definieren der Struktur div t
  • SYM -12 KIND_FIELD TYPE_INT -11 "rem"
  • ; definieren des Feldes rem
  • SYM -11 KIND_FIELD TYPE_INT 0 "quot"
  • ; definieren des Feldes quot
  • Es sei angemerkt, daß dieselben HPcode-Plus-Anweisungen, die im vorhergehenden dargestellt sind, verwendet werden können, um auf "x.quot" auf dieser Computerplattform zu verweisen.
  • Ein verwandtes Problem besteht darin, daß einige Standardfunktionen auf einigen Computerplattformen 206, 216, 226, jedoch nicht auf den anderen, als funktionsähnliche Makros definiert sind. Der ANSI-C-Standard erlaubt es, daß gewisse Bibliotheksfunktionen entweder durch eine reale Funktion oder ein funktionsähnliches Makro implementiert werden. Beispielsweise kann abs() entweder eine Funktion oder ein funktionsähnliches Makro sein.
  • An dem Herstellungseinrichtungsstandort 206 müssen diese Bibliotheksfunktionsnamen durch eindeutige Schlüsselwörter unter Verwendung funktionsähnlicher Makrodefinitionen in der modifizierten ANDF-Version der Kopfdatei ersetzt werden. An dem Installationseinrichtungsstandort 216, 226 würde die andf.h-Datei eine HPcode-Plus-Makroerweiterung für die reservierte negative Symbol-id (des eindeutigen Schlüsselwortes) enthalten, die dieselbe entweder als Funktionsaufruf oder als eine HPcode-Plus-Anweisungssequenz für die lokale Makrodefinition definiert.
  • Es sei beispielsweise angenommen, daß die folgende funktionsähnliche Makrodefinition in die modifizierte ANDF-Version von macros.h (die aus Verweiszwecken Macros.h Modified genannt wird) eingefügt wurde.
  • #define abs() _ANDF_abs(x)
  • Es sei angenommen, daß die Herstellungseinrichtung 208 das eindeutige Schlüsselwort "_ANDF_abs(x)" zu dem negativen Symbol-Identifizierer -200 abbildet.
  • Die Kompilerzwischendarstellung 212, welche den negativen Symbolidentifizierer -200 enthält, wird dann an den Installierstandort 216 und den Installierstandort 226 verteilt. Zwecks dieses Beispiels sei angenommen, daß der Installierstandort 216 abs als Makro definiert. Der Installierstandort 226 definiert abs als Funktion.
  • Die andf.h-Datei an dem Installierstandort 216 würde dann die folgende HPcode-Plus-Makroerweiterung enthalten:
  • SYM -200 KIND_MACRO 01 "_ANDF_abs"
  • LDC TYPE_INT 0
  • LOD %1
  • GEQ
  • CEVL
  • LOD %1
  • CEVL
  • LOD %1
  • NEG
  • CEXP
  • SYM -200 KIND_END
  • Die andf.h-Datei an dem Installierstandort 226 würde dann die folgende HPcode-Plus-Makroerweiterung enthalten:
  • SYM -200 KIND_MACRO 0 1 "_ANDF_abs"
  • MST
  • LOD %1
  • PAR
  • CUP sym_id_for_abs
  • SYM -200 KIND END
  • 3.2. Kompiler
  • Wie es in Fig. 11 gezeigt ist, empfängt der Kompiler 1122 die vorverarbeitete Quellendatei 1118 als Eingabe. Der Kompiler 1122 übersetzt das erweiterte maschinenunabhängige Computerprogramm, das in der vorverarbeiteten Quellendatei 1118 enthalten ist, in Sequenzen der HPcode-Plus-Anweisungen. Diese HPcode-Plus-Anweisungen werden in der HPcode- Plus-Objektdatei 1160 gespeichert. Die HPcode-Plus-Objektdatel 1160 enthält die Kompilerzwischendarstellung 212.
  • Wie es in Fig. 12 dargestellt ist, ist der Kompiler 1122 aus drei Stufen, einer Abtast-/Syntax-Analyseeinrichtung 1124, 1126, einer Semantik-Analyseeinrichtung 1128 und einem Codegenerator 1130, zusammengesetzt. Diese drei Stufen werden in den Abschnitten 3.2.1, 3.2.2 bzw. 3.2.3 beschrieben.
  • 3.2.1. Abtasteinrichtung/Syntaxanalyseeinrichtung
  • Die Abtasteinrichtung/Syntaxanalyseeinrichtung 1124, 1126 baut einen Abstrakt-Syntaxbaum 1204 (AST; AST = abstract syntax tree = Abstrakt-Syntaxbaum) gemäß Baumaufbauregeln auf, welche in der Eingangsgrammatik spezifiziert werden können. Der AST 1204 bildet im wesentlichen die Struktur des Computerprogramms 202, das kompiliert wird, nach. Der AST 1204 ist aus Unterbäumen zusammengesetzt, welche Vereinbarungen, Funktionsdefinitionen, Anweisungsvorschriften, Ausdrücke, usw. darstellen.
  • 3.2.2. Semantik-Analyseeinrichtung
  • Wie es in Fig. 12 gezeigt ist, empfängt die Semantik-Analyseeinrichtung 1128 den Abstrakt-Syntaxbaum 1204 als Eingabe.
  • Die Semantik-Analyseeinrichtung 1128 erzeugt eine Symboltabelle 1134 und eine Typtabelle 1138. Die Semantik-Analyseeinrichtung 1128 speichert Symbolidentifizierer, Symbolinformationen und Symbol-Art-Informationen von den SYM-HPcode-Plus-Anweisungen in der Symboltabelle 1134 und der Typtabelle 1138.
  • Die Semantik-Analyseeinrichtung 1128 dekoriert die Knoten des AST 1204 mit Zeigern zu geeigneten Eintragungen der Symboltabelle 1134 und der Typtabelle 1138, um einen dekorierten Abstrakt-Syntaxbaum 1210 herzustellen.
  • 3.2.3. Codegenerator
  • Wie es in Fig. 12 gezeigt ist, empfängt der Codegenerator 1130 den dekorierten Abstrakt-Syntaxbaum 1210 als Eingabe. Der Codegenerator 1130 schreibt seine Ergebnisse in die HPcode-Plus-Objektdatei 1160.
  • Die Codeerzeugung wird durchgeführt, während der dekorierte AST überquert wird. Während dieser Überquerung werden Operationen, Typen und Steuerungskonstrukte der Quellensprache (d. h. Pascal, C, Ada, usw.) in HPcode-Plus-Anweisungen abgebildet. Die rekursive Baumüberquerung wird durchgeführt, indem die Knoten in umgekehrter Reihenfolge besucht werden, wie es im folgenden gezeigt ist:
  • < Root-node> < leftmost-child node> ... < rightmost-child node>
  • Die geeignete HPcode-Plus-Anweisungssequenz wird erzeugt, sowie jeder Knoten besucht ist. Die grundlegende Abbildung von ANSI-C in HPcode-Plus ist ein unkompliziertes Verfahren.
  • Die meisten Ausdrucksoperatoren in C weisen entsprechende HPcode-Plus-Anweisungen auf. C-Steuerungsstrukturen werden aus Etiketten und den HPcode-Plus-Anweisungen TJP, FJP und UJP aufgebaut.
  • Die Abbildung von ANSI-C nach HPcode-Plus auf eine architekturneutrale Art und Weise ist häufig komplex. Diese Komplexitäten werden in den folgenden Abschnitten beschrieben. Beim Lesen dieser Abschnitte kann es hilfreich sein, sich auf die Fig. 3 zu beziehen, welche den HPcode-Plus-Anweisungssatz für ANSI-C darstellt.
  • 3.2.3.1. Datenspeicherzuordnung
  • Die Datenspeicherzuordnung ist ein Hauptproblem beim Herstellen eines architekturneutralen Verteilungsformats. Bei herkömmlichen Kompilern 106 ordnen die vorderen Teile 108 den Speicher für die Daten zu. Da jedoch Computerplattformen unterschiedliche Wortgrößen, Packungsalgorithmen, Ausrichtungsanforderungen und Datentypdarstellungen aufweisen, erzeugt die Datenspeicherzuordnung durch den vorderen Teil 108 die Kompilerzwischendarstellungen 112, welche nicht architekturneutral sind.
  • Bei der vorliegenden Erfindung erfordert der Codegenerator 1130 keine Voraussetzungen, wie sich Datenobjekte in den Speicher der Zielcomputerplattform 216, 226 abbilden. Stattdessen wird die Datenspeicherzuordnung zurückgestellt, derart, daß Wortgrößen, Packungsalgorithmen, Speicherungs- und Ausrichtungsanforderungen und Datentypdarstellungen durch die ANDF-Installationseinrichtung 218, 228 und nicht durch die ANDF-Herstellungseinrichtung 208 bestimmt werden.
  • Der Codegenerator 1130 verwendet die SYM-HPcode-Plus-Anweisung, um die Definition und Vereinbarung eines Datentyps, einer Variable und einer Funktion zu der ANDF-Installations einrichtung 218, 228 zurückzustellen. Beim Zurückstellen dieser Speicherzuordnungsaufgaben zu der ANDF-Installations einrichtung 218, 228 verwendet der Codegenerator 1130 die SYM-HPcode-Plus-Anweisung, um an die Datentypidentifizierer, die Variablenidentifizierer und die Funktionsidentifizierer eindeutige Symbol-Identifizierer zu geben.
  • Beispielsweise sei angenommen, daß das maschinenunabhängige Computerprogramm 202 die folgenden Speicherzuordnungsanweisungen enthält:
  • int x;
  • double y();
  • x und y sind Variablen. Falls x eine dynamische Variable ist, dann würde der Codegenerator 1130 den folgenden SYM-Befehl verwenden, um x einen eindeutigen Symbol-Identifizierer zuzuweisen:
  • SYM 100 KIND_DVAR TYPE INT 0 "x"
  • Der Codegenerator 1130 könnte dann Speicherverwelsanweisungen (wie z. B. "x = 1; " und "z = x + y;"), welche die Variable x enthalten, in HPcode-Plus-Anweisungen übersetzen, indem der eindeutige Symbol-Identifizierer 100 verwendet wird, um auf x zu verweisen.
  • Folglich liefert der Codegenerator 1130 über die SYM-HPcode-Plus-Anweisung Speicherzuordnungsinformationen an die ANDF-Installatlonseinrichtung 218, 228. Die ANDF-Installationseinrichtung 218, 228 verwendet diese Information, um Speicherzuordnungsanweisungen In den Speicher der Zielcomputerplattform 216, 226 abzubilden.
  • 3.2.3.2. Bereich. Verbindung und Vereinbarung von Variablen
  • Der Codegenerator 1130 bestimmt den Bereich und die Verbindung von Variablen, und stellt Namen für diese Variablen mit einer externen Verbindung bereit. Die ANDF-Installationselnrichtung 218, 228 unterstellt, daß die Bereichs- und Verbindungsspezifikation der HPcode-Plus-Objektdatei 1160 korrekt ist.
  • Der Codegenerator 1130 verwendet die SYM-HPcode-Plus-Anweisung, um Variablen zu vereinbaren. Variablentypen hängen von dem Wert des (symkind)-Feldes der SYM-Anweisung (siehe Fig. 10) ab. Statische Speicherdauervarlablen (KIND_SVAR), automatische lokale Variablen (KIND_DVAR) und Parametervariablen (KIND_FPARAM) werden definiert.
  • Falls KIND_SVAR-Variablen eine externe Verbindung besitzen, wird ein sichtbarer Name mit der SYM-Vereinbarung zugeführt.
  • Der Codegenerator 1130 verwendet ferner die SYM-HPcode- Plus-Anweisungen, um Funktionen zu definieren und zu vereinbaren. Die Funktionsdeflnitionen (KIND_FUNCTION) und Funktionsvereinbarungen (KIND_FUNC_DCL) umfassen sichtbare Namen, falls die Verbindung extern ist.
  • Der Codegenerator 1130 verwendet die SYM-HPcode-Plus-Anweisung, um Datentypstrukturierer, wie z. B. Arrays, Strukturen und Zeiger, zu vereinbaren. Die KIND_ARRAY-, KIND_STRUCT-, KIND_UNION-, KIND_FIELD-, KIND_POINTER-, KIND_FUNC_PTR-, KIND_ENUM-, und KIND_MEMBER-Vereinbarungen spezifizieren die angeordneten C-Datentypen. Zusätzlich werden die "konstanten" und "flüchtigen" C-Kennzeichner hinzugefügt, indem die KIND_MODIFIER-Vereinbarung verwendet wird.
  • Die Grunddatentypen für C sind in der HPcode-Plus-Spezifikation vordefinlert. Der Codegenerator 1130 ist für die Bestimmung verantwortlich, ob ein Feld mit einem einfachen Zeichen (plain char = einfaches Zeichen) oder einem einfachen Bit (plaln bit = einfaches Eit) vorzeichenbehaftet ist oder nicht.
  • 3.2.3.3. Konstanten 3.2.3.3.1. Gleitkomma- und Ganzzahlkonstanten
  • Um Probleme unterschiedlicher Gleitkommadarstellungen zu vermelden, stellt der Codegenerator 1130 Gleltkommakonstanten in HPcode-Plus unter Verwendung der Zeichen dar, die in der Quellendatei 202 vorgesehen sind. Der Codegenerator 1130 kann geringfügige Änderungen vornehmen, vorausgesetzt, daß die Änderungen keine Änderung der Interpretation ergeben.
  • Falls beispielsweise 5.31el eine Gleitkommakonstante in der Quellendatei 202 ist, dann kann der Codegenerator 1130 die Konstante in HPcode-Plus als 5.31E+1 spezifizieren. Der Codegenerator kann die Konstante jedoch nicht in dessen interne Darstellung umwandeln und daraufhin 53.0999995 an die HPcode-Plus-Objektdatei 1160 ausgeben.
  • Auf ähnliche Weise kann der Codegenerator 1130 das Format von Ganzzahlkonstanten ändern, solange die Semantik identisch bleibt. Beispielsweise kann der Codegenerator 1130 entscheiden, alle Oktalkonstanten in ihre entsprechende Hexadez imal-Darstel lungen zu übersetzen.
  • In jedem Fall muß der Codegenerator 1130 der HPcode-Plus-Objektdatei 1160 Gleitkomma- und Ganzzahlkonstanten zuführen, da die Gleitkomma- und Ganzzahlkonstanten auf der Zielcomputerplattform 216, 226 darstellbar sein können.
  • 3.2.3.3.2. Aufzählungskonstanten
  • Der Codegenerator 1130 stellt Aufzählungskonstanten als einfache Ganzzahlen dar. Aus Symbol-Debug-Zwecken kann jedoch der Codegenerator 1130 die KIND_MEMBER-Symbolvereinbarung verwenden, um Auf zählungskonstanten zu spezifizieren.
  • 3.2.3.3.3. Zeichenkonstanten
  • Die HPcode-Plus-Objektdatei 1160 ist eine ASCII-Datei. Folglich stellt der Codegenerator 1130 beim Erzeugen der HPcode-Plus-Objektdatei 1160 alle ASCII-Zeichenkonstanten und zeichenfolgen auf eine natürliche Weise dar. Beispielsweise verwendet der Codegenerator den folgenden Befehl, um das Zeichen "a" in den Ausdrucksstapel zu laden.
  • LDC TYPE_CHAR "a"
  • Der Codegenerator 1130 stellt einfache Escape-Sequenzen durch Verwenden ihrer äquivalenten ASCII-Zeichen dar.
  • Der Codegenerator 1130 stellt oktale oder hexadezimale Escape-Sequenzen dar, indem der Ganzzahlwert der Sequenzen verwendet wird. Beispielsweise verwendet der Codegenerator 1130 den folgenden Befehl, um die Hexadezimalescapesequenz "\x1b" in den Ausdrucksstapel zu laden.
  • LCD TYPE_CHAR 27
  • Die Schwierigkeit tritt auf, wenn der Quellenzeichensatz ein Zeichen aufweist, das nicht als ASCII-Zeichen darstellbar ist (das nicht darstellbare Zeichen wird im nachfolgenden als "CH" bezeichnet). Eine Lösung, die solange funktioniert, wie die ANDF-Herstellungseinrichtung 208 und die ANDF-Installationseinrichtung 218, 228 denselben Zeichensatz verwenden, besteht für den Codegenerator 1130 darin, den Wert des Zeichens CH (unter Verwendung des Zeichensatzes der ursprünglichen Computerplattform 206) in die HPcode-Plus-Objektdatei 1160 als Ganzzahl abzulegen. Die ANDF-Installationseinrichtung 218, 228 würde die Ganzzahl erfassen und dieselbe als Zeichencode behandeln.
  • Dieses Schema funktioniert jedoch nicht, falls die ANDF-Herstellungseinrichtung 208 und ANDF-Installationseinrichtung 218, 228 unterschiedliche Zeichensätze verwenden, die sich trotzdem einige Zeichen teilen. In diesem Fall muß ein Me chanismus vorgesehen werden, der es ermöglicht, daß der Codegenerator 1130 einen Quellenzeichensatzbezeichner in der HPcode-Plus-Objektdatei 1160 spezifiziert.
  • Bei der vorliegenden Erfindung wird dieses Problem durch Definieren einer Liste von Zeichensätzen gelöst, die sowohl die ANDF-Herstellungseinrichtung 208 als auch die ANDF-Installationseinrichtung 218, 228 erkennen. Falls beispielsweise Z' einen Zeichensatz der ursprünglichen Computerplattform 206 spezifiziert, und das Zeichen CH einen Zeichencode 101 in dem Z'-Zeichensatz aufweist, dann stellt die ANDF- Herstellungseinrichtung 208 das Zeichen CH in der HPcode- Plus-Objektdatei 1160 als Z'101 dar. Dieser Mechanismus funktioniert auch für Zeichen mit mehreren Bytes.
  • 3.2.3.4. Datenumwandlungen
  • Der Datentyp eines Datenobjekts muß nicht ohne weiteres offensichtlich sein. Beispielsweise kann in dem Quellencodeaus druck,
  • y = x + 37000,
  • der Codegenerator 1130 nicht wissen, ob 37000 eine Ganzzahl oder eine lange Ganzzahl ist.
  • Der Codegenerator 1130 verwendet die CLDC-HPcode-Plus-Anweisung, um diese Fälle zu handhaben, wenn der Datentyp einer großen Ganzzahlkonstante nicht definitiv bekannt ist. Bei dem früheren Beispiel würde der Codegenerator 1130 die folgende HPcode-Plus-Anweisung erzeugen.
  • CLDC 0 37000
  • Wenn diese HPcode-Plus-Anweisung in die Zielcomputerplattform 216, 226 abgebildet wird, würde die ANDF-Installationseinrichtung 218, 228 versuchen, 37000 als Ganzzahl zu behandeln. Falls 37000 nicht als Ganzzahl dargestellt werden könnte, würde die ANDF-Installationseinrichtung 218, 228 37000 als lange Ganzzahl behandeln.
  • Zusätzlich zu CLDC verwendet der Codegenerator 1130 die HPcode-Plus-Anweisung CVT für implizite Typumwandlungen, bekanntes integrales Promoten und bekannte arithmetische Umwandlungen. Der Codegenerator 1130 verwendet die HPcode- Plus-Anweisung ICVT für ein integrales Promoten der Operanden, bei denen der Bestimmungstyp nicht bekannt ist. Ferner verwendet der Codegenerator 1130 die ACVT-HPcode-Plus-Anweisung für arithmetische Umwandlungen, bei denen der Bestimmungstyp nicht bekannt ist.
  • 3.2.3.5. Postfix-Ausdrücke
  • Der Codegenerator 1130 verwendet die HPcode-Plus-Anweisung IXE zum Arrayindexieren. Die IXE-HPcode-Plus-Anweisung bringt die Adresse eines Arrayelements zurück. Diese Arrayelementadresse wird daraufhin bei nachfolgenden ILOD- und ISTR-HPcode-Plus-Anweisungen (oder als die Quelle einer anderen IXE-HPcode-Plus-Anweisung im Fall von mehrdimensionalen Arrays) verwendet.
  • Der Codegenerator 1130 verwendet MST-, CUP-, und ICUP-HPcode-Plus-Anweisungen, um C-Sprachenfunktionsaufrufe abzubilden. Die MST-HPcode-Plus-Anweisung markiert den Ausdrucksstapel als Vorbereitung auf einen Prozeduraufruf. Die MST-HPcode-Plus-Anweisungen sind paarweise mit den HPcode- Plus-Anweisungen CUP (Aufrufen einer Prozedur) oder ICUP (indirektes Aufrufen) angeordnet. Der Codegenerator 1130 muß sicherstellen, daß diese Paare korrekt verschachtelt sind.
  • Der Codegenerator 1130 verwendet PAR-HPcode-Plus-Anweisungen, um Parameter für das nächste einschließende MST/CUPoder MST/ICUP-Paar zu spezifizieren. Der Codegenerator 1130 ist dafür verantwortlich, Typumwandlungen auf Parametern vor der PAR-HPcode-Plus-Anweisung durchzuführen.
  • Der Codegenerator 1130 verwendet die IXF-HPcode-Plus-Anweisung, um auf Felder einer Struktur oder einer Vereinigung zu verweisen.
  • Der Codegenerator 1130 verwendet eine Kombination von DUP-, INC- und den Lade- und Speicher-HPcode-Plus-Anweisungen, um Inkrement- und Dekrement-Operationen der Sprache C abzubilden. Beispielsweise bildet der Codegenerator 1130 den Quellencodeausdruck *p++ in den folgenden HPcode-Plus-Anweisungen ab:
  • LOD < p>
  • DUP
  • INC 1
  • STR < p>
  • ILOD 3.2.3.6. Unäre Operationen
  • Der Codegenerator 1130 bildet unäre Inkrement- und Dekrementoperatoren der ANSI-Sprache C auf eine Art und Weise ab, die zu ihren entsprechenden Postfix-Operatoren ähnlich ist. Die sich ergebenden HPcode-Plus-Anweisungen sind für gewöhnlich einfacher, da modifizierte Werte (und nicht die ursprünglichen Werte) verwendet werden.
  • Der Codegenerator 1130 verwendet die HPcode-Plus-Anweisung LDA, um den unären "&"-Operator der Sprache C abzubilden.
  • Der Codegenerator 1130 verwendet entweder die HPcode-Plus- Anweisung ILOD oder die ISTR, um den "*"-Operator der Sprache C abzubilden, abhängig davon, ob das Ergebnis in einem Ausdruck verwendet oder einer Variablen zugewiesen wird.
  • Der Codegenerator 1130 verwendet die geeignete Umwandlungs- HPcode-Plus-Anweisung des integralen Promoten, um den unären "+"-Operator der Sprache C abzubilden.
  • Der Codegenerator 1130 verwendet die HPcode-Plus-Anweisung NEG, um den unären "-"-Operator der Sprache C abzubilden.
  • Der Codegenerator 1130 verwendet die HPcode-Plus-Anweisung NOT, um die "&supmin;"- HPcode-Plus-Anweisung der Sprache C abzubilden.
  • Beim Abbilden des "!"-Operators der Sprache C testet der Codegenerator 1130 gegen 0, indem eine Sequenz von HPcode- Plus-Anweisungen verwendet werden, die äquivalent zu !E und (0==E) sind.
  • Der Codegenerator 1130 verwendet die SYM-HPcode-Plus-Anweisung, um den "sizeof"-Operator der Sprache C abzubilden. Auf die sizeof-Operation folgend bestimmt der Codegenerator 1130 den Typ des Ergebnisses.
  • Der Codegenerator 1130 verwendet die CVT-HPcode-Plus-Anweisung, um explizit cast-Operationen (cast = formen) der Sprache C abzubilden.
  • 3.2.3.7. Weitere Operatoren
  • Der Codegenerator 1130 verwendet die MPY-, DIV- und REM-HPcode-Plus-Anweisungen, um die Multiplikations-Operatoren der Sprache C (d. h. *, /, und %) abzubilden. HPcode-Plus definiert die Semantik von DIV und REM, wenn dieselben auf negative Ganzzahlen angewendet werden, um die Implementierung durch die ANDF-Installationseinrichtung 218, 228 zu vereinfachen, und um eine einheitliche Schnittstelle für Computerprogrammierer bereitzustellen.
  • Der Codegenerator 1130 verwendet die ADD- und SUB-HPcode- Plus-Anweisungen, um die Additions-Operatoren der Sprache C (d. h. + und -) abzubilden. Zusätzlich verwendet der Codegenerator 1130 die HPcode-Plus-Anweisungen IXE (die auch beim Arrayindexieren verwendet wird), INC und SUB, um arithmetische Zeigeroperationen der Sprache C abzubilden.
  • Der Codegenerator 1130 verwendet die SHFT-HPcode-Plus-Anweisung, um die Verchiebungsoperatoren der Sprache C (d. h. < < und > > ) abzubilden. Die Semantic der Verschiebung ist der ANDF-Installationseinrichtung 218, 228 überlassen, falls der Verschiebungsmenge größer oder gleich der Größe des Datenobjekts ist. HPcode-Plus spezifiziert, daß mit negativen Vorzeichen behaftete Zahlen, die nach rechts verschoben sind, vorzeichenerweitert werden.
  • Der Codegenerator 1130 bildet die Relations- und Gleichheits-Operatoren der Sprache C < , > , < =, > =, == und != in die HPcode-Plus-Anweisungen LES, GRT, LEQ, GEQ, EQU bzw. NEQ ab.
  • Der Codegenerator 1130 bildet die bitweisen Operatoren &&, und der Sprache C in HPcode-Plus-Anweisungen AND, XOR bzw. IOR ab.
  • Der Codegenerator 1130 verwendet eine CEVL-HPcode-Plus-Anweisung, um die bedingt bewerteten Klauseln in den Operatoren der bedingten Bewertung der Sprache C (d. h. && und ) zu trennen. CEVL wird aus demselben Grund für das Operatorpaar ? : verwendet. Nachdem die Klauseln getrennt sind, gibt der HPcode-Generator die CEXP-HPcode-Plus-Anweisung aus.
  • Der Codegenerator 1130 verwendet HPcode-Plus-Speicheranweisungen (STR, ISTR, INST), um einfache Zuordnungsanweisungsvorschriften der Sprache C abzubilden. Der Codegenerator 1130 bildet verbundene Zuordnungsanweisungsvorschriften der Sprache C durch Verwenden von DUP ab, um die Adresse der linksseitigen Seite zu duplizieren (derart, daß dieselbe lediglich einmal bewertet wird). Daraufhin wird die binäre Operation durchgeführt und das Ergebnis gespeichert.
  • Beispielsweise erzeugt der Codegenerator 1130 die folgenden HPcode-Plus-Anweisungen, um die Anweisungsvorschrift der Sprache C a[i] += j (unter der Annahme, daß a ein Array des Typs int ist) darzustellen:
  • LDA < a>
  • LOD < i>
  • IXE TYPE_INT
  • DUP duplizieren der Adresse von a[i]
  • ILOD
  • LOD (j)
  • ADD ISTR
  • Für den Komma-Operator und die Ausdrücke der Sprache C, die lediglich Seiteneffekte (wie z. B. p++;) besitzen, verwendet der Codegenerator 1130 die DEL-HPcode-Plus-Anweisung, um einen berechneten Gegenstand von dem Ausdrucksstapel zu löschen
  • 3.2.3.8. Falten von Konstanten-Ausdrücken
  • Der Codegenerator 1130 muß Konstantenfaltungen vorsichtig durchführen. Konstanten-Ausdrücke müssen unter Verwendung der Regeln der Zielcomputerplattform 216, 226 gefaltet werden.
  • Beispielsweise wird sich ein Überlauf ergeben, falls der Codegenerator 1130 auf einer 16-Bit-Maschine den vorzeichenbehafteten Ganzzahlausdruck 20000 + 20000 faltet.
  • Ein weiteres Beispiel beinhaltet die Gleitkommakonstantenfaltung. Unterschiedliche Computerplattformen 206, 216, 226 verwenden unterschiedliche Gleitkommadarstellungen mit unterschiedlichen Genauiqkeiten. Eine Umwandlung bewirkt einen Genauigkeitsverlust.
  • Das dritte Beispiel beinhaltet eine Zeichenkonstantenfaltung. Ein Ausdruck 'a' + 5 kann nicht gefaltet werden, da 'a' auf unterschiedlichen Computerplattformen 206, 216, 226 unterschiedliche Werte darstellen kann.
  • Im allgemeinen sollten Konstanten-Faltungsentscheidungen (einschließlich der Werte, der internen Darstellungen und der Bereiche der Konstanten-Ausdrücke) zu der ANDF-Installationseinrichtung 218, 228 zurückgestellt werden. Der Codegenerator 1130 kann Konstanten-Faltungen auf Ganzzahlausdrücken sicher durchführen, deren Werte sich in dem minimalen Bereich befinden, der durch ANSI-C spezifiziert ist. Beispielsweise ist 3+5 sicher.
  • Um Konstanten-Faltungen zu der ANDF-Installationseinrichtung 218, 228 zurückzustellen, verwendet der Codegenerator 1130 die SYM-HPcode-Plus-Anweisungen mit dem KIND_NEW_ CONST-Symbolartwert, um eindeutige Symbol-Identifizierer zu den Konstanten-Ausdrücken zuzuordnen. Beispielsweise erzeugt der Codegenerator 1130 die folgenden HPcode-Plus-Anweisungen, um den folgenden Ausdruck der Sprache C darzustellen:
  • int i['a'+5],k['a'+5];
  • SYM 401 KIND_NEW_CONST
  • LDC TYPE_INT 'a'
  • LDC TYPE_INT 5
  • ADD
  • SYM 401 KIND_END
  • SYM 402 KIND_ARRAY 0 #401 TYPE_INT
  • SYM 403 KIND_SVAR 0 402 0 'i'
  • SYM 404 KIND_SVAR 0 402 0 'k'
  • Der eindeutige Symbol-Identifizierer 401 stellt den Ausdruck 'a'+ 5 dar. Nachfolgende HPcode-Plus-Anweisungen würden den eindeutigen Symbol-Identifizierer 401 verwenden, um auf den Konstanten-Ausdruck 'a' + 5 zu verweisen.
  • 3.2.3.9. Initialisierung
  • Der Codegenerator 1130 verwendet die INIT-HPcode-Plus-Anweisung, die mit den KIND_CONST und KIND_NEW_CONST-Formen der SYM-HPcode-Plus-Anweisung gekoppelt ist, für den Initiallsierungsmechanismus. Der Codegenerator 1130 ist für das Bereitstellen einer vollständig eingeklammerten KIND_CONST- Spezifikation in der HPcode-Plus-Objektdatei 1160 verantwortl ich.
  • 3.2.3.10. Anweisungsvorschriften
  • Der Codegenerator 1130 verwendet die HPcode-Plus-Anweisungen LAB, TJP und UJP, um Etiketten, bedingte Verzweigungen und unbedingte Verzweigungen der Sprache C abzubilden. Zusätzlich verwendet der Codegenerator 1130 die HPcode-Plus-Anweisungen CSJP und CTAB, um Umschaltanweisungsvorschriften der Sprache C abzubilden.
  • Der Codegenerator 1130 wählt nicht die Art und Weise aus, mit welcher ein Verzweigen implementiert wird. Stattdessen läßt die CSJP-HPcode-Plus-Anweisung die ANDF-Installationseinrichtung 218, 228 bestimmen, welche Implementierungsstrategie (beispielsweise eine Verzweigungstabelle, ein kaskadiertes-if (if = falls), eine binäre Suche usw.) die "beste" für die Zielcomputerplattform 216, 226 ist.
  • 3.2.3.11. Funktionen
  • Der Codegenerator 1130 verwendet die SYM-HPcode-Plus-Anweisung, um Funktionen zu definieren und zu vereinbaren. Funktionsdefinitionen (KIND_FUNCTION) und Funktionsvereinbarungen (KIND_FUNC_DCL) umfassen sichtbare Namen, falls die Verbindung extern ist.
  • Der Codegenerator 1130 verwendet die HPcode-Plus-Anweisungen ENT und END, um Funktionseintritts- und Austrittspunkte zu definieren. Der Codegenerator 1130 verwendet die HPcode- Plus-Anweisung RET für interne Rücksprunganweisungsvorschriften und die STFN-HPcode-Plus-Anweisung, um Rücksprungwerte zu spezifizieren.
  • 3.2.3 .12. Beispiel
  • Ein beispielhaftes ANSI-C-Quellenprogramm und dessen entsprechende Übersetzung in HPcode-Plus-Anweisungen ist in Fig. 14 bzw. 15 gezeigt.
  • In Fig. 15 sind zur Lesbarkeit Variablennamen, eine Opcode- Memonic und Anweisungsparameternamen vorgesehen. Die (stdio.h)-Datei, die verwendet wird, um das ANSI-C-Quellenprogramm zu kompilieren, definiert "stdout" zu '&_iob[1]'.
  • 3.3. Hochstufiger Optimierer
  • Wie es in Fig. 11 gezeigt ist, empfängt der hochstufige Optimierer 1144 die HPcode-Plus-Objektdatei 1160 als Eingabe. Der hochstufige Optimierer 1144 liest die HPcode-Plus-Anweisungen, berechnet leistungsverbessernde Transformationen auf den HPcode-Plus-Anweisungen und gibt eine optimierte Version der HPcode-Plus-Objektdatei 1160 aus.
  • Die HPcode-Plus-Kompilerzwischensprache bewahrt die meisten der Datenfluß- und Steuerfluß-Informationen, die von dem hochstufigen Optimierer 1144 benötigt werden. Die einzigen Informationen, die verborgen sind, sind die hochstufigen Schleifenstrukturen, die durch eine Intervallanalyse wiederhergestellt werden können.
  • Die HPcode-Plus-Kompilerzwischensprache ermöglicht ferner maschinenunabhängige IL-zu-IL-Optimierungen, wie z. B. eine Stapelhöhenreduz ierung, eine Operatorvereinfachung, eine Konstantenausbreitung, eine Prozeduraneinanderreihung, eine redundate Def initionsbeseitigung und ein Registerpromoten.
  • Der hochstufige Optimierer 1144 kann mit unterschiedlichen Ausgereiftheitsstufen implementiert werden. Der Bereich der Transformationen könnte auf einzelne Basisbiöcke begrenzt werden oder Prozedurgrenzen überspannen.
  • Es gibt zumindest vier unterschiedliche Vorteile dafür&sub1; daß der hochstufige Optimierer 1144 von dem Kompiler 1122 getrennt und unabhängig ist. Falls der hochstufige Optimierer 1144 getrennt ist&sub1; kann der hochstufige Optimierer 1144 die HPcode-Plus-Objektdatei 1160 wiederholt optimieren. Wiederholte Optimierungen werden häufig Optimierungsmöglichkeiten offenlegen, die andernfalls fehlen würden (wie z. B. redundante Definitionen).
  • Zweitens kann, falls der hochstufige Optimierer 1144 getrennt ist, der hochstufige Optimierer 1144 durch Verwenden einer Kompileroptimierungstechnologie von anderen Programmiersprachen implementiert werden.
  • Drittens wird durch getrenntes Implementieren des hochstufigen Optimierers 1144 die Verwendung der Maschinenressourcen für eine HPcode-Plus-Herstellung und Installation minimiert.
  • Viertens sind optimierte Versionen von HPcode-Plus-Objektdateien 1160 schwieriger zu entziffern und liefern folglich einen zusätzlichen Schutz für die Urheberinformationen in der Quellendatei 202.
  • 3.4. Archiviereinrichtung/Linker
  • Die/der Archiviereinrichtung/Linker 1154 archiviert oder verknüpft mehrere HPcode-Plus-Objektdateien 1150, 1160, um eine HPcode-Plus-Archivdatei 1158 oder bzw. eine gelinkte HPcode-Plus-Datei 1170 herzustellen. DIE HPcode-Plus-Objektdatei 1160, die HPcode-Plus-Archivdatei 1158 und die gelinkte HPcode-Plus-Datei 1170 können an die Zielcomputerplattformen 216, 226 verteilt werden.
  • Die gelinkte HPcode-Plus-Datei 1170 ist eine Verknüpfung mehrerer HPcode-Plus-Objektdateien 1150, 1160. Die/der Archiviereinrichtung/Linker 1154 ist kein Linker. Die/derselbe löst die ungebundenen Verweise zwischen den HPcode-Plus-Objektdateien 1150, 1160, die verkettet sind, nicht. Vielmehr versieht die/der Archiviereinrichtung/Linker 1154 den Computerprogrammierer mit der Annehmlichkeit des Verknüpf ens mehrerer HPcode-Plus-Objektdateien 1150, 1160.
  • Auf den Zielcomputerplattformen 216, 226 werden die HPcode- Plus-Objektdateien 1150, 1160, die zu der gelinkten HPcode- Plus-Datei 1170 verknüpft sind, vor einer Installation (durch die ANDF-Installationseinrichtung 218, 228) und vor einem Linken (durch den ursprünglichen Linker) entnommen. Die/der Archiviereinrichtung/Linker 1154 fügt optional eine OPTN-PROGRAM_FILE-HPcode-Plus-Anweisung ein, die den Namen anzeigt, der dem vollständig begrenzten Programm an dem Installierstandort 216, 226 gegeben werden soll.
  • Die HPcode-Plus-Archivdatei 1158 ist zu der ursprünglichen UNIX-Archivdatei analog, die unter Verwendung des "ar"- Hilfsmittels hergestellt wurde. Die HPcode-Plus-Objektdatei en 1160, die in der HPcode-Plus-Archivdatei abgelegt sind, werden entnommen, installiert und in einer Standardbibliotheksdatei auf der Zielcomputerplattform 216, 226 archiviert. DIE resultierende Bibliotheksdatei wird daraufhin wie gewöhnlich zum Auflösen von Verweisen durch einen ursprünglichen Linker auf dem Installierstandort 216, 226 durchsucht. Alle systemspezifischen Bibliotheken auf der ursprünglichen Computerplattform 206, die von den Computerprogrammen 202 verwendet werden, müssen in HPcode-Plus-Archivdateien übersetzt und den Zielcomputerplattformen 216, 226 bereitgestellt werden.
  • Wie der hochstufige Optimierer 1144 ist die Archiviereinrichtung 1154 bezüglich der hochstufigen Sprache unabhängig.
  • 4. ANDF-Installationseinrichtung
  • Ein hochstufiges Blockdiagramm der ANDF-Installationseinrichtung 218, 228 ist in Fig. 13 dargestellt. Bei dem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung ist die ANDF-Installationseinrichtung 218, 228 aus vier Komponenten, d. h. einem Tupelgenerator 1304, einem niederstufigen Codegenerator 1322, einer Registerzuordnungseinrichtung 1344 und einem Objektdateigenerator 1358, zusammengesetzt.
  • Die HPcode-Plus-Archivdateien 1158 und die gelinkten HPcode-Plus-Dateien 1170 in Fig. 11 werden von dem Herstellungseinrichtungsstandort 206 zu den Installierstandorten 216, 226 verteilt. An den Installierstandorten 216, 226 werden die HPcode-Plus-Objektdateien 1150, 1160 entnommen. Diese Entnahme kann durch eine zusätzliche ANDF-Installationseinrichtungskomponente (nicht gezeigt in Fig. 13) oder unabhängig von der ANDF-Installationseinrichtung 218, 228 durch ein Standardhilfsmittel, wie z. B. dem UNIX-Hilfsmittel "ar", durchgeführt werden.
  • Alternativ können die HPcode-Plus-Objektdateien 1150, 1160 von dem Herstellungseinrichtungsstandort 206 zu den Installierstandorten 216, 226 verteilt werden.
  • Bei einem alternativen Ausführungsbeispiel der vorliegenden Erfindung ist die ANDF-Installationseinrichtung 218, 228 aus sechs Komponenten, und zwar dem Tupelgenerator 1304, dem niederstufigen Codegenerator 1322, einem niederstufigen Optimierer 1334, der Registerzuordnungseinrichtung 1344, einem maschinenspezifischen Optimierer 1352 und dem Objektdateigenerator 1358 zusammengesetzt.
  • Die Beschreibungen des Tupelgenerators 1304, des niederstufigen Codegenerators 1322, des niederstufigen Optmierers 1334, der Registerzuordnungseinrichtung 1344, des maschinenspezifischen Optimierers 1352 und des Objektdateigenerators 1358 sind in den folgenden Abschnitten dargestellt.
  • DIE tatsächliche Implementierung dieser ANDF-Installationskomponenten hängt von der speziellen Architektur jeder Zielcomputerplattform 216, 226 ab. Daher wurden die folgenden Beschreibungen auf einer hohen Ebene geschirieben, derart, daß dieselben als Leitfaden für eine Implementierung auf einer Vielzahl von Zielcomputerplattformen 216, 226 nützlich wären.
  • 4.1. Tupel-Generator
  • Der Tupelgenerator 1304 liest die HPcode-Plus-Anweisungen von der HPcode-Plus-Objektdatei 1150, 1160. Der Tupelgenerator 1304 übersetzt die HPcode-Plus-Anweisungen, welche auf der virtuellen HPcode-Plus-Maschine arbeiten, in eine lineare Liste von maschinenunabhängigen Quadrupeln 1318.
  • Die HPcode-Plus-Anweisungen heben ihre Operanden von dem Ausdrucksstapel ab und legen ihre Ergebnisse auf demselben ab. Folglich sind die HPcode-Plus-Anweisungen stapelbaslerende Anweisungen.
  • Der primäre Unterschied zwischen HPcode-Plus-Anweisungen und den Quadrupeln 1318 besteht darin, daß die impliziten Operanden der stapelbasierenden HPcode-Plus-Anweisungen explizit als Operanden der Quadrupel 1318 ausgedrückt werden.
  • In ihrer einfachsten Form weisen die Quadrupel 1318 das folgende Format auf:
  • (opcode) < src1> < src2> < tgt>
  • Im allgemeinen spezifiziert (opcode) einen Nicht-SYM-HPcode-Plus-opcode. < src1> , < src2> und < tgt> spezifizieren die Operanden des Quadrupeis. Insbesondere spezifizieren < src1> und < src2> Quellenoperanden, wobei < tgt> einen Zieloperanden spezifiziert.
  • Die Interpretation der Quadrupeloperanden hängt von dem Wert von (opcode) ab. Beispielsweise weist ein UJP-Quadrupel keine Quellenoperanden auf, wobei der Zieloperand die Etikette ist, die die Verzweigungsbestimmung identifiziert. Ferner übersetzen einige HPcode-Plus-Anweisungen nicht in Quadrupel (z. B. DEL), während andere in mehrere Quadrupel übersetzen können (z. B. MCAL).
  • Um HPcode-Plus-Anweisungen in die Quadrupel zu übersetzen, bildet der Tupelgenerator 1304 den Ausdrucksstapel nach. Jede HPcode-Plus-Anweisung legt Werte auf dem Ausdrucksstapel ab, oder hebt dieselben ab. Der Tupelgenerator 1304 bestimmt den Wert der Quadrupeloperanden durch Identifizieren dieser Ausdrucksstapelelemente, auf welche durch die fragliche HPcode-Plus-Anweisung verwiesen werden würde.
  • Zusätzlich zu einer Quadrupelerzeugung baut der Tupelgenerator 1304 eine Symboltabelle 1312 und eine Typtabelle 1306 auf. Der Tupelgenerator trägt während des Verarbeitens von SYM-HPcode-Plus-Anweisungen Gegenstände in diese Tabellen ein.
  • Die Symboltabelle 1312 enthält Eintragungen für Variablen, Funktionsdefinitionen und -Vereinbarungen, formale Funktionsparameter, Konstanten und Makros, die durch SYM-Anweisungen definiert sind, ebenso wie Etiketten, die unter Verwendung der LAB-Anweisung definiert werden. Die Faltung von Konstanten-Ausdrücken wird an diesem Punkt vervollständigt. Das heißt, der Tupelgenerator 1304 bewertet die Konstanten- Ausdrücke (die unter Verwendung der KIND_NEW_ CONST-SYM-Anweisung definiert werden) vor einem Eintragen der Konstanten in die Symboltabelle 1312. Der Tupelgenerator 1304 trägt ferner die temporären Gegenstände in die Symboltabelle 1312 ein, welche durch Operationen auf dem Ausdrucksstapel erzeugt werden.
  • Die Typtabelle 1306 enthält Eintragungen für die verschiedenen Datentyp- und Strukturfeld-SYMs ebenso wie für die vordefinierten Datentypen, die durch HPcode-Plus unterstützt werden. Quadrupeloperanden können durch Zeiger auf die entsprechenden Symboltabelleneintragungen dargestellt werden. Symboltabelleneintragungen verweisen wiederum auf die geeigneten Typtabel lene intragungen.
  • Während des Erzeugens der Quadrupel verwendet der Tupelgenerator 1304 die Symboltabelle 1312, um die Erweiterung der objektähnlichen und funktionsähnlichen Makros (wie es im vorhergehenden beschrieben wurde) zu vervollständigen.
  • Die Symboltabelle 1312 und die Typtabelle 1306 werden durch den niederstufigen Codegenerator 1322 für eine Speicherzu- Ordnung und eine Anweisungsauswahl extensiv verwendet.
  • Durch die Quadrupelerzeugung und die niederstufigen Codeerzeugung auf einer Prozedur durch eine Prozedurbasis kann die ANDF-Installationseinrichtung 218, 228 diese Eintragungen in der Symboltabelle 1312 und der Typtabelle 1306 löschen, die nicht-zugreifbare Bereiche aufweisen. Insbesondere können die Symboltabelleneintragungen für Variablen und Typen, die für eine Funktion lokal sind, entfernt werden, nachdem ein Code für diese Funktion erzeugt worden ist.
  • 4.2. Niederstufiger Codegenerator
  • Der niederstufige Codegenerator 1322 wird aufgerufen, nachdem die Quadrupel 1318 für jede HPcode-Plus-Anweisung in der HPcode-Plus-Objektdatei 1150, 1160 erzeugt wurden. Derselbe empfängt die Quadrupel 1318 als Eingabe und erzeugt eine niederstufige Compilerzwischendarstellung 1338 (die im nachfolgenden als die niederstufige CIR (CIR = compiler intermediate representation = Kompilerzwischendarstellung) bezeichnet wird)
  • Die niederstufige CIR 1338 ist zu der Compilerzwischendarstellung 212 analog, die durch den Codegenerator 1130 erzeugt und in der HPcode-Plus-Objektdatei 1160 gespeichert wurde. Die niederstufige CIR 1338 ist jedoch nicht architekturneutral. Stattdessen ist die niederstufige CIR 1138 von der speziellen Architektur der Zielcomputerplattform 216, 226 abhängig.
  • Insbesondere übersetzt der niederstufige Codegenerator 1322 die maschinenunabhängigen Quadrupel 1318 in eine maschinenspezifische Compilerzwischendarstellung 1338. Als Teil dieses Übersetzungsverfahrens führt der niederstufige Codegenerator 1322 die folgenden Aufgaben durch.
  • 4.2.1. Anweisungsauswahl
  • Der niederstufige Codegenerator 1322 wählt eine Sequenz von Anweisungen aus dem Anweisungssatz der Zielcomputerplattform aus, um jedes Quadrupel 1318 darzustellen.
  • Während des Auswählens der Anweisungen betrachtet der niederstufige Codegenerator eine Anzahl von Faktoren, wie z. B. die Zuordnungsbeschränkungen der Zielcomputerplattform 216, 226 und das erwünschte Ausnahmehandhabungsverhalten. Die tatsächliche Konfiguration der Zielcomputerplattform 216, 226 beeinflußt ferner eine Anweisungsauswahl. Dies trifft insbesondere zu, wenn mit unterschiedlichen Implementierungen einer einzigen Architektur, wie z. B. der Motorola MC680xx-Familie, umgegangen wird.
  • Der niederstufige Codegenerator 1322 verwendet eine Maschinenkonfigurationsdatei 1328, um dieses Problem zu lösen. Die genauen Inhalte dieser Datei sind architekturspezifisch und umfassen Registerdateigrößen, eine Coprozessorverfügbarkeit und Anweisungszykluszeiten.
  • Der niederstufige Codegenerator 1322 muß den Zielmaschinenanweisungssatz effektiv verwenden, um eine gute Codequalität sicherzustellen. Architekturen von Computern mit reduziertem Anweisungssatz (RISC; RISC = Reduced Instruction Set Computer = Computer mit reduziertem Anweisungssatz) erfordern kürzere Anweisungssequenzen für eine bessere Codequalität. Umgekehrt müssen für CISC-Computerplattformen, bei denen Anweisungen unterschiedliche zykluszeiten aufweisen, kurze Anweisungssequenzen nicht unbedingt den effektivsten Code erzeugen. Somit ist das Erzeugen von optimalen Codesequenzen für eine beliebige Architektur eine komplizierte Aufgabe, welche im hohen Maße von den verwendeten Operanden abhängt. Somit kann der niederstufige Codegenerator 1322 einen tabellenbetriebenen Lösungsansatz verwenden.
  • 4.2.2. Speicherzuordnung
  • Mit der HPcode-Plus-Kompilerzwischensprache wird eine Speicherzuordnung durch die ANDF-Installationseinrichtung 218, 228, und nicht durch die ANDF-Herstellungseinrichtung 208 durchgeführt. Insbesondere führt der niederstufige Codegenerator 1322 der ANDF-Installationseinrichtung 218, 228 die Speicherzuordnung durch.
  • Der niederstufige Codegenerator 1322 verwendet die Symboltabelle 1312 und die Typtabelle 1306, um Datenobjekte an den physischen Zielcomputerspeicher zu binden. Insbesondere bindet der niederstufige Codegenerator 1322 automatisch Variablen (die unter Verwendung von DVAR-HPcode-Plus-SYM-Anweisungen definiert werden) an spezifische Positionen auf dem gegenwärtigen Aktivierungsrahmen (d. h. Stapelzeiger-bezogene Versätze). Ebenfalls sind private globale und statische lokale Variablen an spezifische Positionen in dem globalen Datenbereich gebunden.
  • Eine implizite Voraussetzung für eine Speicherzuordnung ist die Abbildung der vordefinierten HPcode-Plus-Datentypen zu den Zielcomputerplattformdatentypen. Wenn Variablen in einen Speicher ausgelegt werden, muß der niederstufige Codegenerator 1322 die Zuordnungsbeschränkungen der Zielcomputerplattform für die ursprünglichen Datentypen betrachten.
  • Beispielsweise kann auf einigen Computerplattformen der niederstufige Codegenerator 1322 erforderlich sein, um eine TYPE_LONGREAL-Variable (die als Doppeltwort-Gleitkommobjekt dargestellt ist) auf einer Doppeltwort-Grenze auszurichten.
  • Zusätzlich muß der niederstufige Codegenerator 1322 die Packungsattribute, die mit KIND_STRUCT-Variablen spezifiziert sind, betrachten, da dies die Art und Weise bestimmen könnte, mit welcher die Struktur und Felder in einen Speicher ausgelegt werden.
  • Der niederstufige Codegenerator 1322 muß ferner Zeichenwerte zu Zeichenkonstanten in der HPcode-Plus-Objektdatei 1150, 1160 zuweisen. Die Zeichenwerte sind von einem Ausführungszeichensatz des Installierstandortes 216, 226. Beispielsweise sei angenommen, daß der niederstufige Codegenerator 1322 die Zeichenkonstante Z'101 in der HPcode-Plus-Objektdatei 1150, 1160 lokalisiert. Z zeigt den Ausführungszeichensatz an, und 101 identifiziert ein Zeichen in dem Z-Ausführungszeichensatz. Der niederstufige Codegenerator 1322 tauscht daraufhin den Wert für das Zeichen 101 in dem Z-Zeichensatz durch das Auftreten von Z'101 in dem HPcode-Plus-Objektfeld 1150, 1160 aus.
  • 4.2.3. Symbol-Debug-Unterstützung
  • Falls die Symbol-Debug-Option (über die OPTN-HPcode-Plus-Anweisung) spezifiziert ist, dann schreibt der niederstufige Codegenerator 1322 zusätzliche Informationen zu der niederstufigen CIR 1338. Diese Informationen werden nachfolgend durch den Objektdateigenerator 1358 zu einer Objektdatei 1362 geschrieben. Die Informationen werden dann von dem Symbol-Debugger der ursprünglichen Computerplattform verwendet.
  • Die exakte Beschaffenheit und das exakte Format dieser Informationen sind von den Anforderungen des ursprünglichen Symbol-Debuggers abhängig. Im allgemeinen würden die Informationen die in der Symboltabelle 1312 und der Typtabelle 1306 enthaltenen Informationen umfassen.
  • 4.2.4. Optimierungsunterstützung
  • Der niederstufige Codegenerator 1322 kann eine Unterstützung für die nachfolgenden Optimierungs- und Registerzuordnungsphasen liefern. Beispielsweise kann der niederstufige Codegenerator 1322 entweder eine begrenzte Zwischenprozedurdatenflußanalyse oder Prozeduraneinanderreihung durchführen.
  • 4.2.5. Objektdateiverwaltung
  • Der niederstufige Codegenerator 1322 führt ferner Objektdateiverwaltungsaufgaben durch. Diese Aufgaben können mit dem Objektdateigenerator 1358 geteilt werden.
  • Insbesondere veranlaßt der niederstufige Codegenerator 1322 das Importieren und Exportieren von globalen Variablen und Funktionen. Der niederstufige Codegenerator 1322 erzeugt Verschiebungsanforderungen, um Symbol-Verweise auf importierte globale Variablen und Funktionen für den ursprüngli chen Linker zu identifizieren. Ferner identifiziert der niederstufige Codegenerator 1322 die exportierten globalen Variablen und Funktionen für den ursprünglichen Linker, derart, daß Verweise in anderen Kompilierungseinheiten aufgelöst werden können.
  • Der niederstufige Codegenerator 1322 organisiert und identifiziert Datenbereiche, die einem nicht-initialisierten globalen Speicher (BSS), einem initialisierten globalen Speicher und einem Literalspeicher entsprechen. Um dies zu tun, verarbeitet der niederstufige Codegenerator 1322 HPcode-Plus-INIT-Anweisungen ebenso wie SVAR-Symboltabelleneintragungen.
  • Der niederstufige Codegenerator 1322 verarbeitet alle anderen vermischten HPcode-Plus-Optionen, die spezifiziert sind. Beispiele von spezifizierten Optionen, die die OPTN-HPcode- Plus-Anweisung verwenden, umfassen:
  • ASSEMBLER FILE (= Assemblerdatei)
  • COMPILATION (= Kompilierung)
  • COPYRIGHT
  • USER VERSION (= Anwenderversion)
  • INIT
  • 4.3. Niederstufiger Optimierer
  • Der niederstufige Optimierer 1334 führt auf der niederstufigen Kompilerzwischendarstellung 1338, die durch den niederstufigen Codegenerator 1322 erzeugt wird, niederstufige Optimierungen durch. Idealerweise umfassen die Optimierungen, die durch den niederstufigen Optimierer 1334 durchgeführt werden, diese maschinenunabhängigen Optimierungen nicht, die von dem hochstufigen Optimierer 1144 der ANDF-Herstellungs einrichtung 208 durchgeführt werden könnten. Stattdessen führt der niederstufige Optimierer 1334 geeignete (möglicherweise architekturspezifische) Vorregisterzuordnungsoptimierungen durch.
  • 4.4. Registerzuordnungseinrichtung
  • Die Registerzuordnungseinrichtung 1344 empfängt die optimierte niederstufige CIR 1338 als Eingabe und erzeugt Maschinenanweisungen 1348.
  • Die Registerzuordnungseinrichtung 1344 bildet die Registeranforderungen, die in der niederstufigen Kompilerzwischendarstellung 1338 ausgedrückt werden, in den Registersatz der Zielcomputerplattform 216, 226 ab. Für die meisten Computerarchitekturen beeinflußt eine effiziente Registerzüordnung das Lauf zeitverhalten des erzeugten Codes dramatisch. Die Registerzuordnungseinrichtung 1344 kann unter Verwendung prioritätsbasierender Graphfärbungstechniken implementiert werden.
  • 4.5. Maschinenspezifischer Optimierer
  • Der maschinenspezifische Optimierer 1352 führt alle Nachregisterzuordnungsoptimierungen durch, wie z. B. Schlüssellochoptimierungen (welche die speziellen Merkmale von Computerplattformen bewerten) und eine Anweisungsplanung.
  • 4.6. Objektdateigenerator
  • Der Objektdateigenerator 1358 empfängt die Maschinenanweisungen 1348 als Eingabe. Der Objektdateigenerator 1358 erzeugt und speichert einen Objektcode in einer Objektdatei 1362. Der Objektcode wird in die präzisen Bitmuster gepackt, die von der darunterliegenden Hardware erwartet werden.
  • Der Objektdateigenerator 1358 schreibt gemäß dem Format, das von dem ursprünglichen Linker und der ursprünglichen Ladeeinrichtung erwartet wird, weitere erforderliche Informationen zu der Objektdatei 1362. Diese könnten Informationen einer Symboltabelle 1312 und Typtabelle 1306, Verschiebungsinformationen und Objektdateiverwaltungsinformationen umfassen.
  • Die Objektdatei 1362, die durch den Objektdateigenerator 1358 erzeugt wird, wird daraufhin (unter Verwendung des ursprünglichen Zielcomputerplattformlinkers, der in Fig. 13 nicht gezeigt ist) mit anderen Objektdateien und Systembibliotheken gelinkt, um ein ausführbares Programm (nicht gezeigt in Fig. 13) zu erzeugen.
  • Es ist zu beachten, daß das bevorzugte Ausführungsbeispiel der im vorhergehenden beschriebenen ANDF-Installationseinrichtung 218, 228 auf Register-basierende heterogene Computerplattformen gerichtet ist. Wie es für einen üblichen Fachmann offensichtlich ist, können die Verbesserungen der vorliegenden Erfindung, wie es im vorhergehenden beschrieben wurde, auch auf Stapel-basierende heterogene Computerplattformen angewendet werden. Beispielsweise kann eine ANDF-Installationseinrichtung 218, 228 für Stapel-basierende heterogene Computerplattformen lediglich den Codegenerator 1322 und den Objektdateigenerator 1358 enthalten. Der Codegenerator 1322 würde die HPcode-Plus-Objektdatei direkt empfangen, um Maschinenanweisungen zu erzeugen. Der Objektdateigenerator 1358 würde die Maschinenanweisungen empfangen, um einen Objektcode zu erzeugen.

Claims (18)

1. Ein Herstellungseinrichtungssystem (208), das für eine Verwendung mit einem maschinenunabhängigen Computerprogramm (202) angepaßt ist, das maschinenabhängige Standardkopfdateien verwenden kann, zum Übersetzen des maschinenunabhängigen Computerprogramms (202) in eine Kompilerzwischendarstellung (212) auf eine maschinenunabhängige Art und Weise gemäß einer Kompilerzwischensprache, derart, daß die Kompilerzwischendarstellung (212) Kompilerzwischenanweisungen von der Kompilerzwischensprache aufweist, und derart, daß die Kompilerzwischendarstellung (212) architekturneutral ist und ein architekturneutrales Verteilungsformat darstellt, wobei das Herstellungseinrichtungssystem (208) durch folgende Merkmale gekennzeichnet ist:
(1) eine Einrichtung (1114) zum Zuweisen von eindeutigen Schlüsselwörter zu Standardtypidentifizierern, objektähnlichen Makroidentifizierern und/oder funktionsähnlichen Makroidentifizierern, welche in den maschinenabhängigen Standardkopfdateien definiert sind und auf welche durch das maschinenunabhängige Computerprogramm (202) verwiesen wird;
(2) eine Einrichtung (1130) zum Übersetzen von Anweisungen, die die Standardtypidentifizierer, die objektähnlichen Makroidentifizierer und/oder funktionsähnliche Makroidentifizierer in dem maschinenunabhängigen Computerprogramm (202) aufweisen, in die Kompilerzwischenanweisungen durch Verwenden der eindeutigen Schlüsseiwörter, um auf die Standardtypidentifizierer, die objektähnlichen Makroidentifizierer und/oder die funktionsähnlichen Makroidentifizierer zu verweisen, derart, daß die maschinenabhängigen Entscheidungen, die die Standardtypidentifizierer, die objektähnlichen Makroidentifizierer und/oder die funktionsähnlichen Makroidentifiz ierer betreffen, nicht durch das Herstellungseinrichtungssystem (208) getroffen werden, wobei die Kompilerzwischenanweisungen einen Teil der Kompilerzwischendarstellung (212) bilden.
2. Das Herstellungseinrichtungssystem (208) gemäß Anspruch 1, das ferner folgende Merkmale aufweist:
(1) eine Einrichtung (1128, 1138) zum Definieren und Vereinbaren von Datentypen, Funktionen und/oder Variablen, die in dem maschinenunabhängigen Computerprogramm (202) enthalten sind, durch Verwenden der Kompilerzwischenanweisungen zum Erzeugen von eindeutigen Symbolidentifizierern und zum Zuweisen derselben zu den Datentypen, den Funktionen und/oder den Variablen, wobei die Kompilerzwischenanweisungen einen Teil der Kompilerzwischendarstellung (212) bilden;
(2) eine Einrichtung (1130) zum Übersetzen von Anweisungen, die die Datentypen, die Funktionen und/oder die Variablen in dem maschinenunabhängigen Computerprogramm (202) aufweisen, in die Kompilerzwischenanweisungen durch Verwenden der eindeutigen Symbolidentifizierer, um auf die Datentypen, die Funktionen und/oder die Variablen zu verweisen, derart, daß die maschinenabhängigen Entscheidungen, die die Anweisungen betreffen, die die Datentypen, die Datenfunktionen und/oder die Variablen aufweisen, nicht durch das Herstellungseinrichtungssystem (208) getroffen werden, wobei die Kompilerzwischenanweisungen einen Teil der Kompilerzwischendarstellung (212) bilden.
3. Das Herstellungseinrichtungssystem (208) gemäß Anspruch 1, das ferner folgende Merkmale aufweist:
(1) eine Einrichtung (1126) zum Übersetzen von konstanten Ausdrücken, die in dem maschinenunabhängigen Computerprogramm (202) enthalten sind, in die Kompilerzwischenanweisungen, ohne die konstanten Ausdrücke zu bewerten, wobei die Kompilerzwischenanweisungen einen Teil der Kompilerzwischendarstellung (212) bilden;
(2) eine Einrichtung (1134) zum Zuweisen von eindeutigen Symbolidentifizierern zu den konstanten Ausdrücken; und
(3) eine Einrichtung (1130) zum Übersetzen von Anweisungen, die die konstanten Ausdrücke in dem maschinenunabhängigen Computerprogramm (202) aufweisen, in die Kompilerzwischenanweisungen durch Verwenden der eindeutigen Symbolidentifizierer, um auf die konstanten Ausdrücke zu verweisen, derart, daß die maschinenabhängigen Entscheidungen&sub1; die die konstanten Ausdrücke betreffen, nicht durch das Herstellungseinrichtungssystem (202) getroffen werden, wobei die Kompilerzwischenanweisungen einen Teil der Kompilerzwischendarstellung (212) bilden.
4. Das Herstellungseinrichtungssystem (208) gemäß Anspruch 1, bei dem das Herstellungseinrichtungssystem (208) ferner eine Umwandlungseinrichtung zum Umwandeln von Operanden in den Ausdrücken in dem maschinenunabhängigen Computerprogramm (202) von einem ersten Datentyp in einen zweiten Datentyp durch Einfügen der Kompilerzwischenanweisungen in die Kompilerzwischendarstellung (212) aufweist, wobei der erste Datentyp und der zweite Datentyp von einem Satz von Datentypen sind, wobei die Umwandlungseinrichtung auf eine maschinenunabhängige Art und Weise arbeitet, derart, daß die maschinenabhängigen Entscheidungen, die die Umwandlung der Operanden betreffen, nicht durch das Herstellungseinrichtungssystem (208) getroffen werden.
5. Das Herstellungseinrichtungssystem (208) gemäß Anspruch 1, das ferner folgende Merkmale aufweist:
(1) eine Einrichtung (1128, 1134, 1138) zum Zuweisen von zweiteiligen Sequenzen zu Zeichenkonstanten in dem maschinenunabhängigen Computerprogramm (202), wobei jede der zweiteiligen Sequenzen folgende Merkmale aufweist:
(a) einen ersten Teil, wobei der erste Teil einen Zeichensatz identifiziert; und
(b) einen zweiten Teil, wobei der zweite Teil ein Zeichen in dem Zeichensatz identifiziert;
(2) eine Einrichtung (1130) zum Übersetzen von Anweisungen, die die Zeichenkonstanten in dem maschinenunabhängigen Computerprogramm (202) aufweisen, in die Kompilerzwischenanweisungen durch Verwenden der zweiteiligen Sequenzen, um auf die Zeichenkonstanten zu verweisen, derart, daß die maschinenabhängigen Entscheidungen, die die Zeichenkonstanten betreffen, nicht durch das Herstellungseinrichtungssystem (208) getroffen werden, wobei die Kompilerzwischenanweisungen einen Teil der Kompilerzwischendarstellung (212) bilden.
6. Ein Herstellungseinrichtungssystem (208) gemäß Anspruch 1, das für eine verwendung mit einem maschinenunabhängigen Computerprogramm (202) angepaßt ist, das maschinenabhängige Standardkopfdateien verwenden kann, wobei das Herstellungseinrichtungssystem (208) folgende Merkmale aufweist:
(1) eine Vorverarbeitungseinrichtung (1114), welche das maschinenunabhängige Computerprogramm (202) in ein erweitertes maschinenunabhängiges Computerprogramm (1118) übersetzt; und
(2) einen Kompiler (1122), welcher das erweiterte maschinenunabhängige Computerprogramm (1118) in eine Kompilerzwischendarstellung (1160) des maschinenunabhängigen Computerprogramms (202) übersetzt;
wobei die Vorverarbeitungseinrichtung (1114) und der Kompiler (1122) auf eine maschinenunabhängige Art und Weise gemäß einer Kompilerzwischensprache arbeiten, derart, daß die Kompilerzwischendarstellung (1160) Anweisungen von der Kompiler-zwischensprache aufweist, und derart, daß das erweiterte maschinenunabhängige Computerprogramm (1118) und die Kompilerzwischendarstellung (1160) maschinenunabhangig sind;
wobei die Kompilerzwischendarstellung (1160) ein architekturneutrales Verteilungsformat ist.
7. Das Herstellungseinrichtungssystem (208) gemäß_Anspruch 6, bei dem die Vorverarbeitungseinrichtung (1114):
(1) Standardtypidentifizierer, objektähnliche Makroidentifizierer und funktionsähnliche Makroidentifizierer lokalisiert, welche in den maschinenabhängigen Standardkopfdateien definiert sind, und auf welche durch das maschinenunabhängige Computerprogramm (202) verwiesen wird;
(2) auf die Kopfdateien (1106) des ersten architekturneutralen Verteilungsformat zugreift, wobei die Kopfdateien (1106) des ersten architekturneutralen Verteilungsformats mit den maschinenabhängigen Standardkopfdateien verwandt sind und objektähnliche Makrodefinitionen und funktionsähnliche Makrodefinitionen aufweisen, welche eindeutige Schlüsselwörter zu den Standardtypidentifizierern, den objektähnlichen Makroidentifiz ierern und den funktionsähnlichen Makroidentifizierern zuweisen, die in den maschinenabhängigen Standardkopfdateien enthalten sind; und
(3) die Standardtypidentifizierer, die objektähnlichen Makroidentifizierer und die funktionsähnlichen Makroidentifizierer, die in dem maschinenunabhängigen Computerprogramm (202) enthalten sind, durch die eindeutigen Schlüsselwörter ersetzt, um das erweiterte maschinenunabhängige Computerprogramm (1118) herzustellen.
8. Das Herstellungseinrichtungssystem (208) gemäß Anspruch 7, bei dem der Kompiler (1122) eine Einrichtung (1130) zum Übersetzen von Anweisungen, die die eindeutigen Schlüsselwörter in dem erweiterten maschinenunabhängigen Computerprogramm (1118) enthalten, in die Anweisungen von der Kompilerzwischensprache durch Verwenden eindeutiger Symbolidentifizierer mit negativen Werten aufweist, um auf die eindeutigen Schlüsselwörter zu verweisen, derart, daß die maschinenabhängigen Entscheidungen, die die Anweisungen betreffen, die die eindeutigen Schlüsselwörter enthalten, nicht durch das Herstellungseinrichtungssystem (208) getroffen werden, wobei die Anweisungen von der Kompilerzwischensprache einen Teil der Kompilerzwischendarstellung (1160) bilden.
9. Das Herstellungseinrichtungssystem (208) gemäß Anspruch 6, bei dem der Kompiler (1122) ferner eine Einrichtung (1126, 1134) zum Erzeugen von anwenderdefinierten Datentypen von vordefinierten Datentypen durch Verwenden von SYM-Anweisungen von der Kompilerzwischensprache zum Erzeugen von eindeutigen Symbolidentifizierern und zum Zuweisen derselben zu den anwenderdefinierten Datentypen aufweist, wobei die SYM-Anweisungen von der Kompilerzwischensprache einen Teil der Kompilerzwischendarstellung (1160) bilden und folgende Syntax aufweisen:
SYM< symid> < sym kind> < sym info>
wobei:
< symid> ein Feld ist, welches einen der eindeutigen Symbolidentifizierer darstellt, und welches einen Gegenstand eindeutig identifiziert;
< sym kind> ein Feld ist, welches Symbolartinformationen enthält, die den Gegenstand beschreiben; und
< sym info> ein Feld ist, welches Symbolinformationen enthält, die den Gegenstand weiter beschreiben;
wobei der Gegenstand einen der anwenderdefinierten Datentypen darstellt.
10. Das Herstellungseinrichtungssystem (208) gemäß_Anspruch 9, bei dem der Kompiler (1122) ferner folgende Merkmale aufweist:
(1) eine Einrichtung zum Lokalisieren von ersten Auftritten von wiederholten Anweisungssequenzen in dem erweiterten maschinenunabhängigen Computerprogramm (1118);
(2) eine Einrichtung (1130) zum Übersetzen der ersten Auftritte der wiederholten Anweisungssequenzen in die Anweisungen von der Kompilerzwischensprache, wobei Makros hergestellt werden, die einen Teil der Kompilerzwischendarstellung (1160) bilden;
(3) eine Einrichtung (1126, 1134) zum Erzeugen von eindeutigen Symbolidentifizierern und zum Zuweisen derselben zu den Makros durch Verwenden der SYM-Anweisungen von der Kompilerzwischensprache, wobei die SYM-Anweisungen von der Kompilerzwischensprache einen Teil der Kompilerzwischendarstellung (1160) bilden, wobei der Gegenstand auf die Makros verweist, und wobei das < sym kind> -Feld einen Wert KIND_MACRO aufweist;
(4) eine Einrichtung zum Lokalisieren aller Auftritte der wiederholten Anweisungssequenzen; und
(5) eine Einrichtung (1130) zum Übersetzen der Auftritte der wiederholten Anweisungssequenzen in die Anweisungen von der Kompilerzwischensprache durch Verwenden der eindeutigen Symbolidentifizierer, um auf die Makros zu verweisen.
11. Das Herstellungseinrichtungssystem (208) gemäß Anspruch 10, bei dem der Kompiler (1122) ferner eine Einrichtung (1126, 1134) zum Erzeugen von eindeutigen Symbolidentifizierern und zum Zuweisen derselben zu Konstanten aufweist, die in dem erweiterten maschinenunabhängigen Computerprogramm (1118) enthalten sind, durch Verwenden der SYM-Anweisungen von der Kompilerzwischensprache, wobei die SYM-Anweisungen von der Kompilerzwischensprache einen Teil der Kompilerzwischendarstellung (1160) bilden, wobei der Gegenstand auf die Konstanten verweist, und wobei das < sym kind> -Feld zumindest die Werte KIND_MEMBER, KIND_OFFSETOF, KIND_SIZEOF, KIND_MAXOF und KIND_CONST aufweisen kann.
12. Das Herstellungseinrichtungssystem (208) gemäß Anspruch 11, bei dem der Kompiler (1122) ferner folgende Merkmale aufweist:
(1) eine Einrichtung (1128, 1138), zum Definieren und Vereinbaren von Funktionen und Variablen, die in dem erweiterten maschinenunabhängigen Computerprogramm (1118) enthalten sind, durch Verwenden der SYM-Anweisungen von der Kompilerzwischensprache zum Erzeugen von eindeutigen Symbolidentifizierern und zum Zuweisen der eindeutigen Symbolidentifizierer zu den Funktionen und den Variablen, wobei die SYM-Anweisungen von der Kompilerzwischensprache einen Teil der Kompilerzwischendarstellung (1160) bilden, wobei der Gegenstand auf die Funktionen und die Variablen verweist, und wobei das < sym kind> -Feld zumindest die Werte KIND_FUNCTION, KIND_FUNC_DCL, KIND_FPARAM, KIND_SVAR und KIND_DVAR aufweisen kann;
(2) eine Einrichtung (1130) zum Übersetzen der Anweisungen, die die Funktionen und die Variablen in dem erweiterten maschinenunabhängigen Computerprogramm (1118) aufweisen, in die Anweisungen von der Kompilerzwischensprache durch Verwenden der eindeutigen Symbolidentifizierer, um auf die Funktionen und die Variablen zu verweisen, derart, daß die maschinenabhängigen Entscheidungen, die die Funktionen und die Variablen betreffen, nicht durch das Herstellungseinrichtungssystem (208) getroffen werden, wobei die Anweisungen von der Kompilerzwischensprache einen Teil der Kompilerzwischendarstellung (1160) bilden.
13. Das Herstellungseinrichtungssystem (208) gemäß Anspruch 12, bei dem der Kompiler (1122) ferner folgende Merkmale aufweist:
(1) eine Einrichtung (1126) zum Übersetzen von konstanten Ausdrücken, bei welchen es nicht garantiert ist, daß dieselben ohne Überlauffalten, die in dem erweiterten maschinenunabhängigen Computerprogramm (1118) enthalten sind, in die Anweisungen von der Kompilerzwischensprache, ohne die konstanten Ausdrücke zu bewerten, wobei die Anweisungen von der Kompilerzwischensprache einen Teil der Kompilerzwischendarstellung (1160) bilden;
(2) eine Einrichtung (1134) zum Erzeugen von eindeutigen Symbolidentifizierern und zum Zuweisen derselben zu den konstanten Ausdrücken durch Verwenden der SYM- Anweisungen von der Kompilerzwischensprache, wobei die SYM-Anweisungen von der Kompilerzwischensprache einen Teil der Kompilerzwischendarstellung (1160) bilden, wobei der Gegenstand auf einen der konstanten Ausdrücke verweist, und wobei das < sym kind> - Feld einen Wert KIND_NEW_CONST aufweist;
(3) eine Einrichtung (1130) zum Übersetzen von Anweisungen, die die konstanten Ausdrücke in dem erweiterten maschinenunabhängigen Computerprogramm (1118) aufweisen, in die Anweisungen von der Kompilerzwischensprache durch Verwenden der eindeutigen Symbolidentifizierer, um auf die konstanten Ausdrücke zu verweisen, derart, daß die maschinenabhängigen Entscheidungen, die die konstanten Ausdrücke betreffen, nicht durch das Herstellungseinrichtungssystem (208) getroffen werden, wobei die Anweisungen von der Kompilerzwischensprache einen Teil der Kompilerzwischendarstellung (1160) bilden.
14. Das Herstellungseinrichtungssystem (208) gemäß Anspruch 6, bei dem der Kompiler (1122) ferner folgende Merkmale aufweist:
(1) eine Einrichtung (1126, 1204) zum Identifizieren von konstanten Werten mit unbestimmten Datentypen in dem erweiterten maschinenunabhängigen Computerprogramm (1118);
(2) eine Einrichtung (1128) zum Speichern von Informationen in der Kompilerzwischendarstellung (1118) bezüglich der konstanten Werte mit den unbestimmten Datentypen durch Verwenden von CLDC-Anweisungen von der Kompilerzwischensprache, derart, daß die maschinenabhängigen Entscheidungen, die die konstanten Werte mit den unbestimmten Datentypen betreffen, nicht durch das Herstellungseinrichtungssystem (208) getroffen werden&sub1; wobei die CLDC-Anweisungen von der Kompilerzwischensprache einen Teil der Kompilerzwischendarstellung (1160) bilden und folgende Syntax aufweisen:
CLDC< flag> < constant value>
Dabei gilt:
< flag> = ein Flag, welches einen Datentypsatz anzeigt, wobei der Datentypsatz einen oder mehrere Datentypen aufweist, wobei der eine oder die mehreren Datentypen sequentiell von einem ersten Datentyp zu einem letzten Datentyp organisiert sind; und
< constant value> = ein Feld, welches gleich einem konstanten Wert mit unbestimmten Datentypen ist.
15. Das Herstellungseinrichtungssystem (208) gemäß Anspruch 6, das ferner für eine Verwendung mit einer ANSI-C-Computerprogrammiersprache angepaßt ist, wobei der Kompiler (1120) ferner eine Einrichtung (1210, 1130) aufweist, um ein integrales Promoten, das für die ANSI-C-Computerprogrammiersprache spezifisch ist, bei Operanden, die in dem erweiterten maschinenunabhängigen Computerprogramm (1118) enthalten sind, durch Verwenden von integralen Umwandlungsanweisungen von der Kompilerzwischensprache durchzuführen, wobei die integralen Umwandlungsanweisungen von der Kompilerzwischensprache einen Teil der Kompilerzwischendarstellung (1160) bilden.
16. Das Herstellungseinrichtungssystem (208) gemäß Anspruch 6, bei dem der Kompiler (1122) ferner eine Einrichtung (1128, 1134, 1138) zum Vorbereiten von zwei Operanden zum Verarbeiten mittels arithmetischer Operationen durch Verwenden einer arithmetischen Umwandlungsanweisung von der Kompilerzwischensprache aufweist, um die zwei Operanden in einen gemeinsamen Datentyp umzuwandeln, wobei die zwei Operanden und die arithmetischen Operationen in dem erweiterten maschinenunabhängigen Computerprogramm (1118) enthalten sind, wobei die arithmetische Umwandlungsanweisung von der Kompilerzwischensprache einen Teil der Kompilerzwischendarstellung (1160) bildet, wobei die arithmetische Umwandlungsanweisung von der Kompilerzwischensprache die zwei Operanden in den gemeinsamen Datentyp durch Verwenden von Umwandlungsregeln umwandelt, die für die ANSI-C-Computerprogrammiersprache spezifisch sind, derart, daß die maschinenabhängigen Entscheidungen, die die zwei Operanden betreffen, nicht durch das Herstellungseinrichtungssystem (208) getroffen werden.
17. Das Herstellungseinrichtungssystem (208) gemäß Anspruch 6, bei dem der Kompiler (1122) ferner folgende Merkmale aufweist:
(1) eine Einrichtung (1128, 1134, 1138) zum Zuweisen von zweiteiligen Sequenzen zu Zeichenkonstanten in dem erweiterten maschinenunabhängigen Computerprogramm (1118), wobei jede der zweiteiligen Sequenzen folgende Merkmale aufweist:
(a) einen ersten Teil, wobei der erste Teil einen Zeichensatz identifiziert; und
(b) einen zweiten Teil, wobei der zweite Teil die Zeichenkonstante in dem Zeichensatz identifiziert;
(2) eine Einrichtung (1130) zum Übersetzen von Anweisungen, die die Zeichenkonstanten in dem erweiterten maschinenunabhängigen Computerprogramm (1118) aufweisen, in die Anweisungen von der Kompilerzwischensprache durch Verwenden der zweiteiligen Sequenzen, um auf die Zeichenkonstanten zu verweisen, derart, daß die maschinenabhängigen Entscheidungen, die die Zeichenkonstanten betreffen, nicht durch das Herstellungseinrichtungssystem (208) getroffen werden, wobei die Anweisungen von der Kompilerzwischensprache einen Teil der Kompilerzwischendarstellung (1160) bilden.
18. Das Herstellungseinrichtungssystem (208) gemäß Anspruch 6, bei dem das Herstellungseinrichtungssystem (208) ferner folgende Merkmale aufweist:
(1) einen hochstufigen Optimierer (1144), welcher die Kompilerzwischendarstellung (1160) optimiert, um eine optimierte Kompilerzwischendarsteliung herzustellen;
(2) einen Archivierer/Linker (1154), welcher die optimierte Kompilerzwischendarstellung archiviert oder dieselbe mit weiteren Kompilerzwischendarstel lungen (1150) linkt, um eine Archivdatei (1158) oder eine gelinkte Datei (1170) herzustellen;
wobei der hochstufige Optimierer (1144) und der Archivierer/Linker (1154) auf eine maschinenunabhängige Art und Weise arbeiten, derart, daß die optimierte Kompilerzwischendarstellung, die Archivdatei (1158) und die gelinkte Datei (1170) maschinenunabhängig sind.
DE69127031T 1990-06-25 1991-06-21 Kompilerzwischensprache verwendender Erzeuger für architekturunabhängiges Vertriebsformat (AUVF) Expired - Fee Related DE69127031T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US07/543,021 US5276881A (en) 1990-06-25 1990-06-25 ANDF producer using the HPcode-Plus compiler intermediate language

Publications (2)

Publication Number Publication Date
DE69127031D1 DE69127031D1 (de) 1997-09-04
DE69127031T2 true DE69127031T2 (de) 1997-11-20

Family

ID=24166266

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69127031T Expired - Fee Related DE69127031T2 (de) 1990-06-25 1991-06-21 Kompilerzwischensprache verwendender Erzeuger für architekturunabhängiges Vertriebsformat (AUVF)

Country Status (3)

Country Link
US (1) US5276881A (de)
EP (1) EP0464525B1 (de)
DE (1) DE69127031T2 (de)

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5280613A (en) * 1990-06-25 1994-01-18 Hewlett-Packard Company ANDF installer using the HPcode-Plus compiler intermediate language
US5339419A (en) * 1990-06-25 1994-08-16 Hewlett-Packard Company ANDF compiler using the HPcode-plus compiler intermediate language
US5659753A (en) * 1991-02-27 1997-08-19 Digital Equipment Corporation Interface for symbol table construction in a multilanguage optimizing compiler
IL100987A (en) * 1991-02-27 1995-10-31 Digital Equipment Corp Method and device for encoding
JP3602857B2 (ja) * 1991-04-23 2004-12-15 株式会社日立製作所 多機種対応型情報処理システム、および、方法
US5826256A (en) * 1991-10-22 1998-10-20 Lucent Technologies Inc. Apparatus and methods for source code discovery
US5515535A (en) * 1991-11-05 1996-05-07 Thinking Machines Corporation System and method for parallel variable optimization
US5666296A (en) * 1991-12-31 1997-09-09 Texas Instruments Incorporated Method and means for translating a data-dependent program to a data flow graph with conditional expression
GB2272085A (en) * 1992-10-30 1994-05-04 Tao Systems Ltd Data processing system and operating system.
JP2765411B2 (ja) * 1992-11-30 1998-06-18 株式会社日立製作所 仮想計算機方式
US5367685A (en) 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
US5386570A (en) * 1993-05-24 1995-01-31 Hewlett-Packard Company Method for a two pass compiler with the saving parse states from first to second pass
US5715460A (en) * 1993-06-14 1998-02-03 International Business Machine Corp. Template based facility for formatting compiler output
US5680557A (en) * 1994-02-16 1997-10-21 The United States Of America As Represented By The Secretary Of The Army Natural computing system
US5999737A (en) * 1994-03-01 1999-12-07 Digital Equipment Corporation Link time optimization via dead code elimination, code motion, code partitioning, code grouping, loop analysis with code motion, loop invariant analysis and active variable to register analysis
CA2226560C (en) * 1994-07-22 2002-07-02 Erik P. Debenedictis Method and apparatus for controlling connected computers without programming
US6131185A (en) * 1994-12-13 2000-10-10 International Business Machines Corporation Method and system for visually debugging on object in an object oriented system
US6078945A (en) * 1995-06-21 2000-06-20 Tao Group Limited Operating system for use with computer networks incorporating two or more data processors linked together for parallel processing and incorporating improved dynamic load-sharing techniques
US5845126A (en) * 1995-12-06 1998-12-01 International Business Machines Corporation Method of, system for, and computer program product for providing inlined nested array constructors using normalized counters
US5794049A (en) * 1996-06-05 1998-08-11 Sun Microsystems, Inc. Computer system and method for executing architecture specific code with reduced run-time memory space requirements
US6186677B1 (en) 1996-08-27 2001-02-13 Compuware Corporation Byte code instrumentation
US5987249A (en) * 1996-08-27 1999-11-16 Numega Technologies IR code instrumentation
US5778233A (en) * 1996-10-11 1998-07-07 International Business Machines Corporation Method and apparatus for enabling global compiler optimizations in the presence of exception handlers within a computer program
JP4027482B2 (ja) * 1997-12-24 2007-12-26 富士通株式会社 暗号復元を行う翻訳装置およびその方法
JP2001043089A (ja) * 1999-07-27 2001-02-16 Victor Co Of Japan Ltd プログラム実行方法
FR2797963B1 (fr) * 1999-08-23 2002-11-29 Trusted Logic Protocole de gestion, procede de verification et de transformation d'un fragment de programme telecharge et systemes correspondants
US7293268B2 (en) * 2000-04-17 2007-11-06 Fujitsu Limited Installation method, activation method, execution apparatus and medium of application program
GB0024312D0 (en) * 2000-10-04 2000-11-15 Advanced Risc Mach Ltd Single instruction multiple data processing
JP2002113675A (ja) * 2000-10-11 2002-04-16 Sony Corp ロボット制御システム並びにロボット制御用ソフトウェアの導入方法
US7065754B1 (en) * 2000-10-31 2006-06-20 Hewlett-Packard Development Company, L.P. Method and apparatus for switching between multiple implementations of a routine
CA2348718A1 (en) * 2001-05-25 2002-11-25 Ibm Canada Limited-Ibm Canada Limitee Compiler with dynamic lexical scanner adapted to accommodate different character sets
US7213240B2 (en) 2001-10-05 2007-05-01 Sun Microsystems, Inc. Platform-independent selective ahead-of-time compilation
US7399590B2 (en) * 2002-02-21 2008-07-15 Asm Scientific, Inc. Recombinase polymerase amplification
US7020870B2 (en) * 2002-05-15 2006-03-28 Sun Microsystems, Inc. Dynamic size for language variables
US7340732B2 (en) * 2003-11-26 2008-03-04 Sun Microsystems, Inc. Updating profile frequency for procedure inlining
US20050289519A1 (en) * 2004-06-24 2005-12-29 Apple Computer, Inc. Fast approximation functions for image processing filters
GB2423382A (en) * 2005-01-27 2006-08-23 Microgen Plc Generating business process programs using a symbolic representation of operators in a graphical interface
US20060212857A1 (en) * 2005-03-21 2006-09-21 Microsoft Corporation Automated process for generating a build of a software application without human intervention
US7669201B2 (en) * 2005-05-02 2010-02-23 Intermec Ip Corp. System and method for common file installation
US7743368B2 (en) * 2005-08-09 2010-06-22 Hewlett-Packard Development Company, L.P. Method and apparatus for providing class hierarchy information for function devirtualization
US8863148B1 (en) * 2007-01-09 2014-10-14 Marvell International Ltd. Small debug print
US8281296B2 (en) * 2008-08-12 2012-10-02 Oracle America, Inc. Cross-ISA inlining in a system virtual machine
US8874928B2 (en) * 2008-10-31 2014-10-28 Apple Inc. System and method for obfuscating constants in a computer program
US8438534B2 (en) * 2009-12-29 2013-05-07 Microgen Aptitude Limited Transformation of data between hierarchical data formats
US8683431B2 (en) * 2009-12-29 2014-03-25 Microgen Aptitude Limited Applying rules to data
US8549353B2 (en) * 2009-12-29 2013-10-01 Microgen Aptitutde Limited Batch processing error handling modes
US8464229B2 (en) * 2009-12-29 2013-06-11 Microgen Aptitude Limited Creation of form-based software application in a graphical user interface (GUI) environment
US20110161917A1 (en) * 2009-12-29 2011-06-30 Microgen Plc Processing collections of data items
US8732596B2 (en) * 2009-12-29 2014-05-20 Microgen Aptitude Limited Transformation of hierarchical data formats using graphical rules
US8140894B2 (en) 2009-12-29 2012-03-20 Microgen Aptitude Limited Transaction regions in graphical computer-implemented methods of processing data
US20110161371A1 (en) * 2009-12-29 2011-06-30 Microgen Plc Sql generation
US8392473B2 (en) 2010-09-07 2013-03-05 Microgen Aptitude Limited Fast hierarchical enrichment
US8656376B2 (en) * 2011-09-01 2014-02-18 National Tsing Hua University Compiler for providing intrinsic supports for VLIW PAC processors with distributed register files and method thereof
GB2505564B (en) 2013-08-02 2015-01-28 Somnium Technologies Ltd Software development tool
CN112363705B (zh) * 2020-11-10 2023-07-28 中国平安人寿保险股份有限公司 系统包生成方法、装置、计算机设备及存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4672532A (en) * 1982-06-14 1987-06-09 Tektronix, Inc. Software/hardware integration control system
US4667290A (en) * 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
JPS63163930A (ja) * 1986-12-26 1988-07-07 Toshiba Corp アライメント補正方式
US5179703A (en) * 1987-11-17 1993-01-12 International Business Machines Corporation Dynamically adaptive environment for computer programs
US5280613A (en) * 1990-06-25 1994-01-18 Hewlett-Packard Company ANDF installer using the HPcode-Plus compiler intermediate language
US5339419A (en) * 1990-06-25 1994-08-16 Hewlett-Packard Company ANDF compiler using the HPcode-plus compiler intermediate language

Also Published As

Publication number Publication date
DE69127031D1 (de) 1997-09-04
EP0464525A3 (en) 1993-02-03
EP0464525B1 (de) 1997-07-30
EP0464525A2 (de) 1992-01-08
US5276881A (en) 1994-01-04

Similar Documents

Publication Publication Date Title
DE69127031T2 (de) Kompilerzwischensprache verwendender Erzeuger für architekturunabhängiges Vertriebsformat (AUVF)
DE69125755T2 (de) Kompilerzwischensprache verwendender Installierer für architekturunabhängiges Vertriebsformat (AUVF)
US5339419A (en) ANDF compiler using the HPcode-plus compiler intermediate language
US5842204A (en) Method and apparatus for translating source code from one high-level computer language to another
Visser Program transformation with Stratego/XT: Rules, strategies, tools, and systems in Stratego/XT 0.9
US6063133A (en) No preprocessor for embedded SQL in a 3GL
US5875334A (en) System, method, and program for extending a SQL compiler for handling control statements packaged with SQL query statements
US7346897B2 (en) System for translating programming languages
US5230049A (en) Program source code translator
WO1996013784A9 (en) Method and apparatus for tree data structure manipulation and translating source code from one high-level computer language to another
Ganapathi et al. Affix grammar driven code generation
DE19945992A1 (de) Dynamisch optimierender Objektcode-Übersetzer zur Architekturemulation und dynamisches optimierendes Objektcode-Übersetzungsverfahren
US6006031A (en) Method and apparatus for reconciling conflicting translations by factoring and parameterizing differences
Lamb Construction of a peephole optimizer
Ching Program analysis and code generation in an APL/370 compiler
US5404531A (en) Method and apparatus for compiler processing on program related to data transfer and calculation, and method of managing memory
Geissmann Separate compilation in Modula-2 and the structure of the Modula-2 compiler on the personal computer Lilith
Thompson Plan 9 C compilers
Boyland et al. Attributed transformational code generation for dynamic compilers
de Champlain et al. C# 2.0: Practical Guide for Programmers
Willink et al. Object-oriented preprocessor fit for C++
Van Tuyl On evolution of Fortran
Bundgaard An andf based ada 95 compiler system
Newcomer IDL: Past experience and new ideas
Bahler Steps toward a compiler for BLISS-360.

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: HEWLETT-PACKARD CO. (N.D.GES.D.STAATES DELAWARE),

8327 Change in the person/name/address of the patent owner

Owner name: HEWLETT-PACKARD DEVELOPMENT CO., L.P., HOUSTON, TE

8339 Ceased/non-payment of the annual fee