home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 02 / texte / pascomp.0 next >
Encoding:
Text File  |  1994-04-11  |  11.7 KB  |  268 lines

  1.  
  2.                           PASCOMP
  3.  
  4.               PASCAL baut einen Pascal-Compiler!
  5.  
  6. Wollen Sie nun, nach dem wir Ihnen auf wenigen Seiten komprimiert
  7. einen  Einblick  in  das  Übersetzen von Programmiersprachen ver-
  8. schafft haben, ganz genau wissen, wie Ihr Compiler aus Ihren Pro-
  9. grammtexten  eine  für  den  Computer verständliche Angelegenheit
  10. macht?  Was  für eine Arbeit er beim "dolmetschen" zwischen Ihnen
  11. und  Ihrem  Rechner zu leisten hat? Welcher Mittel und Strategien
  12. er  sich dabei bedienen kann, um Sie mit einem "optimalen" Ergeb-
  13. nis zufrieden zu stellen? Dann verfol gen Sie einfach den Bau von
  14. "PASCOMP", unserem Pascal-Compiler, programmiert in Pascal!
  15.  
  16. Bevor  wir aber ab der nächsten Ausgabe ausführlich zur Sache ge-
  17. hen und anfangen, Ihren Pascal-Programmen gegenüber handgreiflich
  18. zu werden, sollen unsere neue Serie und "PASCOMP" ersteinmal vor-
  19. gestellt  werden:  Wie  ist "PASCOMP" entstanden, was kann er und
  20. was kann man mit ihm machen und - weshalb die Serie?
  21.  
  22. Fangen  wir  bei letzterem an! Sicherlich sind Ihnen Begriffe wie
  23. "Einpass-"  bzw. "Zweipass-Compiler", "linkfähig", "optimierend",
  24. "Native-"  und  "P-Code" etc. beim Studium von Tests und Werbean-
  25. zeigen  schon in genügender Zahl untergekommen. Was verbirgt sich
  26. hinter  diesen  Techniken  und  welche Vor- und Nachteile bringen
  27. diese für den Programmierer mit sich?
  28.  
  29. Die  Klärung solcher Fragen ist ein Grund - es gibt aber noch ei-
  30. nen anderen: Die Erlernung von Programmiertechniken, die bei wei-
  31. tem nicht nur in Compilern, sondern vor allen Dingen auch in all-
  32. täglichen  Programmen ihre Verwendung finden. Denn es reicht ein-
  33. fach nicht mehr aus, sich mit Spielen und Joystickübungen schein-
  34. bar einen Einblick in die Computerei zu verschaffen.
  35.  
  36. Gerade  die immer größer werdende Differenz zwischen Hardwareent-
  37. wicklung  und Rückständigkeit der Versorgung der Hardware mit an-
  38. gemessenen Programmen zwingt jeden ernsthaft Interessierten, sich
  39. ständig mit neuen, meist in Fachchinesisch verschlüsselten Veröf-
  40. fentlichungen zu beschäftigen. Um das stundenlange Wühlen in sol-
  41. cher  Literatur zu vermeiden, zieht der "Otto-Normal"-Verbraucher
  42. Fachzeitschriften  zu  Rate,  die ihm oftmals den Einblick in den
  43. gewünschten Bereich ermöglichen.
  44.  
  45. Und  dies  soll  anhand  des Baus von "PASCOMP" geschehen, obwohl
  46. mittlerweile  Pascal-Compiler  für  (fast) jeden Rechner, welcher
  47. Größe  auch  immer,  existieren. Wir werden uns nämlich nicht nur
  48. auf die Beschreibung der in ihm angewanden Verfahren beschränken,
  49. sondern   auch   andere,  vielleicht  elegantere  Vorgehensweisen
  50. aufzeigen.  Hier  erhoffen  wir uns auch ein reges Echo von Ihrer
  51. Seite,  am liebsten in Form von kreativer Kritik, Vorschlägen und
  52. Anregungen zu "PASCOMP"!
  53.  
  54. Und  hier  zur  Vorbereitung  und  Erbauung  die  Aufteilung  der
  55. kompletten   Serie,   die  Sie  stückchenweise  mit  dem  Komplex
  56. Compilerbau vertraut machen wird:
  57.  
  58. - Einführung und Grundlagen zum Compilerbau.
  59.  
  60. - Lexikalische Analyse
  61.  
  62. - Parsing und semantische Analyse
  63.  
  64. - P-Code-Erzeugung
  65.  
  66. - P-Code-Interpreter
  67.  
  68. - Optimierungen
  69.  
  70. - Erweiterungen
  71.  
  72.  
  73.                       Was ist "PASCOMP"
  74.  
  75. Im  Gegensatz  zu  anderen Veröffentlichungen wurde bei "PASCOMP"
  76. keine  Teilmenge der Programmiersprache Pascal, sondern der volle
  77. Sprachumfang  zur  Grundlage  der  Implementierung  gemacht.  Wie
  78. eigentlich  bei den meisten populären Programmi ersprache gibt es
  79. auch    von    Pascal    verschiedene    Dialekte.   Fast   jeder
  80. Compilerhersteller  schafft seinen eigenen, in dem er den Pascal-
  81. Standard  um  nützliche Konzepte erweitert. Probleme treten nicht
  82. auf,  solange  man sich als Anwender mit einem speziellen Dialekt
  83. beschäftigt.  Daß  diese  sich  aber häufen, wenn man es sich zur
  84. Aufgabe  gemacht  hat,  eine  Sprache publik zu machen, die trotz
  85. Standard   eigentlich   nur  aus  Dialekten  besteht,  ist  nicht
  86. verwunderlich.   Die   Leserbriefe   einer  jeden  PASCAL-Ausgabe
  87. dokumentieren   dies  "par  excellence"  (Programm  A  läuft  mit
  88. Compiler  B, aber nicht mit Compiler C oder nur manchmal oder nur
  89. unter den Bedingungen x,y,z).
  90.  
  91. Abhilfe schaffen da zwei mögliche Lösungen:
  92.  
  93. 1.  Es gibt nur eine 'Hochsprache' und keinen Dialekt. Dann tritt
  94. aber  eine  neue  Problemstellung  auf:  Existiert überhaupt eine
  95. effiziente  Implementierung eines Algorithmus ohne Verwendung von
  96. Non-Standards (Graphik, Strings, Systemvariablen ade!).
  97.  
  98. 2.   Wenn  schon  Dialekt,  dann  einen  eigenen,  erweiter-  und
  99. anpassbaren. Und diese Forderung benötigt einen frei zugänglichen
  100. Quellcode des Compilers.
  101.  
  102. Desweiteren   sollen   "PASCOMP"  und  die  von  ihm  übersetzten
  103. Programme  auf  möglichst  vielen Rechnern einsatzfähig sein. Aus
  104. diesem  Grund  wird  unser  Compiler  innerhalb  der  Serie einen
  105. Pseudo-Code  (P-Code)  erzeugen,  der  von einem Interpreter, der
  106. wiederum  in  Standard-Pascal  verfaßt  und somit auch nur irgend
  107. einen   Pascal-Compiler  auf  irgendeinem  Rechner  vorraussetzt,
  108. ausgeführt  wird. Doch wollen wir hier nun nicht weiter der Serie
  109. vorweggreifen,  sondern noch aufzeigen, unter welchen Bedingungen
  110. "PASCOMP" entstanden ist - und mit welchen Wiedrigkeiten dabei zu
  111. kämpfen war.
  112.  
  113.  
  114.                   Wie "PASCOMP" entstand:
  115.  
  116.                 Am Anfang war der gute Wille ....
  117.  
  118. Um  einen  Eindruck von der Entstehung des Compilers zu gewinnen,
  119. sei hier ganz kurz die Geschichte des Pascal-Compilers erzählt :
  120.  
  121. Irgendwann  im  August 1986 stand es fest: "PASCOMP", ein Pascal-
  122. Compiler,  wird  gebaut.  Hilfsmittel:  ein  Atari ST (1 MB), ST-
  123. Pascal von CCD, Programmtools und ein Berg von Compilerliteratur.
  124.  
  125. Wunsch  war es, einen 1-Pass-Pascal-Compiler mit Native-Code- Er-
  126. zeugung zu konstruieren (wie gesagt, das "Fachchinesisch" erklärt
  127. die Serie). Schon sehr bald wurde deutlich, daß diese Zielsetzung
  128. unter  den bestehenden Voraussetzungen (vor allen Dingen die feh-
  129. lende  Zeit  für Portierungen) zu hoch gegriffen war. Das Problem
  130. mußte  irgendwie 'zerteilt' werden. Modularisierung war angesagt.
  131. Um die Code-Erzeugung zu vereinfachen, sollte jetzt auf eine Zwi-
  132. schensprache (P-Code, Pseudo-Code) hin compiliert werden.
  133.  
  134. So  ausgerüstet,  mit  guter  Laune  und  vielen Ideen, wurde die
  135. Implementierung  im  September  1986 gestartet. Die Hardware- und
  136. Softwarekonfiguration  erwies  sich dabei als sehr brauchbar. Die
  137. "turn-around"-Zeiten  (editieren, compilieren, linken, testen und
  138. wieder  editieren)  in  der Entwicklung betrugen selbst beim fast
  139. fertigem  Compiler  (ca.  5000  Pascal-Zeilen)  nicht  wesentlich
  140. länger    als    30   Sekunden.   Dabei   wurde   natürlich   das
  141. Modularisierungskonzept  von  ST  Pascal  verwendet. Langeweile -
  142. oder  das  unstillbare  Bedürfnis  des  Programmierers nach einer
  143. Tasse  Kaffee,  traten  zwischen zwei Übersetzungsvorgängen somit
  144. fast gar nicht auf (mit Ausnahme einiger Krisensituationen!).
  145.  
  146. Nach  etwa  dreimonatiger  Programmiererei und Auseinandersetzung
  147. mit  dem  P-Code  war es Anfang Dezember 1986 endlich soweit, ein
  148. "Programm"  mit  dem  "eigenen"  Compiler zu übersetzen. Reiflich
  149. überlegt  und  allen  'hello world'-Programmen zum Trotz wurde es
  150. eingetippt:
  151.  
  152. program  test;
  153. begin
  154.      writeln('the big brown fox jumps',
  155.              ' over the lazy dog')
  156. end.
  157.  
  158. Abgespeichert,  übersetzt -fertig. Der P-Code stand. Was nun? Ein
  159. Interpreter  für  diesen  Code  mußte  her.  Also  schnell  einen
  160. "zusammengebaut"   (natürlich   nur   einen   für  das  spezielle
  161. Programm!).
  162.  
  163. Eingetippt,  abgespeichert,  übersetzt  - Start. Und siehe da, da
  164. stand's  auf  dem  Monitor:
  165. "the big brown fox jumps over the lazy dog"
  166.  
  167. Die  Begeisterung  über  diesen Erfolg war so groß, daß die gegen
  168. unendlich   strebenden  Systembomben  des  Atari  ST,  die  einen
  169. fürchterlichen    Systemabsturz    am    Ende    des    Programms
  170. signalisierten,  einfach ignoriert wurden. War es doch ein Anfang
  171. gewesen .....
  172.  
  173. Nun  ja,  es  kam  1987.  Neues Jahr, neues Glück. In zahlreichen
  174. Testprogrammen  wurde  der  Compiler  soweit  verbessert,  daß es
  175. durchaus  einmal  vorkam,  daß  ein korrektes Pascalprogramm auch
  176. korrekt  übersetzt  wurde.  Der Ruf nach einem P-Code-Interpreter
  177. oder  einem  P-Code-Transformer wurde laut. Die Entscheidung fiel
  178. zuerst  zugunsten  des  Transformers. Unter Zuhilfenahme von DRI-
  179. Assembler,  Debugger,  Linker  und  STPascalbibliotheken  war  es
  180. relativ  einfach, den P-Code in ein ausführbares 68000er-Programm
  181. zu überführen.
  182.  
  183. Nachteilig  wirkten  sich  jedoch  jetzt  folgende Tatsachen aus:
  184. Wurden  früher  zwei  Schritte bis zum fertigen Programm benötigt
  185. (Übersetzung  und  Interpretation),  so  sah  der  Vorgang  jetzt
  186. folgendermaßen aus:
  187.  
  188. 1.  Übersetzen  des  Programms  (wie gehabt). Ausgabe war eine P-
  189. Code-Folge.
  190.  
  191. 2.  Starten  des P-Code-Transformers. Dieser formte den P-Code in
  192. entsprechenden M-68000-Assembler-Text um.
  193.  
  194. 3. Starten des Assemblers.
  195.  
  196. 4.   Zusammenbinden   des   fertigen   Programms  mit  Hilfe  von
  197. vorgegebenen Standardbibliotheken.
  198.  
  199. Die "turn-around"-Zeiten betrugen selbst bei kleineren Programmen
  200. mehrere  Minuten  -  und  der erzeugte M-68000-Text belegte nicht
  201. selten  bei  50-100  Zeilern  bis zu 20 KB, so daß die auf 660 KB
  202. angelegte  Ram-Disk  (ca.  60 KB frei) regelmäig im Assemblerpass
  203. überlief und ein effizientes Austesten nicht mehr uneingeschränkt
  204. möglich war.
  205.  
  206. Was jetzt?
  207.  
  208. Zwei Lösungen boten sich an:
  209.  
  210. a)  Aus dem P-Code wird direkt linkfähiger Objektcode fabriziert.
  211.    Der  Assemblerpass wird dann überflüssig und die Erzeugung von
  212.    platzverschlingendem  M-68000-Text  wird vermieden. Die "turn-
  213.    around"-Zeiten  würden  sich  erheblich reduzieren. Wurde doch
  214.    die meiste Zeit im Assembler "verbraten"....
  215.  
  216. b) Konstruktion eines kompletten P-Code-Interpreters. Die Vortei-
  217.    le liegen klar auf der Hand:
  218.  
  219. - kürzere "turn-around"-Zeiten
  220.  
  221. - größere Flexibilität gegenüber Veränderungen im Compiler (*)
  222.  
  223. - Maschinenunabhängigkeit (*)
  224.  
  225. - einfache Implementierung (*)
  226.  
  227. -  größere "Absturzsicherheit". Leichte Implementierung von "post
  228.   mortem dumps"
  229.  
  230. und die Nachteile ...
  231.  
  232. - geringere Ausführungsgeschwindigkeit
  233.  
  234. - weniger Speicherplatz.
  235.  
  236. Trotz   der   Nachteile   fiel  die  Entscheidung  zugunsten  des
  237. Interpreters  aus.  Besonders die mit (*) gekennzeichneten Punkte
  238. trugen  entscheidend zur Wahl bei: Ziel des Ganzen soll in erster
  239. Linie  die  Vermittlung  des  Grundwissens  für  den  Bau  eines
  240. Compilers  anhand einer Programmiersprache sein - und nicht deren
  241. supereffiziente Implementierung.
  242.  
  243. Und  dies  ist  der  aktuelle  Stand:  Es gibt also einen Pascal-
  244. Compiler  mit P-Code-Interpreter, programmiert in Standard-Pascal
  245. und  somit  für  jeden  interessant, der zwar schon einen Pascal-
  246. Compiler  hat,  aber  sich  für  dessen  "Innerei"  interessiert.
  247. Natürlich  hat  er  zum gegebenen Zeitpunkt noch seine (kleinen)
  248. Macken (wie könnte es auch anders sein!).
  249.  
  250. Das   eine   Veröffentlichung   der   kompletten  Quelltexte  des
  251. lauffähigen  Compilers  innerhalb  einer  Zeitschrift  wenig Sinn
  252. macht,  dürfte Ihnen sicherlich einleuchten. Wer möchte schon ca.
  253. 120  kB  Programmtext  "eintippen".  Innerhalb  der Serie werde n
  254. deshalb  nur die relevanten Teile zur Förderung des Verständisses
  255. der  verbalen  Beschreibung  in  gedruckter  Form erscheinen. Das
  256. gesamte  "Ding"  wird  es dagegen komplett auf der PASCAL-DATABOX
  257. geben, wenn es ernst wird: zum Thema der Codeerzeugung.
  258.  
  259. Aber  auch  dann  wird  der Compiler sicherlich noch den ein oder
  260. anderen   'Bug'  enthalten.  Dann  wird  auch,  wie  gesagt,  die
  261. Leserschaft  aufgerufen  sein,  mit kreativer Kritik, Vorschlägen
  262. und  Anregungen  zum  Themengebiet  Compilerbau sowie zum Pascal-
  263. Compiler "PASCOMP" Stellung zu nehmen.
  264.  
  265. Nach diesem kleinen Vorgeschmack geht's dann in der nächsten Fol-
  266. ge mit dem Thema 'Einführung und Grundlagen zum Compilerbau' los.
  267. (Johannes Velmans/mc)
  268.