PASCAL-S: A Subset and its Implementation

N. Wirth




Abstract. Pascal-S is a subset of the programming language Pascal selected for introductory programming courses. This report describes an implementation that is especially designed to provide comprehensive and transparent error diagnostics and economical service for large numbers of small jobs. The system single, self-contained Pascal program. This machine-independent formulation in a high-level language facilitates its construction and is a prerequisite for easy portability.







Institut fuer Informatik ETH
Clausiusstrasse 55
CH-8006 Zuarich


Contents

  1. Aims and motivation
  2. The language PSACAL-S
  3. The implementation
  4. The interpreter
    1. Storage layout and procedure calls
    2. Control structures
    3. Post mortem dump
  5. The compiler
  6. Machine-dependencies

Apeendices

  1. Syntax diagrams
  2. Procedure dependence diagram
  3. Explanations to error codes


1. Aims and Motivation
1. 目的と動機

Several years ago, the Computer Science Department of ETH Zuerich had started to use the programming language Pascal in its introductory programming courses [2,3]. These courses are taught mainly to engineers, physicists, and mathematicians in their first year. The large number of participants dictates in use of an efficient and economical system; economical with regard to students; learning effort, to computing time, and to storage requirements. The first demand requires a system with comprehensive syntax and run-time error checking and the provision of meaningful, well-explained diagnostics. Machine economy was realised through a combination of a compiler and a sub-batch monitor, the latter alternately invoking compilation and program execution. this scheme requires an absolutely watertight protection against errors in compiled programs and -- of course -- an entirely error free compiler and monitor.
数年前に、 ETH Zuerichの電子計算機科学部は その導入のプログラムするコースの中で プログラミング言語 Pascal を使用し始めました[2、3]。 これらのコースは 主としてエンジニア、物理および数学の学生の1年目で教えられます。 多くの参加者はシステムの効率的、経済的な利用を要求します。 学生に関して経済的です; 時間の計算に、および記憶必要条件に、努力を学習すること。 システムに求められた第1の要求は、 包括的なシンタックスのチェックと 実行時のエラーチェックすること、 意味がよく説明された診断ルーチンを備えることでした。 機械経済は、 コンパイラーおよびサブバッチモニターのコンビネーション、 交互に編集を起動する後者およびプログラム実行によって実現されました。 このスキームは、 コンパイルされたプログラムにおけるエラーからの絶対に防水の保護を要求します、 そして(もちろん)1つの、エラー(完全に)の無料のコンパイラーおよびモニター。

The system developed for this purpose by R. Schild proved to be highly successful, and it turned out to be so economical with respect to computing time that the system's extensive use by about 350 students amounted to less than 0.5 % of the entire computing services provided by the computation center averaged over the entire term, although the student job batch was collected, run, and returned four times per day.
この目的のために R.Schild によって開発されていたシステムは、 高度に成功すると分かりました、 また、それは時間の計算に関して非常に経済的なので、 総計計算センターによって提供される、 計算するサービス全体の0.5%未満までに システムの約350人の学生による広範囲な使用がなったと生産しました、 学生仕事バッチは集められましたが、 全用語の間平均した、走る、また1日当たり返された4回。

Nevertheless, there were also some disadvantages. First of all, there were only four fixed times when jobs were collected ( and sometimes fewer due to machine failures). Then, the student jobs had to be handled separately from all other jobs (separate batching and special job cards to be provided by the operators). these drawbacks and the advent of a separate medium speed batch terminal located in the students program preparation room indicated that a system with different characteristics might be more appropriate. The students' batch terminal allows for self-service. It is therefore highly desirable - if not mandatory - that each student's job be scheduled and run independently of other jobs. Fast turn around can - under the prospect of large numbers of jobs - only be guaranteed, if the jobs use relatively little store. In fact, storage space is at a much higher premium than processor time.
しかしながら、 さらにいくつかの損失がありました。 第一に、仕事が集められた(かつ機械失敗により時々より少数の)時、 4つの定時だけがありました。 その後、学生仕事を、他のすべての仕事 (オペレーターによって提供される個別のbatchingし特別の仕事カード) から別々に扱わなければなりませんでした。 これらの欠点、 および学生プログラム準備室にある 個別のミディアム速度バッチ・ターミナルの到来は、 異なる特性を備えたシステムがより適切かもしれないことを示しました。 学生のバッチ・ターミナルはセルフ・サービスを考慮に入れます。 他の仕事と無関係に各学生の仕事が予定され実行されることは したがって高度に望ましい(義務的でないにしても)。 多くの仕事の見通しの下では、 仕事が比較的小さな店を使用する場合、 早いターンアラウンドが保証することができます。 実際、貯蔵空間は、プロセッサー時間よりはるかに高いプレミアムにあります。

