Bartels :: Bartels AutoEngineer :: BAE Dokumentation :: BAE Benutzerhandbuch :: Utilities :: ULC - User Language Compiler |
Bartels AutoEngineer® - Benutzerhandbuch7.15 ULC - User Language Compiler |
ulc - Bartels User Language Compiler
ulc [-wcon|-wcoff] [[-S[ource]] srcfile...] [-lib libname...] [-dll libname...] [{-cp|-cl} [dstname...]] [-I[nclude] includepath...] [-D[efine] macroid...] [-O[0|1]] [-e[0|1]] [-w[0|1|2|3|4]] [-t[0|1]] [-l[0|1|2|3|4|5]] [-ld listingdirectory name] [-dp prgname...] [-dl libname...] [-ulp prgfilename] [-ull libfilename] [-log logfilename]
Der User Language Compiler ulc dient dazu, User Language-Quelltext in User Language-Maschinenprogramme bzw. in User Language-Libraries zu übersetzen. User Language-Programme können vom User Language Interpreter ausgeführt werden. User Language-Libraries werden üblicherweise aus häufig benötigten Quelltexten erzeugt. Der Maschinencode von User Language-Libraries kann wahlweise statisch (während der Kompilierung durch den User Language Compiler) oder dynamisch (während der Laufzeit durch den User Language Interpreter) eingebunden werden in anderen Maschinencode (Programme oder Libraries). Der Vorteil des Librarykonzepts besteht darin, dass häufig benötigte Quelltexte nur einmal der zeitaufwändigen Kompilierung unterzogen werden müssen; anschließend kann der entsprechende Maschinencode über die sehr viel schnelleren Linkprozesse referenziert werden.
Die Kommandozeilenoptionen des
User Language Compilers bestehen aus einem Bindestrich
(-
) oder einem Schrägstrich
(/
) gefolgt von der Optionsspezifikation. Optionspezifikationen, die nur aus einem Buchstaben und der wahlweisen Angabe einer numerischen Modus- oder Schalterangabe bestehen, bezeichnet man häufig als Switches oder Flags. Diese speziellen Optionen können wahlweise gruppiert werden wie z.B. in
/l2Ow3
oder
-O1w3l2
, wo jeweils der Modus 2 für die Listingausgabe selektiert, der Optimierer aktiviert und der Warning Severity Level auf 3 gesetzt werden.
Mit Hilfe dieser Option kann die Berücksichtigung von Wildcards bei der Spezifikation von Datei- und Elementnamen aktiviert (Option
-wcon; Default) bzw. deaktiviert (Option
-wcoff) werden. Ist die Wildcarderkennung aktiviert, dann erlangen die Zeichen
?
und
*
Sonderbedeutung bei der Spezifikation von Datei- und Elementnamen;
?
ist dann Platzhalter für ein beliebiges Zeichen,
*
ist dann Platzhalter für eine beliebige Anzahl beliebiger Zeichen. Die Deaktivierung der Wildcarderkennung ist notwendig, um die Bearbeitung von Programmnamen wie z.B.
scm_? oder
ged_* zu ermöglichen.
Mit dieser Option werden die Namen der zu übersetzenden Quelltextdateien spezifiziert. Die Dateinamen dürfen dabei Verzeichnispfade enthalten, d.h. die Quelltextdateien müssen nicht notgedrungen im aktuellen Verzeichnis abgelegt sein. Bei der Auswertung von Dateinamen werden Wildcards berücksichtigt, sofern die Wildcarderkennung mit der Option
-wcon (siehe oben) aktiviert ist. Dateinamen können wahlweise mit oder ohne Namenserweiterung spezifiziert werden. Wird die Namenserweiterung weggelassen, dann für der Compiler automatisch die Extension
.ulc
an die entsprechenden Dateinamen an. Quelltextdateinamen mit anderen Namenserweiterungen der müssen also mit ihrer Extension spezifiziert werden. Damit ist es dann allerdings auch möglich, z.B.
User Language-Libraries aus Includedateien mit der Extension
.ulh
zu erzeugen. Der Type des zu erzeugenden Maschinencodes wird mit den Optionen
-cp (für
User Language-Programme; siehe unten) bzw.
-cl (für
User Language-Libraries) festgelegt. Der Elementname des erzeugten Maschinencodes ergibt sich aus dem Quelltextdateinamen, wobei der Verzeichnispfad und die Dateinamenserweiterung weggelassen werden. Ein von dieser Konvention abweichender Name für den Maschinencode kann mit den Optionen
-cp bzw.
-cl (siehe unten) spezifiziert werden. Das Schlüsselwort
-Source bzw.
-S ist bei der Spezifikation von Quelltextdateinamen nur dann erforderlich, wenn sich sonst Mehrdeutigkeiten bei der Auswertung der Kommandozeile ergeben könnten. Dies ist z.B. dann nicht der Fall, wenn die Quelltextdateinamen die ersten Namensargumente im Compileraufruf darstellen. Mit Hilfe der Schlüsselworte
-Source bzw.
-S können andererseits jedoch an beliebigen Stellen in der Kommandozeile Quelltextdateien spezifiziert. Ist weder die Option
-dp noch die Option
-dl (siehe unten) spezifiziert, dann erwartet der
User Language Compiler die Angabe von zumindest einer Quelltextdatei.
Die Static Link Option
-lib erwartet den Namen einer oder mehrerer
User Language-Libraries sowie die Spezifikation von zumindest einer Quellcodedatei (siehe oben, Option
-Source). Die mit
-lib angeforderten Libraries müssen in kompilierter Form in der Datei
ulcprog.vdb
im BAE-Programmverzeichnis verfügbar sein. Der im
User Language Compiler integrierte Linker bindet den Maschinencode der angeforderten Libraries in den Maschinencode der zu übersetzenden Quelltextdateien ein.
Die Dynamic Link Option
-lib erwartet den Namen einer oder mehrerer
User Language-Libraries sowie die Spezifikation von zumindest einer Quellcodedatei (siehe oben, Option
-Source). Die mit
-dll angeforderten Libraries müssen in kompilierter Form in der Datei
ulcprog.vdb
im BAE-Programmverzeichnis verfügbar sein. Der im
User Language Compiler integrierte Linker erzeugt die für den
User Language Interpreter notwendigen Informationen zur Laufzeiteinbindung der angeforderten Libraries in den Maschinencode der zu übersetzenden Quelltextdateien.
Mit dieser Option wird der Typ des zu erzeugenden Maschinencodes festgelegt. Der
User Language Compiler kann sowohl
User Language-Programme als auch
User Language-Libraries generieren. Wenn weder die Option
-cp noch die Option
-cl angegeben ist, dann erzeugt der Compiler
User Language-Programme. Mit der Option
-cp kann die Generierung von Programmen explizit veranlasst werden, die Option
-cl hingegen veranlasst die Generierung von Libraries; es dürfen nicht beide Optionen gleichzeitig angegeben werden. Der Elementname des zu erzeugenden Maschinencodes ergibt sich standardmäßig aus dem jeweiligen Quellcodedateinamen durch Elimination des Verzeichnispfades und der Namenserweiterung. Abweichend von dieser Konvention können mit den Optionen
-cp und
-cl explizit andere Elementnamen für zu erzeugenden Maschinencode angegeben werden, wobei dann aber nur noch genau eine Quelltextdatei spezifiziert werden darf (siehe oben, Option
-Source). Der generierte Maschinencode wird unter dem spezifizierten Zielelementnamen in der Datei
ulcprog.vdb
im BAE-Programmverzeichnis abgelegt. Wildcards werden bei der Angabe von Zielelementnamen für Maschinencode grundsätzlich nicht berücksichtigt. Die explizite Angabe mehrerer Zielelementnamen dagegen ist zulässig; damit ist es möglich den Maschinencode einer einzelnen Quelltextdatei unter verschiedenen Namen abzulegen, also z.B. aus der Quelltextdatei
bae_st.ulh mit einem einzigen Compileraufruf die Programme
scm_st,
ged_st, usw. zu erzeugen.
Mit der Option
-Include (bzw.
-I) können Alternativpfade für die Suche nach Includedateien spezifiziert werden. Diese Option erwartet zumindest einen Verzeichnispfadnamen als Argument. Stößt der Compiler im Quelltext auf eine
#include
-Anweisung, dann sucht er zunächst im aktuellen Verzeichnis nach der angeforderten Includedatei und dehnt die Suche anschließend auf die mit der Option
-Include angegebenen Verzeichnisse aus, wobei die Verzeichnisse in der Reihenfolge ihrer Spezifikation abgesucht werden.
Mit der Option
-Define (bzw.
-D) können beim Compileraufruf Makros definiert werden. Diese Option erwartet zumindest einen Makronamen als Argument. Die Option
-Define entspricht der
#define
-Anweisung im Quelltext, d.h. die mit dieser option definierten Makros können in den Preprozessoranweisungen
#ifdef
und
#ifndef
zur Steuerung der bedingten Übersetzung ausgewertet werden.
Mit der Option
-O kann der Optimierer des
User Language Compilers aktiviert bzw. deaktiviert werden. Per Default (d.h., wenn diese Option nicht spezifiziert ist) ist der Optimierer deaktiviert. Die Option
-O bzw.
-O1
aktiviert den Optimierer. Mit der Option
-O0
kann der Optimierer explizit deaktiviert werden. Der Optimierer befreit den Maschinencode von Redundanzen, und gestaltet ihn durch Modifikationen effizienter. Optimierter Maschinencode benötigt in der Regel erheblich weniger Festplatten- und Hauptspeicher und kann schneller geladen und abgearbeitet werden. Es wird daher dringend empfohlen, den Optimierer zu aktivieren.
Mit der Option
-e kann der Error Severity Level gesetzt werden. Per default (d.h., wenn diese Option nicht spezifiziert ist) ist der Wert 1 eingestellt. Die Option
-e0
setzt den Error Severity Level auf 0; die Option
-e bzw.
-e1
setzt den Error Severity Level explizit auf 1. Ist der Error Severity Level auf 1 eingestellt, dann versucht der Compiler alle beim Compileraufruf spezifizierten Quelltextdateien zu übersetzen (ungeachtet etwaiger Fehler beim übersetzen einzelner Quelltexte); ein Error Severity Level von 0 hingegen veranlasst den Compiler, den Übersetzungsvorgang bei der ersten fehlerhaften Quelltextdatei abzubrechen.
Mit der Option -w kann der Warning Severity Level auf einen Wert von 0 bis 4 gesetzt werden. Per Default (d.h., wenn diese Option nicht spezifiziert ist) ist der Wert 0 eingestellt. Wird diese Option ohne die explizite Angabe eines Levels angegeben (-w), dann wird der Wert 3 eingestellt. Jede im Compiler definierte Warnmeldung ist einem speziellen Warning Severity Level zugeordnet, wobei höhere Werte unwichtigere Warnungen kennzeichnen. Der Compiler gibt nur die Warnungen aus, deren Warning Severity Level kleiner oder gleich dem mit der Option -w eingestellten Level ist, d.h. mit dieser Option kann die Ausgabe weniger bedeutsamer Warnmeldungen unterdrückt werden.
Mit der Option -t können wahlweise Warnungen mit Bezug auf die Kompilierung von Includedateien unterdrückt werden (Wert 1). Per Default (d.h., wenn diese Option nicht spezifiziert ist bzw. der Optionswert 0 gesetzt ist) werden Warnmeldungen mit Bezug auf alle kompilierten Quellcodedateien ausgegeben. Ist dieser Optionswert auf 1 gesetzt, dann unterdrückt der User Language Compiler die Ausgabe von Warnmeldungen mit Bezug auf die Kompilierung von Includedateien und gibt lediglich die Warnmeldungen mit Bezug auf die "Top-Level"-Quellcodedatei(en) aus. Dies reduziert die Anzahl der Warnmeldungen und erleichtert damit deren Analyse insbesondere dann, wenn mit Standardincludedateien gearbeitet wird, die (eine Vielzahl von) Funktionen und Variablen enthalten, welche nicht in jedem Programm verwendet werden.
Mit der Option
-l kann die Listingausgabe gesteuert werden. Dabei können Listingmode im Bereich von 0 bis 5 spezifiziert werden. Mit dem Listingmodus 0 wird keine Listingausgabe erzeugt, während der Modus 5 die detailliertesten Informationen liefert. Modus 0 ist der Standardwert, d.h. wenn die Option
-l nicht angegeben ist, dann erfolgt auch keine Listingausgabe. Wird diese Option ohne die explizite Angabe des Modus spezifiziert
(-l), dann wird der Modus 5 eingestellt. Der Name der Listingdatei wird aus dem Namen der Quelltextdatei durch Abändern der Dateinamenserweiterung in
.lst
erzeugt. Die Listingdatei wird vom System nicht weiter benötigt, sie ist lediglich zur Auswertung durch den Benutzer bestimmt.
Die Option
-ld gestattet die Spezifikation eines alternativen Verziechnisses für die mit der Option
-l auszugebenden Listindateien. Dies ist insbesondere bei der Verwendung von
make
-Utilities zur automatisierten Compilierung geänderter
User Language-Programme nützlich, um das Quellverzeichnis "sauber" zu halten. Im Verzeichnis
baeulc
wird ein
makefile
bereitgestellt, das die Abhägigkeiten der
User Language-Programme von Includedateien enthält und mit Listingdateien in einem Unterverzeichnis
(lst
) arbeitet.
Mit der Option
-dp können einmal übersetzte
User Language-Programme wieder aus der Datei
ulcprog.vdb
im BAE-Programmverzeichnis gelöscht werden. Diese Option erwartet den Elementnamen zumindest eines Programms als Argument. Bei der Auswertung der Elementnamen werden Wildcards berücksichtigt, sofern die Wildcarderkennung mit der Option
-wcon (siehe oben) aktiviert ist. Beim Versuch, nicht-existente Libraries zu löschen, werden Warnungen ausgegeben. Damit nicht Maschinencode gelöscht werden kann, der unmittelbar zuvor im gleichen Compilerlauf erzeugt wurde, erfolgt das Löschen von Programmen grundsätzlich immer bevor mit der Übersetzung von Quelltexten begonnen wird.
Mit der Option
-dl können einmal übersetzte
User Language-Libraries wieder aus der Datei
ulcprog.vdb
im BAE-Programmverzeichnis gelöscht werden. Diese Option erwartet den Elementnamen zumindest einer Library als Argument. Bei der Auswertung der Elementnamen werden Wildcards berücksichtigt, sofern die Wildcarderkennung mit der Option
-wcon (siehe oben) aktiviert ist. Beim Versuch, nicht-existente Libraries zu löschen, werden Warnungen ausgegeben. Damit nicht Maschinencode gelöscht werden kann, der unmittelbar zuvor im gleichen Compilerlauf erzeugt wurde, erfolgt das Löschen von Libraries grundsätzlich immer bevor mit der Übersetzung von Quelltexten begonnen wird.
Per Default speichert der
User Language Compiler User Language-Programme in der Datei
ulcprog.vdb
im Programmverzeichnis des
Bartels AutoEngineer ab. Mit der Option
-ulp kann hierfür eine andere Datei angegeben werden.
Per Default speichert der
User Language Compiler User Language-Libraries in der Datei
ulcprog.vdb
im Programmverzeichnis des
Bartels AutoEngineer ab. Mit der Option
-ull kann hierfür eine andere Datei angegeben werden.
Der
User Language Compiler gibt alle Meldungen auf die Standardausgabe und gleichzeitig auf eine Reportdatei aus. Die Ausgabe auf die Reportdatei erfolgt, um längere Listen von Meldungen, welche insbesondere bei der Übersetzung mehrerer Quelltextdateien entstehen können, zu sichern. Der Standardname der Reportdatei ist
ulc.log
(im aktuellen Verzeichnis). Mit der option
-log kann ein anderer Dateiname für die Reportdatei angegeben werden.
Kompilieren des in
ulprog.ulc
enthaltenen
User Language-Programms mit Optimierung und Ausgabe von Warnmeldungen; das übersetzte Programm wird unter dem Namen
ulprog
in der Datei
ulcprog.vdb
im BAE-Programmverzeichnis abgelegt:
> ulc ulprog -Ow
Kompilieren des in
ulprog.ulc
enthaltenen User Language-Programms mit Erzeugung einer Listingdatei
(ulprog.lst
); das übersetzte Programm wird unter dem Namen
newprog
in der Datei
ulcprog.vdb
im BAE-Programmverzeichnis abgelegt:
> ulc ulprog -l -cp newprog
Löschen der
User Language-Programme mit Namen
ulprog
und
newprog
sowie der
User Language-Libraries, deren Namen mit
test
beginnen und auf
lib
enden, aus der Datei
ulcprog.vdb
im BAE-Programmverzeichnis:
> ulc -dp ulprog newprog -dl test*lib
Erzeugen der
User Language-Library
libsll
aus der Quelltextdatei
libbae.ulh
(der Optimierer ist aktiviert; ein Listing wird auf die Datei
libbae.lst
ausgegeben):
> ulc libbae.ulh -cl libsll -l2O
Kompilieren aller im aktuellen Verzeichnis enthaltenen Quelltextdateien mit der Extension
.ulc
sowie statisches Linken der generierten Maschinenprogramme mit der
User Language-Library
libsll
(das Makro
USELIB
wird zur Kontrolle der bedingten Übersetzung definiert; der Optimierer ist aktiviert):
> ulc *.ulc -Define USELIB -lib libsll -O
Generieren der User Language-Libraries
libstd
und
stdlib
aus der Quelltextdatei
std.ulh
(der Optimierer ist aktiviert, Warnmeldungen mit Severity Level kleiner oder gleich 2 werden ausgegeben):
> ulc -w2 -O -cl libstd stdlib -Source std.ulh
Generieren der User Language-Library
liblay
aus der Quelltextdatei
\baeulc\lay.ulh
mit dynamischen Linken der Library
libstd
(der Optimierer ist aktiviert, der Warning Severity Level ist auf den Standardwert 3 gesetzt, die Compiler-Meldungen werden auf die Reportdatei
genlib.rep
anstelle
ulc.log
ausgegeben):
> ulc /wO -cl liblay -S \baeulc\lay.ulh -dll libstd -log genlib.rep
Generieren der User Language-Programm
laypcr
und
tracerep
aus den Quelltextdateien
laypcr.old
und
tracerep.ulc
mit dynamischem Linken der Library
liblay
(der Optimierer ist aktiviert):
> ulc laypcr.old /dll liblay /cp -O /S tracerep
ulcprog.vdb
-- BAE-User Language-Datenbank (im BAE-Programmverzeichnis)
userlist, User Language Interpreter, Bartels User Language Programmierhandbuch
Die durch ulc erzeugten Fehlermeldungen sind selbsterklärend.
ulc ist ein Programmierwerkzeug zur Erzeugung von Programmen, die die Manipulation von DDB-Dateiinhalten ebenso wie die Erzeugung von Fertigungsdaten zulassen. Auch eine weit reichende Änderung der Benutzeroberfläche ist durch die mit
ulc erzeugten Programme möglich. Daher sollte jedes mit
ulc erzeugte Programm vor einem produktiven Einsatz in jedem Fall zunächst in einer unkritischen Umgebung (Test-Software-Installation, Test-Job, Arbeitsdateien vorher sichern, ...) einem sorgfältigen Test unterzogen werden. In diesem Zusammenhang muss auch eindringlich auf die Möglichkeit des Missbrauchs durch Dritte (Einspielen zerstörerisch wirkender Programme in Ihr eigenes
ulcprog.vdb
) hingewiesen werden.
Bartels :: Bartels AutoEngineer :: BAE Dokumentation :: BAE Benutzerhandbuch :: Utilities :: ULC - User Language Compiler |
ULC - User Language Compiler
© 1985-2024 Oliver Bartels F+E