Windows環
境 で 動 作 す るBASIC言
語 シ ス テ ム
白 石 和 夫* ABASICLanguageSystemwhichworksonMS-Windows KazuoShiraishi (FacultyofEducation,BunkyoUniversity) 要 約 数 学 教 育 で 利 用 す る こ と を 目的 と して,MS-Windows上 で 動 作 す るJISFullBASIC準 拠 の BASIC処 理 系 を作 成 し た.WindowsのGUIを 活 用 す る こ とで操 作 性 に優 れ た もの とな っ て い る.こ の処 理 系 は,学 習 者 が 道 具 と して利 用 す る こ と を 目 的 と した もの で あ り,ア プ リケー シ ョ ン作 成 を 目的 とし た もの で は な い.数 値 計 算 ・グ ラ フ ィ ック ス とプ ル ゴ リズ ム の 表 現 が 想 定 さ れ る主 な利 用 法 で あ る.JISに 従 い,十 進 数 表 現,問 題 座 標 系 に 基 づ くグ ラ フ ィ ッ ク ス,構 造 化 プ ロ グ ラ ミ ング な ど を実 現 して い る.問 題 座 標 系 の採 用 で 関 数 の グ ラ フ を描 くの は容 易 で あ り,さ ら に,図 形 変 換 の 機 能 の実 現 に よ り,変 換 幾 何 へ の応 用 も 可 能 にな っ た. な お,こ の シス テ ム は ボ ー ラ ン ド社 のDelphiを 用 い て作 成 しーた もの で あ る. 1.は じ め に 前 報[1]で イ ン タ プ リ タ 形 式 に よ る BASIC処 理 系 の 試 作 結 果 を報 告 し た.今 般, 内 部 構 造 を コ ンパ イ ラ に改 め る と と もに,日 本 工 業 規 格(JISFullBASIC[2])と の整 合 性 を高 め,さ ら に,MS-Windows上 で 動 作 す る も の が完 成 した ので 報 告 す る. 2.概 要 試 作 したBASIC処 理 系 は数 学 教 育 で の利 用 を 目的 と した もの で,数 値 計 算,グ ラ フ ィ ッ クス の 利 用 と,ア ル ゴ リズ ム の記 述 の た め に 用 い る こ とを想 定 し て い る.し たが っ て, マ イ ク ロ ソ フ ト社 のVisualBASICの よ う に ア プ リケ ー シ ョ ン開 発 を 目的 とし た言 語 と *し らい し か ず お 文教 大 学 教 育学 部 は 性 格 が 異 な る. 試 作 し たBASIC処 理 系 に は,MS-Win-dows版 と,PC9801MS-DOS版 が あ る. Windows版 は,ボ ー ラ ン ド 社 の プ ロ グ ラ ミ ン グ 言 語Delphi1.0で 作 成 さ れ て い る.一 方,PC9801版 は,同 じ く ボ ー ラ ン ド 社 の turboPascal6.0で 作 成 さ れ た も の で あ る. 以 下 の 記 述 はWindows版 に 基 づ く. PC9801版 で は,多 少,異 な る 部 分 も あ る. 3.文 法 お よ び 機 能 こ のBASICは,JISFullBASICを 目 標 に 作 成 され て い る.以 下,JISと の 整 合 性 を 中 心 に,実 現 され た機 能 を述 べ る. (1)数 値 演 算 と数 値 変 数 数 値 に 関 す る部 分 に つ い て は,ほ ぼ 完 全 に JISの 要 求 を満 た し て い る. JISの 数 値 の 関 す る要 求 は,基 本 的 に は十 一34一Windows環境で動作するBASIC言語システム 進演算であるが,実際には,より複雑な処理 を要求される.たとえば,数値演算の結果を 数値変数の精度よりもさらに高い精度で表現 することが要求されている.なお,計算結果 は十進数である必要はないが,十進数が正確 に表現できるものでなければならない. 数値の内部表現は,少なくとも
2
1
桁まで の十進数が正確に表現できるだけの桁数をも っ1
0
0
0
0
を基底とする数表現である.数値変 数も同様の数表現を用いるが,計算結果を代 入するとき,1
0
進数としてみたときの1
6
桁 目で四捨五入を行うことで,見かけ上,1
5
桁の精度をもっ十進数にしている.]
I
S
の数値に関する規定のうち,n
u
m
e
r
i
c
宣言には対応していない.それ以外の数値に 関する文法には完全に対応している.ただし,a
r
i
t
h
m
e
t
i
c
選択子でNATIVE
を選択してもDECIMAL
を指定した場合と同じになる.(
2
)
数値組込み関数 数値組込み関数は,J
I
S
に規定されたもの をすべて用意している.計算結果の正確さに ついてもほぽJ
I
S
の規定通りである.たと えば,角の大きさの単位として度を選択した とき,s
i
n
(
1
8
0
)
は正確にOであり,t
a
n
(
9
0
)
はエラ)になる.また,べき乗演算は,一般 的なBASIC
処理系では底が1
に近い数であ るときに大きな誤差を持つことが多いのであ るが,そのような場合にも正しい結果が得ら れるように考慮しである. (3) 文字列 文字列については以下の通り.文字列の連 結演算は実現している.文字列式のなかと,l
e
t
文の左辺では,文字列変数に部分文字列 指定が使える.組込み関数については,DATE$
,LEN
,POS
,REPEAT$
,STR$
,TIME$
,USING$
,V
AL
を実現し ている. (4) 配 列 数値配列についてはほぼJ
I
S
の規定通り の内容を実現し,行列演算が可能である.ま たm
a
t
-
l
i
n
e
-
i
n
p
u
t
文を除き,配列入出 力も可能である.しかし,文字列配列につい ては,最小限の機能しか実現していない. (5) 制御構造とプログラム分割 論理式の文法はJ
I
S
の規定通りに実現し ている.したがって,IF 1
くAく4THEN は文法誤りである.また,配列M
の添字の 上限が1
0
で,変数A
の値が1
1
であるときIF A
く =1
0
AND
M(A) >0 THEN
を実行してもエラーにならない.]
I
S
F
u
l
l
BASIC
の特徴は構造化プログラ ミングが可能なことであるが,この処理系で は,J
I
S
の構造化制御文をすべて実現してい る.実現されていないのは,構造化プログラ ミングによって不要となり,将来,]
I
S
から 削 除 す る こ と が 予 定 さ れ て い るon
文,g
o
s
u
b
文,r
e
t
u
r
n
文のみである.ただし, 行番号分岐の文には飛び先について若干の制 約がある. プログラム分割の機能については,関数定 義や副プログラムを,外部,内部ともに実現 している. (6) 入出力 入出力については,J
I
S
の要求に完全には 対応できていない.そのうち大きいものは, 書式指定であり,今のところ,書式指定は数 値式に対してのみ可能であり,しかも,書式 文字として使えるのは北%, ^,+,ーのみ である. (7) ファイJレ テキストファイルの操作のために必要な最 小限の機能を提供している.しかし,経路を 手続きの引数にすることは実現できていない.(
8
)
例外状態処理およびデバッグ 例外状態処理のために,when-in
区を利 用することができる.例外処理区では,例外 処理区戻り文が利用できる.これによって, 定義域がよくわからない関数や,桁あふれに なる可能性のある関数のグラフなどが容易に『教育 学 部 紀 要』 文 教大 学教 育 学部 第30集1996年 白石 和 夫' 描 け る よ う に な る. デ バ ッ グ 機 能 に つ い て は,debug文 と, break文 が 利 用 で き る. (9)図 形(graphics) 図 形 機 能 に つ い て は,座 標 系 の 設 定 と,描 画 と座 標 の 取 得 の た め の 機 能,お よ び,絵 定 義 と 図 形 の 変 換 の 機 能 を 実 現 し て い る.描 画 領 域 の 形 状 は,JISの 約 束 に 従 い,正 方 形 で あ る.そ の た め,座 標 系 の 設 定 を 考 え る と き の 負 担 が 少 な く,ま た,機 種 に よ る 依 存 が 生 じ な い.問 題 座 標 系 を 原 則 と す る座 標 系 に よ り,関 数 の グ ラ フ を 描 く,媒 介 変 数 表 示 の 曲 線 を 描 く な ど の 処 理 が 容 易 に で き る.ま た, 組 込 み 関 数ANGLE(x,y)を 利 用 す る こ と で 極 座 標 を 扱 う の も容 易 で あ る.一 方,座 標 値 取 得 の た め の 機 能(getpoint)が あ る か ら, 描 い た 図 形 か ら 座 標 値 を 読 み 取 る,試 行 錯 誤 で 軌 跡 を 探 る,グ ラ フ ィ ッ ク ス の ア ル ゴ リ ズ ム を 考 え る,な ど の 応 用 が 可 能 に な る.ま た, 図 形 変 換 の 機 能 を 実 現 し た の で,変 換 幾 何 学 や 自 己 相 似 図 形 へ の 応 用 も 可 能 で あ る. 以 下 に,実 現 さ れ た 機 能 に つ い て,も う少 し,く わ し く述 べ る. 「13.1座 標 系 」 で は,SETWINDOW と,ASKWINDOWを 実 現 し て い る. 「13.2属 性 及 び 画 面 制 御 」 で は,clear文 と,次 の 各 項 目 に対 す るset文 お よ びask文 を 実 現 し て い る:linecolor,linestyle, pointcolor,pointstyle,areacolor,text color.ま た,次 の 対 象 に 対 す るset文 を 実 現 し て い る:textjustfy,colormix.そ の 他,い くつ か のask文 が 実 現 さ れ て い る が,詳 細 は省 く. 「13.3図 形 出 力 」 で は,図 形 動 詞 と し て PLOTを 使 う 前 提 で,主 要 な 機 能 が 実 現 さ れ て い る.ま た,「13.4図 形 入 力 」 で は, getpointと,pixelsizeに 関 す るask文 を 実 現 し て い る.「13.5絵 及 び 描 点 出 力 」 で は,絵 定 義 とdraw文,exit-picture文 が 利 用 で き る.draw文 で は,図 形 の 変 形 が 可 能 で あ る. ⑩ 文 法 の 拡 張 JISと の整 合 性 を壊 さ な い 範 囲 で 文 法 を拡 張 し て い る. そ の ひ とつ は,行 番 号 の 省 略 を許 す こ とで あ る.ま た,外 部 手 続 き に対 す るdeclare文 の 省 略 も許 して い る.た だ し,JISと の 互 換 性 保 持 の た め に,組 込 み 関 数 と同名 の外 部 関 数 を定 義 す る場 合 に はdeclare文 を省 略 で き な い. ⑪ 拡 張 機 能 i)249桁 モ ー ド 249桁 以 下 の十 進 小 数 が 正 確 に表 現 で き る, 基 底 が10000の 数値 表 現 を選 択 で きる. 図1 た だ し,こ の モ ー ドで は,超 越 関 数 は使 え ず,べ き乗 演 算 は指 数 が 整 数 で な い と実 行 時 に エ ラ ー に な る. ii)組 込 み 関 数 組 込 み 関 数 と して 次 の拡 張 関 数 が あ る. FACT(x)xの 階 乗 PERM(n,y)順 列 の数 COMB(n,r)二 項 係 数(組 合 せ の数) iii)組 込 み絵 定 義 組 込 み の絵 定 義 にgridとaxesが あ る.絵 定 義gridを 利 用 した例 を次 に示 す. DEFf(x)=x^3-3*x SETWINDOW-5,5,一5,5 DRAWgrid FORx=一5TO5STEPO.01 PLOTLINES:x,f(x); NEXTx END 一36一
Windows環 境 で 動 作 す るBASIC言 語 シ ス テ ム 図2 4.ユ ー ザ ー イ ン タ ー フ ェ ー ス (1)プ ロ グ ラム の 入 力 プ ロ グ ラ ム は,Windowsの メ モ 帳 と互 換 性 の あ る エ デ ィ タ で入 力 す る.行 番 号 は省 略 可 能 で あ る. プ ロ グ ラ ム の 読 込 み,保 存 な ど は メ ニ ュ ー 選 択 で 実 行 で き る.保 存 形 式 はMS-DOSの 標 準 テ キ ス トで あ る. エ デ ィ タ に は,カ ッ ト&ペ ー ス トに よ る編 集 機 能 の ほ か,検 索 や 置 換 な どの 機 能 も あ る. 図3 (2)プ ロ グ ラ ム の 実 行 プ ロ グ ラ ム の 実 行 は,プ ル ダ ウ ン メ ニ ュ ー か ら 「実 行 」 を 選 択 し て 行 う.シ ョ ー トカ ッ トキ ー と し てF9を 割 り 当 て て あ る の で, F9キ ー を 押 し て も よ い. 図4 標 準 の状 態 で は,プ ロ グ ラ ム を翻 訳 しな が らプ ロ グ ラ ム の イ ン デ ン トを実 行 す る.イ ン デ ン トな し で入 力 され た プ ロ グ ラム も,適 切 な イ ンデ ン トを行 う こ とで,区 構 造 の 誤 りを 発 見 しや す くす る.な お,オ プ シ ョ ン と して, 自動 イ ンデ ン トしな い こ とを選 択 す る こ と も で き る. プ ロ グ ラ ム に構 文 上 の誤 りが あ る と,誤 り の あ る行 を反 転 表 示 して誤 り を報 告 す る.単 純 な 誤 りの場 合 に は,コ ン パ イ ラ に誤 り を訂 正 させ る こ と もで き る. 図5 現 在,誤 りの 自 動 修 正 の 対 象 と な っ て い る の は,マ イ ク ロ ソ フ トBASICの 文 法 で あ り, 自 動 修 正 す る の は,代 入 文,next文,input 文 の プ ロ ン プ ト,printusing文,行 末 注 釈 で あ る. (3)print文 の 出 力 print文 の 結 果 は,プ ロ グ ラ ム エ デ ィ タ、と ほ ほ伺 等 の 機 能 を も つ テ キ ス トエ デ ィ タ に 出 力 さ れ る.行 数 の 制 限 は な い が,文 字 数 に お よ そ30Kbyteま で の 制 限 が あ る. 出 力 結 果 を 印 刷 す る,フ ァ イ ル に 保 存 す る, windowsの カ ッ ト ・バ ッ フ ァ を 経 由 し て 他 の ア プ リ ケ ー シ ョ ン に デ ー タ を渡 す な ど の 操 作 も 可 能 で あ る.
『教 育 学部 紀 要 』文 教 大 学教 育 学 部 第30集1996年 白石 和夫 図6 (4)グ ラ フ ィ ッ ク ス グ ラ フ ィ ッ ク ス を利 用 す る プ ロ グ ラ ム を実 行 す る と,グ ラ フ ィ ッ クス 用 の ウ ィ ン ドウ を 作 成 し,そ こ を描 画 領 域 とし て利 用 す る.そ の 形 状 は正 方 形 で あ る. グ ラ フ ィ ッ クス ・ウ ィ ン ドウ の下 部 に は, マ ウ スが 指 す 点 の座 標 が表 示 され る.こ れ は, た と え ば,関 数 の グ ラ フ を描 い た よ うな と き に 頂 点 の座 標 を読 み取 るの に役 に立 つ.ま た, getpoint文 で正 確 な 点 を入 力 す る た め の補 助 と し て も機 能 す る. 図 形 出 力 の 結 果 は,Windowsの ビ ッ ト マ ッ プ と し て 保 存 し た り,プ リ ン タ に 印 刷 し た り す る こ と が で き る.ま た,Windowsの ク リ ッ プ ボ ー ド を 介 し て 他 の ア プ リ ケ ー シ ョ ン に グ ラ フ ィ ッ ク ス を 渡 す こ と も で き る. 描 画 領 域 の 大 き さ は,オ プ シ ョ ン 設 定 で, 異 な る サ イ ズ を 選 ぶ こ と が で き る.そ の と き, 画 面 の 大 き さ を 超 え る 大 き さ の 描 画 領 域 を 指 定 し て も よ い.そ の 場 合,描 画 領 域 は ウ ィ ン ド ウ の 中 で ス ク ロ ー ル さ せ て 見 る こ と に な る. こ の 使 い 方 は,プ リ ン タ に 精 密 な 図 形 を 印 刷 し た い と き に 役 に 立 っ. 図8 (5)実 行 の 中 断 とデバ ッ グ フ ァイ ル メニ ュ ー か ら 「中 断 」 を選 択 す る と,実 行 途 中 の プ ロ グ ラ ム の実 行 を中 断 す る こ とが で き る. 図9 プ ロ グ ラ ム の 実 行 が 中 断 す る と,デ バ ッ グ の た め の ウ ィ ン ドウ が 出 現 す る. 38
Windows環 境 で 動作 す るBASIC言 語 シス テ ム 図10 デバ ッグ ・ウ ィ ン ドウで は,次 に実 行 さ れ る行 と,現 在 実 行 中 の プ ロ グ ラ ム 単位 と内部 手 続 き に属 す る す べ て の変 数 の値 が 表 示 さ れ る.ま た,プ ロ グ ラム ・ウ ィ ン ドウで は,次 に実 行 され る行 が 反 転 状 態 で表 示 され る.そ して,実 行 の継 続,ス テ ップ 実行,実 行 の 中 止 の うち か ら選 択 す る こ とが で き る. また,debugonの 状 態 でbreak文 を実 行 して も同 じ状 態 にな る.こ こで,ス テ ップ 実 行 を選 択 す れ ば,プ ロ グ ラ ム の 流 れ を追 跡 す る こ とが で き る. そ し て,デ バ ッグ ・ウ ィ ン ドウ は例 外(実 行 時 エ ラ ー)の た め に プ ロ グ ラ ム が 異 常 終 了 した と き に も表 示 さ れ る. (6)ヘ ル プ この 処 理 系 に は,シ ス テ ム と密 に 結 合 し た Windowsヘ ル プ を 用 意 し て い る.た と え ば, 意 味 を調 べ た い 機 能 語 をマ ウ ス で選 択 して ヘ ル プ メニ ュ ー の 「検 索 」 を選 ぶ と,ヘ ル プ フ ァイ ル の該 当 ペ ー ジ が 表 示 さ れ る. 図12 (7)入 力 補 助 FullBASICの 機 能 語 は,た と え ば, OPTIONANGLEDEGREESが そ うで あ る よ う に,長 い綴 りの も のが 多 い.意 味 が 容 易 に推 測 で きる利 点 と裏 腹 に,キ ー ボー ドに慣 れ な い と入 力 が面 倒 に な る 欠 点 が あ る.そ の 欠 点 を補 うた め に,機 能 語 を一 覧 か ら選 択 し て 入 力 す る機 能 を用 意 して い る. 編 集 メ ニ ュ ー か ら 「機 能 語 一 覧 」 を選 択 す る と,次 図 の よ う な ウ ィ ン ドウが 表 示 され る. 図13 こ の ウ ィ ン ド ウ の 下 部 に は,選 択 し た 機 能 語 の 簡 単 な 説 明 が 表 示 さ れ る.こ こ で,「 ヘ ル プ 」 ボ タ ン を ク リ ッ ク す る と,ヘ ル プ フ ァ イ ル の う ち の 該 当 ペ ー ジ が 表 示 さ れ る. 一 方 ,目 的 の 機 能 語 の と こ ろ で ダ ブ ル ク リ ッ ク す る か,「 刷 り込 む 」 の ボ タ ン を ク リ ッ ク す れ ば,そ れ が エ デ ィ タ に 刷 り込 ま れ る. 図11
『教育学部紀要』文 教 大 学 教 育 学 部 第30集 1996年 白石和夫