Under these conditions, a compact system is mandatory. Without compromising on the demand for extensive error checking, our interpretive solution appears as most promising, because it allows for a simple compiler and dense code. Program size can be further reduced, if the system is restricted to handling that subset of Pascal, which is actually taught in these introductory courses. Hence, the new system was intentionally designed to process a subset. The resulting reduction of development labor was an additional incentive for this decision.
これらの条件の下では、 コンパクトなシステムが義務的です。 広範囲なエラーチェックの需要について妥協せずに、 それが単純なコンパイラーおよび濃厚なコードを考慮に入れるので、 最も有望なものとして、 私たちの解釈の解決は現われます。 プログラム・サイズはさらにありえます、 システムが取り扱いに制限される場合、 縮小した、それはパスカル (それはこれらの入門コースの中で現実に教えられる) にサブセット化します。 従って、新システムは、 部分集合を処理することを故意に目指しました。 開発労働の生じる縮小はこの決定用の補足誘因でした。

In choosing an interpretive approach, one must be aware of and willing to accept a substantial loss of efficiency in program execution. A factor of 30 compared to reasonably good compiled code is not unusual, and a factor of 20 must be called "very good". Such factors can of curse only be accepted, if the gains expected elsewhere are equally substantial. They can only be compensated, if the execution effort of the compiled program is relatively small, say at least 20 times smaller than job initiation, compiler loading, compilation, and program loading together.
解釈のアプローチを選ぶ際に、 一つは知っているに違いありません、 そしてプログラム実行の効率の本質的な損害を受理するのに自発的。 合理的によいコンパイルされたコードと比較された30の因数は異常ではありません。 また、20の因数は「非常によい」呼ばれるに違いありません。 他のところに期待された収益が等しく本質的な場合、 そのような要因は呪いに単に受理することができます。 コンパイルされたプログラムの実行努力が比較的小さい場合、 それらは単に償うことができます、 言う、仕事開始、コンパイラー積み荷、編集、 およびともにロードするプログラムより20倍小さな

In view of the everyday performance figures of common operating systems, this condition is indeed satisfied for very many problems that can successfully be assigned as programming exercises. The most important single factor is gained by eliminating the need for a relocation loader. This is achieved by directly depositing the compiled code in store. As programs tend to be small, even the demand for storage economy cannot be used as a strong counterargument against this strategy.
共通のオペレーティング・システムの日常の実行図を考慮して、 この条件は、練習のプログラムとして成功裡に割り当てることができる 非常に多くの問題のために確かに満たされます。 最も重要な単一の要因は、再配置ローダーの必要の除去により獲得されます。 これは、店にコンパイルされたコードを直接残すことにより達成されます。 プログラムは小さい傾向があるとともに、 記憶経済の需要さえはこの戦略に対する強い反論として使用することができません。

The system described in this report consists of a compiler and an interpreter for a subset of Pascal called Pascal-S. Chapter 2 defines that subset; it contains a complete syntax specification mirror the structure of the compiler. Chapter 3 provides an overview of the entire system which is described as a single Pascal program. Some figures are provided concerning system size and performance. Chapter 4 explains the architecture of the hypothetical computer that executes compiled Pascal-S programs. Some typical program constructs are listed together with the code generated for them. The principles of operation of the computer become understandable through these sample constructs which at the same time picture the task of translating Pascal-S into this code. Chapter 5 discusses the compiler itself, and it starts out with an explanation of the tables and their structure used to represent the information given in a program's declarations.
この報告書に記述されたシステムは、 パスカル-Sと呼ばれるパスカルの部分集合用のコンパイラー およびインタープリターから成ります。 2章はその部分集合を定義します; それは完全なシンタックス明細を含んでいます、 コンパイラーの構造を映します。 3章は、単一のパスカル・プログラムと評される、全システムの概観を提供します。 いくつかの図はシステム・サイズおよび実行に関して提供されます。 4章は、コンパイルされたパスカル-Sプログラムを実行する 仮説のコンピューターのアーキテクチャーについて説明します。 ある典型的なプログラムは構築します、 それらのために生成されたコードと一緒にリストされます。 コンピューターのオペレーションの法則はなります、 理解し得る、によって、これら、サンプルは構築します、 それはパスカル-Sをこのコードに翻訳するタスクを同時に描写します。 5章はkコンパイラーについて自体議論します。 また、それは、プログラムの宣言で与えられた情報を表わすために 使用されるテーブルおよびそれらの構造の説明で外に始まります。

