Bartels :: Bartels AutoEngineer :: BAE Dokumentation :: User Language Programmierhandbuch :: Programmiersystem :: Konventionen

Bartels User Language - Programmierhandbuch

3.1 Konventionen

Bartels AutoEngineer® Dokumentation

Das Bartels User Language-Programmiersystem besteht aus dem User Language Compiler und dem User Language Interpreter. Der Compiler hat die Aufgabe, User Language-Quellcode in User Language-Maschinencode (Programme oder Libraries) zu übersetzen und nach Bedarf statische Linkprozesse durchzuführen bzw. notwendige Informationen für dynamische Linkprozesse zu generieren. Mit Hilfe des Interpreters werden User Language-Maschinenprogramme geladen, nach Bedarf dynamisch gelinkt, und schließlich ausgeführt bzw. abgearbeitet. Da User Language Compiler und User Language Interpreter zeitlich unabhängig voneinander arbeiten, also in unterschiedlichen Programmen implementiert sind, müssen die nachfolgend beschriebenen Konventionen hinsichtlich des Programmzugriffs eingehalten werden.


3.1.1 Programmspeicherung

Der Compiler legt fehlerfrei übersetzte Programme und Libraries unter ihrem jeweiligen Namen in der Datei ulcprog.vdb im Programmverzeichnis des Bartels AutoEngineer ab. Mit dem Maschinencode wird dabei die Versionsnummer des User Language Compilers sowie der Aufruftyp (eine Kodierung für die zum Programm kompatible Interpreterumgebung) abgelegt. Darüber hinaus werden nach Bedarf auch notwendige Informationen für dynamische (d.h. zur Laufzeit durchzuführende) Linkprozesse abgespeichert. Der Interpreter lädt beim Programmaufruf das entsprechende Programm über seinen Namen aus der Datei ulcprog.vdb des BAE-Programmverzeichnisses. Dabei wird mit Hilfe der User Language-Versionsnummer geprüft, ob das Programm mit einer zum Interpreter kompatiblen Compiler-Version erzeugt wurde (andernfalls bestünde die Gefahr, dass der Interpreter die Programmstruktur gar nicht versteht). Über den Aufruftyp erfolgt die Prüfung der Kompatibilität des Programms zur aktuellen Interpreterumgebung; dies ist notwendig, um sicherzustellen, dass während der Programmausführung keine Index-Variablen-Typen oder Systemfunktionen referenziert werden, die in der aktuellen Interpreterumgebung gar nicht implementiert sind. Während der Programmladephase führt der Interpreter nach Bedarf automatisch die für den Programmlauf notwendigen dynamischen Linkprozesse durch, wobei die einzubindenden Libraries ebenfalls einer Kompatibilitätsprüfung unterzogen werden.


3.1.2 Maschinenarchitektur

Die in der User Language implementierte Maschinenarchitektur entspricht der einer Stackmaschine. Der darin definierte Befehlssatz (Instruction Set) umfasst Ladebefehle (zum Laden von Variablen- oder Konstantenwerten), ALU-Befehle (zur Aktivierung der arithmetisch-logischen Einheit der Maschine), Speicherbefehle (für Zuweisungen), Sprungbefehle (zur Realisierung von Alternativen und Repetitionen), Befehle zum Aufruf und Beendigen von Funktionen, sowie Befehle zur direkten Manipulation des Stacks.

Der Befehlssatz (Instruction Set) dieser Maschine ist in Tabelle 3-1 aufgelistet; die in den Stackspalten eingetragenen Werte geben dabei für jede Instruktion an, wie viele Argumente auf dem Stack erforderlich sind, und wie die Stackgröße durch die Abarbeitung der Instruktion verändert wird.

Tabelle 3-1: User Language Maschinen-Befehlssatz

InstruktionStack-
argumente
Stack-
änderung
Instruktionsbezeichnung
nop 0 0No operation
add 2-1Add
addstr 2-1Add string
and 2-1And
bnot 1 0Binary not
cmpeq 2-1Compare equal
cmpge 2-1Compare greater equal
cmpgt 2-1Compare greater
cmple 2-1Compare less equal
cmplt 2-1Compare less
cmpne 2-1Compare not equal
decr 1 0Decrement
div 2-1Divide
divr 2-1Divide rest
incr 1 0Increment
mul 2-1Multiply
neg 1 0Negate
not 1 0Not
or 2-1Or
shl 2-1Shift left
shr 2-1Shift right
sub 2-1Subtract
xor 2-1Exclusive or
cast t 1 0Cast value
castoiv i 3-2Cast of index variable
getary 2-1Get array element
getidx i 1 1Get index
getidxof i 3-1Get index of
loadas s 1 0Load stack array element
loadav v 1 0Load variable array element
loadchr c 0 1Load character
loaddbl d 0 1Load double
loadint i 0 1Load integer
loadiv v 2-1Load index variable
loadoiv v 4-3Load of index variable
loads s 0 1Load stack
loadsd s 0 1Load stack destructive
loadstr s 0 1Load string
loaduref f 0 1Load user function reference
loadv v 0 1Load variable
loadvd v 0 1Load variable destructive
storeas s 2-2Store stack array element
storeav v 2-2Store variable array element
stores s 1-1Store stack
storev v 1-1Store variable
pop s 0 0Pop stack
popt 1-1Pop top of stack
push s 0 0Push stack
swap s 0 0Swap stack
xchg s 0 0Exchange stack
xchgt 2 0Exchange top of stack
jump p 0 0Jump always
jumpeq p 2-1Jump if stack tops equal
jumpnz p 1-1Jump if stack nonzero
jumpz p 1-1Jump if stack zero
calls f 0 1Call system function
callu f 0 1Call user function
hlt 0 0Halt program
ret 1-1Return (pop optional stack)
stop 0 0Stop function

Bartels :: Bartels AutoEngineer :: BAE Dokumentation :: User Language Programmierhandbuch :: Programmiersystem :: Konventionen

Konventionen
© 1985-2024 Oliver Bartels F+E