PASCALプログラムの相違点
藤木健士＊

新システムの Sunワークステーション上では SunPASCAL が使用可能であり，プログラミング演習等でこれを用いることができる．ここでは，従来から多く用いられている

TurboPASCALと SunPASCA
L との主な相違点について述べる．

r

1． 鯛 環 境
新システムで提供される環境は TurboP
ASCA
Lのような統合環境ではなく， UNIX上でコマンドを実行することにより，ソースプログラムの作成，コンパイルおよび実行の各々の作業を行うことになる．プログラムの作成は emacs (「基本的な使用法 (1)」を参照）等のエディタを用いて行う．この時， PASCA
L のソースプログラムのファイル名は＊． pあるいは＊． pas でなければならない点に注意しなければならない．

IBM4381や IBM3081からプログラムを移行する場合，ファイル名がこの規則に従うように変更する必要がある．ソースプログラムが完成したらそれをコンパイルすることになるが，コンバイルは次のコマンドを実行することにより行う．ここでは sample.p というソースファイルをコンバイルする例を示す．

rpc sample.p
ソースプログラムがコンパイルされ，ェラーなく終了すると a.
out という実行ファイルが生成される．実行ファイルを a.out 以外の名前で作成したい場合には，—o オプションを用いて次のように入力する．

pc ‑o sample sample.
p＊ 情報科学センター

fuji
ki
@is
ci.k
yutec
h.ac.jp‑ 81‑

九州工業大学・情報科学センター
991.
9
広報特別号 1作成された実行ファイルのプログラムを実行するには，次のようにその実行ファイル名をコマンドとして入力する．

a.
out
実行ファイルプログラムのデバッグにはシンボリックデバッガ dbx を用いることができる．ただしコンパイル時に ‑g オプションをつけて生成した実行ファイルに限る（基本的な使用法 (I)を参照）． dbx の詳しい使用法については Sun のマニュアル 'DebuggingTools' を参照されたい．

2. 言語仕様の相迩点

Turbo‑PASCA
Lは PASCA
L の標準の ISO規格に準拠して作られているわけではない．それに対して， SunPascal は他の言語とのリンクや処理系依存の部分を除いて，標準 PASC

゜A
Lに比較的近い処理系になっている．ここでは，これら 2つの言語処理系の間の言語仕様の主な相違点について述べる．

(1) プログラム文を必ず記述する必要がある．

SunPascal ではプログラム先頭のプログラム文を省略できない．

(2) case文のケースラベルは定数でなければならない

Turbo‑
Pascal では case文のケースラベルは変数でもよいが， SunPascal では定数でなければならない．例えば Turbo‑
Pascal では次のように記述できる．
・1tlttlu ul
ufSSSoererer

e.JKl;=＝＝‑

ii＊i＊＊
325sdance•••••• .••••.•9.
,•••

しかし， SunPascal では下のようにケースラベルを定数で記述する．

九州 I党大学・情報科学センター
広報特別号 1991.9‑ 82 ‑‑O=‑︱.
iii .
＊2＊＊
35ttltluluufSSSo ererer・1e123;

sdance‑I‑••••.• •••••••9.
,

どうしてもケースラベルに変数を用いなければ処理できない場合には， if 文で以下のように記述すれば同じ意味の文を書ける．

nnee;
ihi
*t5*hti*32
nkl
e=‑＝h‑ ： = ‑ ：i‑t :t=itit
. Ju
lf
lu
lf u
̲‑sisisi reeereerssf
1lele・r(3) 識別子は大文字小文字を区別する

SunPascal では変数名や関数名などの識別子で用いる英字の大文字と小文字（例えばIと i) とを同一視しない．また，予約語や事前に宣言された識別子はすべて小文字を使r

わなければならない．例えば，次のプログラムをコンパイルしたとする．

programsamp(input,output);