The explanations are necessarily terse and brief and incomplete. They are intended for people who already have some background on comilers; they are in particular referred to [3], where the principles along which this system is constructed are taught and developed. For all details, the reader is referred to Chapter 6 which is a full listing of the entire system. One may wonder about the value of including a program listing in extenso. But I think it is important and hope it will be useful. The primary value of the language and system Pascal is that it allows to construct large programs that are useful and highly efficient in a form that can be read and communicated. The listing of the Pascal-S system is intended to support this claim. It also proves that compiler and interpreter can be described in a machine-independent, well-structured form that nevertheless is effectively machine translatable. The relative brevity of the program (25 pages) also raises a new aspect of compiler portability; it is entirely possible to transport such a system by hand coding. the effort is at most one of a fe man months, even for a computer where nothing but symbolic assembly code or Fortran are available.
その説明は必ず簡潔で、簡潔で、不完全です。 それらは、共同1マイル走者の上に 既にある背景を持っている人々のために意図されます; それらは、このシステムが構築される法則が教えられ開発されている場合に、 [3]を参照された項目にあります。 すべての詳細には、リーダが6章を参照されます、 どれがありますか、 1つの?A全システムを十分にリストすること一つはするかもしれません、 extensoにリストするプログラムを含んでいる値について思いめぐらすかもしれません。 しかし、私は、それが重要であると思い、それが有用になることを望みます。 言語およびシステム、パスカルの主要な値は、 読まれ通信することができる形式で 有用で、高度に効率的な、大規模なプログラムを構築することを それが可能にするということです。 パスカル-Sシステムのリストは、このクレームを支援するように意図されます。 さらに、それは、しかしながら有効に翻訳可能な機械である機械独立して、 よく組み立てられた形式にコンパイラーとインタープリターについて 記述することができることを証明します。 プログラム(25ページ)の相対的な簡潔さは、 さらにコンパイラー・ポータビリティの新しい様相を上げます; 手コード化によりそのようなシステムを輸送することは完全に可能です。 努力はそうです、高々1、1つの、fe人数か月、記号(だけ)会議コード あるいはフォートランが利用可能なところで、コンピューター用にさえ。


2. The language PASCAL-S


3. The Implementation


3. The Implementation

The Pascal-S system is described as a compiler that translates Pascal-S programs into code for a hypothetical stack computer especially designed for this purpose. This computer is itself defined as an algorithm, called the interpreter of the compiled code. Both compiler and interpreter are described in a largely machine-independent way by using the high-level language Pascal exclusively. In fact, these two parts form a single Pascal program. It is listed in Chapter 6.

The advantages of a description using a high-level language are particularly apparent during the development of a system, but are equally significant, if it has to be transported and adapted to a different computer. In fact, Pascal-S can be implemented immediately on all machines where a full Pascal compiler is available. Of course, the success of such an automatically generated system crucially depeneds on the quality of the tool compiler. The Pascal 6000 - 3.4 compiler used at ETH on the CDC 6400 computer generates high-quality code, and recompiles the entire Pascal-S system in 20 sec.

The disadvantage of interpretive system is its relatively large overhead during program execution. Experience has shown, however, that for small programs the expense for central processor utilization for interpretation is anyway quite small. Some actual figures are given for a few sample programs in Chapter 7. Exercises requiring less than 4 seconds of computer times (costing less than SFr. 2.-) are predominant. Of course, exercises will have to be carefully chosen, particularly in numerical mathematics.


4. The Interpreter


5. The Compilar


6. Machine-dependencies


7. The compiler-interpreter program


APPENDIX A: Syntax Diagrams


APPENDIX B: Procedure Dependence Diagram


APPENDIX C: Explanations to Error Codes


References