
\section{Der Symbol-Dekoder ({\tt m2decsym\/})}

Das Programm {\tt m2decsym} ist f"ur einen speziellen Fall die direkte
Umkehrung des Compilers: Es erzeugt aus einer Symboldatei ein
Definitionsmodul. Dies ist bei Symboldateien m"oglich, da bei
der Compilation keine wesentliche Information verloren gehen
darf. Ganz im Gegensatz dazu l"asst sich aus einer Objektdatei
nur sehr ungenau und mit grossem Aufwand ein Quelltext erzeugen.

\subsection{Aufruf und Bedienung}
\begin{quote}\tt
m2decsym \{? {\cmsltt SymbolFile\/}\}
\end{quote}

Die R"uck"ubersetzung von Symboldateien beschert allerdings auch
einige unvermeidliche Unzul"anglichkeiten, die jedoch haupts"achlich
den verwendeten Stil betreffen.

Importe sind immer qualifiziert. Die Import-Anweisungen behandeln
nur den Modulnamen, nicht die einzelnen Bezeichner. Diese Form ist
in jedem Fall die allgemeinere, da sie beliebige Bezeichner ---
insbesondere gleiche zweier Moduln --- zul"asst.

Zeilenumbr"uche werden grossz"ugig gesetzt. Dies vermeidet "uberlange
Zeilen. Diese k"onnen vor allem in Zeiger- und Feld-Deklarationen
auftreten, in denen keine Typnamen verwendet werden.

\begin{example}
Abschreckendes Beispiel:
\begin{verbatim}
  VAR compilerHorror: POINTER TO ARRAY [0..15] OF
    POINTER TO RECORD h,l: INTEGER END;
\end{verbatim}
\end{example}

Nat"urlich ist die urspr"ungliche Form einer Konstanten-Deklaration
nicht mehr sichtbar. So sind Konstanten der Form
\begin{quote} \tt
CONST const = const1 + const2;
\end{quote}
nur noch als normaler Wert sichtbar. Ebenfalls ist keine Information
dar"-"uber enthalten, ob die Konstante in Dezimaler, Hexadezimaler oder
Octaler Schreibweise deklariert wurde.

Sind keine Parameter-Namen in der Symboldatei vorhanden --- mittels
Compileranweisung "`\verb|$NameChk:=FALSE|"' --- sind die formalen
Parameter mit {\tt par0},
{\tt par1} und so fort angegeben.

Einige gravierende Einschr"ankungen bestehen leider doch:
\begin{itemize}
\item
  Varianten-Records k"onnen nicht richtig abgebildet werden.
  Um dies aber wenigstens "`von Hand"' korrigieren zu k"onnen,
  wird zu jedem Element der Offset vom {\tt RECORD}-Beginn
  als Kommentar angeh"angt.

\item
  Konstanten, deren Wert gr"osser als $2^{31}$ ist, werden immer
  als negative Konstanten dargestellt.
%\item
%  Set-Konstanten sind dann inkorrekt, wenn der Basistyp ein
%  Auf"-z"ah\-lungs\-typ ist.
\end{itemize}

Eine fehlerlose Dekodierung erlaubt, die erzeugte Definition
wieder zu "ubersetzen. Das macht im allgemeinen nat"urlich
keinen Sinn, beweist aber deren Korrektheit.

\subsection{R\protect"uckgabewerte}

\begin{ttscript}{rcImportantNotFound}
\item[rcIllOpt]
  Eine ung"ultige Option wurde "ubergeben.
\item[rcActionErr]
   Bei der Dekodierung ist ein Fehler aufgetreten.
\item[rcMainNotFound]
   Die Symboldatei wurde nicht gefunden.
\end{ttscript}

Zur Verwendung der R"uckgabewerte schlagen Sie unter \ref{RetVal} nach.
