2020/06/05

BASIC (6) PC-BASIC の紹介

BASIC コンバータを JavaScirpt で作っている間、PC-BASIC とは何かについて紹介したいと思います。

PC-BASIC は Rob Hagemans 氏によって開発されている Python で書かれた BASIC です。こちらが PC-BASIC のサイトです。

Pcbasic_web

Wikipedia の BASIC 一覧表にもまだ載っていない新しい BASIC と言えます。安定版は 1.2.14 で Windows と Mac で動作します。開発版 2.0 は Linux や Python 上でも動作します。

PC-BASIC のインストール方法、初期設定方法、よく使うコマンド、F-BASIC との違いなどをこちらにまとめました。

関連項目

| | コメント (0)

JavaScript (43) BASIC の構文解析

JavaScript の連載は 3 年ぶりになります。今回は最近始めた「BASIC でコンバータを作る」企画の一環で、BASIC の構文解析の部分を6年前に作った JavaScript のパーサージェネレーターで使って作ってみようということで、BASIC パーサーを作ります。

作成したコードとその結果をこちらに公開します。

とりあえずパーサーらしきものが出力されました。次回は作成したパーサーが動作するか確かめてみたいと思います。

(つづく)

関連項目

| | コメント (0)

2020/05/30

BASIC (5) 構文解析について

BASIC の構文解析をどのように進めるか、考えていこうと思います。

『FM-7 F-BASIC文法書』 の PLAY 文のところに「PLAY構文図」というのが載っています。これは PLAY 文の構文を図で表したものです。

Play

すべての文に対してこのようなものを作り、それにしたがって内容を読み取るのが今回作ろうとしている構文解析になります。

そういえば以前、JavaScript でパーサージェネレータというものを作りました。これは囲碁の棋譜 SGF (Smart Game Format) の構文を解析するために、EBNF (Extended Backus-Naur Form) で書かれた構文から JavaScript のパーサー(構文解析プログラム)を作り出すツールです。

EBNF は上図の構文図の代わりになるものです。SGF の構文を書けば SGF のパーサーが出力され、BASIC の構文を書けば BASIC のパーサーが出力されます。

このツールで出力されるのは JavaScript のコードですが、一から BASIC のコードを書くより JavaScript のコードを見ながら書いたほうが、正しいコードを書けるような気がします。

ということで、しばらくの間、JavaScript の連載に移行します。

関連項目

| | コメント (0)

BASIC (4) 構文解析の第一歩

コンバータを作るには、BASIC のソースファイルの構文を解析する必要があります。これを行うプログラムがいわゆるパーサーです。

今回は本格的な構文解析に入る前に、簡単な方法を試してみたいと思います。実は、これも F-BASIC 向けに作った XPOSE.BAS というプログラムを PC-BASIC 上で走らせてみようという試みです。

XPOSE.BAS は BASIC プログラム内の MML を移調 (transpose) するプログラムです。PC-BASIC でも PLAY 文が使えるので実際、移調した結果を確かめられるはずです。

PC-BASIC 向けに直した XPOSE.BASE のソースコードと実行結果をこちらに公開します。

前回と同様、エラー番号を直すだけで動作しました。このプログラムでは、PLAY 文と DATA 文にある MML を見つけて移調しています。約30年ぶりにコードを見ましたが、結構ちゃんと作られています。コンバータの作成に役立ちそうです。

それから、和音について以下のことが判りました。

F-BASIC では三和音が可能ですが、PC-BASIC で三和音を鳴らそうとすると Syntax error(コマンドまたは文の書き方に誤りがある)になってしまいます。これは C:\Users\username\AppData\Roaming\pcbasic-1.2\PCBASIC.INI という設定ファイルに syntax=tandy を指定することで回避できます。ただ、ビープ音で PLAY 文を鳴らしているようで、和音にはなっていませんでした。

ちなみに半角カタカナが化ける件も同じ設定ファイルで codepage=932 を指定すると解消するはずですが、実際は記号が表示されなくなるだけで、カタカナは長音以外表示されませんでした。フォントが対応していないようです。