BEGINwriteln('hel10・)end.
このプログラムのコンパイルは失敗する．これは BEGI
Nが大文字であるために予約語のbegin とみなさずにエラーとなってしまうからである．このため予約語はすべて小文字を‑ 83‑

九州工業大学・情報科学センター
広報特別号 1991.9使用する必要がある．また事前に直言された識別子（直言しなくても使用できる定数，型，変数，手続きおよび関数の識別子）もすべて小文字で宣言または定義されているのでプログラム中で使用するときも小文字を使わなければならない．
またユーザが宣言または定義した識別子も大文字と小文字の区別を行うので注意しなければならない．次に例を示す．

programtest(output);vari:
integer;begin
I:=10end.

4行目で識別子が宣言されていない＇とメッセー

このプログラムをコンパイルすると，＇゜ジが出されコンパイルが失敗する．これは小文字の 'r と大文字の 'I' を区別するので.I' が宣言されていないとみなされるためである．それで上のプログラムの 4行目を 'i:=10' に書き換えるとコンパイルできる．

(4) ファイル入出力きを行ってファイルのオープンを行うと，ファイルの入出力が可能となる．次にその例を示す．

assign(fp,'input.dat');
reset(fp);

ここでは assign手続きでファイル変数 fp にファイル input.dat を割り当て， reset手unPascal では，これを同じ内容を次のように 1行続きでファイルをオープンしている． Sで記述する．

reset(fp,・input.<lat');几州工業大学・情報科学センター
広報特別号 199
1.9‑ 84‑

︒

tu
rbo‑
Pascal ではファイル変数にファイルを割り当て，その後 resetや rew
rite手続rew
rit
e手続きもファイルのファイル変数への割当とオープンの両方の機能をもち，次のように記述する．

rew
rite(fp,・result'}(5) 16進数が使用できないTurbo‑
Pascal では＄ 1E のように 16進定数を使用することができたが， SunPascalでは． 16進定数が使用できない．プログラムを移行する場合には 10進数に書き直す必要rがある．

{6) string 型が使用できない

標準 Pascal では文字列型の変数の定義は次のように記述する．

varname:packedarray(l.
.
14)ofchar;

Turbo‑
Pascal ではこの形式の他に次に示すように string という型を設けてよく使う文字列型を簡単に書けるようになっている．

varrname:
string[14];SunPascal では v
arying という特別な配列型を用いて，これと似た形で文字列の宣言をすることができる．

varn'ame:varying[14)ofc
har:(7) 使用できない演算子がある

SunPascal には shl （右シフト）や shr （左シフト）といったシフト演算が使用できなor （排他的論理和）も使用することができない．しかしこれらは同じ
い．また論理演算 x‑ 85‑

九州工業大学・情報科学センター
広 報 特 別 号 1991.9

動作をする関数を使用できるので，これらの演算子は以下のように書き換えるとよい．

XshrN‑‑‑‑‑‑‑>

rshft(X,N)

YshlM‑‑‑‑‑‑‑>‑‑‑‑‑‑‑>

lshft
(Y.
N)

AxorBxor(A.B)(8) GOT
O文でブロックから飛び出すことができる
turbo‑
Pascal では GOT
O文でプロックから外に制御を移すことができなかったが， SunPascal ではこれが可能である．

(9) 手続き引数、関数引数を用いることができる

turbo‑
Pascal では使用できない標準 P
ascal 仕様の手続き引数および関数引数を S
un
Pascal では使用することができる．

゜(10) ファイルのインクルード
ファイルのインクルードは Turbo‑Pascal では次のように記述する．

{$I filename}

次のように C言語と似た形で記述する．

#include'filena冒・e以上で turbo‑
Pascalと SunPascal の主な違いを述べた．ここでは主なものに関してのみ説明したので，詳細を知りたい場合には SunPascalReferenceManual を参照された
し九州工業大学・情報科学センター
広報特別号 1991.9‑86‑︒

これにより filenameで指定したファイルをこの位置に展開する． SunPascal ではこれを

3. 定数，型，変数，関数および手続きの対応表
urbo‑Pasea以下に標準で提供されている定数，型，変数，関数および手続きに関して TunPascal との対応表を示す．ここでは主なもののみを示す．
1と Sr̀rTurboPascal種類SunPascal

Abs(r)

関数

abs(r)

ArcTan(r)関数arctan(r)Assign(fp,s)

手続きなし， reset および rew
riteがこの機能を持つ

Boolean型

boolean

Byte

升ニ丘
J1なし

Char

型

charChr(i)関数chr(i)Close(fp)

手続き

close(fp)

Concat(s.s.
.
.
) 関数

なし，文字列に関しても＋演算が使用できる．

Copy(s,p,n)関数

substr(s,p,n)Cos(r)

関数

cos(r)

Delete

手続きなし

EOF,EOF(fp)関数

eof,eof(fp)

EOLN,EOLN(fp)

関数

eoln,
eoln(fp)

Exit

手続き

なし

Exp(r)

関数

exp(r)

False

定数falseFlush(fp)手続き

flush(fp)

Frac(r)

関数

なし

Input

変数

input

Insert

手続き

なし

Int

関数

なし

Integer

升土り

integer

Length(s)関数

length(s)‑ 87 ‑

九州工業大学・情報科学センター
広報特別号 199
1.9Ln(r)

関数

ln(r)

M
axlnt

定数

maxintNew(x)

手続き

new(x)

Odd(i)

関数odd{i)Ord(e)関数

ord(e)

Output変数output

P
i

定数なし

Pos(s1.s2)

関数

index(s1.s2)

Pred(e)関数

pred(e)Random(i)関数random(i)Randomize

手続き

なし

Read(.
.
.
.
)

手続き

read(.
.
.
.}

ReadLn(.
.
.
.}

手続き

readln(.
.
.
.
)

Real

型

realReset(fp)

手続き璽e>)
reset(fp,<file̲naRewrite(fp)

手続き●e>)
rewrite(fp,<file̲naRound(r}関数

round(r)Sin(r)関数

sin(r)

Sqr(r)関数

sqr(r)

Sqrt(r)関数

sqrt{r)

Str(r,s)

手続きなし

Succ(e)関数

succ(e)

Text

型text

True

定数trueTrunc(r)関数tranc(r)UpC
ase(s}

手続き

なし

Val(s,r,f)

手続きなし

W
rite(.
.
.
.
)

手続き

w
rite(.
.
.
.
)

W
riteln(.
.
.
.
) 手続き

九州工業大学・情報科学センター
広報特別号 1
9
9
1.
9I

゜゜w
riteln(.
.
.
.
)‑88‑