また、MML の休符は、F-BASIC や Small Basic では R ですが、PC-BASIC では P でした。

(つづく)

関連項目

| | コメント (0)

2020/05/29

BASIC (3) ファイル入出力

コンバータの作りとしては、BASIC で書かれたプログラムをテキストファイルとして読み込んで、Small Basic に変換した結果をまたテキストファイルとして出力します。

今回は PC-BASIC のファイル入出力を試してみたいと思います。

以前、F-BASIC で LISTX.BAS というプログラムを書きました。これは単純にファイルを読み込んで画面に表示する LIST.BAS というプログラムを拡張したもので、他のパソコンと通信するための XON/XOFF 制御を追加したものです。LIST.BAS があれば、それでも良かったのですが、F-BASIC のフロッピーから取り出していないので、LISTX.BAS で代用します。

LISTX.BAS 自体、LISTX.BAS で FM-77 から送り出し、FM-TOWNS 上のターミナルソフトで受信し、フロッピーに出力したものを現在使っている FMV で読み込みました。

さすがにそのままでは PC-BASIC 上で動かなかったのですが、エラー番号を修正するだけで、ファイルから読んで画面に表示することはできました。修正後のソースと実行結果をこちらに公開しました。

他にもいくつかの F-BASIC 向けプログラムを試してみた結果、F-BASIC で PRINT #2 となっているところは Syntax error になってしまい、PRINT #2,"" とすると PC-BASIC でも動作することがわかりました。

これでファイルの入出力はだいたい理解できました。

(つづく)

関連項目

 

| | コメント (0)

BASIC (2) 式の展開

さて、前回の問題の解答を作ってみたのですが、まず、PC-BASIC を立ち上げてみましょう。

Pcbasic-1214

起動後、chdir コマンドでフォルダを移動しています。最初に表示されるのはユーザのルート c:\Users\username になります。ここが Z:\ として扱われています。ここから OneDrive 内の Documents\BASIC\MATH フォルダへ移動したところです。そこにすでに Q0.BAS というファイルがあります。これが前回の問題の解答として作ったものです。ソースコードと実行結果をこちらに公開しました。

数学のプログラミングというと、数値計算をまず思い浮かべてしまいますが、このような式の展開や変形ということもできます。コンバータはまさにその典型的な応用分野と言えるでしょう。

なお、PC-BASIC を終了するには system とタイプして [Enter] キーを押します。

(つづく)

関連項目

 

| | コメント (0)

BASIC (1) 再び BASIC

これまで、長いこと Small Basic を使ってきたのですが、過去、BASIC で書かれた本も結構あって、それをいちいち Small Basic に書き直すのも面倒なので、BASIC から Small Basic への変換プログラムを作ろうと思い立ちました。

この手のプログラムを書く場合、まず BASIC で書けば、そのプログラム自身を変換して Small Basic の変換プログラムを作れる訳です。ということで BASIC でのプログラミングをしばらく楽しもうと思います。

で、Windows で実行できる BASIC を探した結果、PC-BASIC が良かろうということで、まずは PC-BASIC 1.2.14 をインストールしました。

さて、今回 BASIC のコンバータを作りたいと思ったきっかけは、『数学とBASIC』という本です。残念ながら絶版になっているようです。

この本はbit誌の1982年7月号から12月号の連載をベースにしたもので、BASIC で代数を扱っています。コンピュータ自体、数学に支えられている面がありますが、その主体は代数の分野であるといっていいでしょう。コンピュータの特にソフトウェアを理解することは代数の一部として扱っていいのではないかと思っています。

コンバータを作り始める前に、まずちょっと BASIC を思い出す意味も込めて、この本にある(p7 の)問題を解いてみようと思います。

問題 A, B, C, D, P, Q, R, S, W, X, Y, Z は(数学でいう)変数であるとする.式
 (A + B + C + D) (P + Q + R + S) (W + X + Y + Z)
の括弧をはずした式を打ち出すプログラムを作れ.

(つづく)

関連項目

| | コメント (0)

«プログラミング講座(187) 開発方針の変更