Syn BASIC (オンラインBASICインタプリタ)(2)

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
目次へ  前のページへ (1) (2) (3) (4) 次のページへ
2021年05月25日 公開。(ページ構成の変更により、以前の1ページ目の内容の一部を2ページ目に移動。)
2021年06月05日 Syn BASICで使える演算子を公開。
2022年11月24日 Syn BASICで使える関数とSyn BASICで使える演算子を3ページに移動。
2022年12月03日 READ文とDATA文の解説を追加。

2.Syn BASICの文法

この章では、Syn BASICの文法について解説します。

2-1.Syn BASICで使える文と命令

Syn BASICで使える文と命令を、表2に示します。

表2には、パラメータという言葉が出てきますが、これは、動作の詳細を指定するために、文や命令の直後に書く数字や文字列の事です。

例えばGOTO文では直後に行番号を指定します。100行にジャンプするためのGOTO文はGOTO 100ですが、GOTOの後の100が、このGOTO文のパラメータです。

表2、Syn BASICで使える文と命令
文・命令 エイリアス 説明
BREAK文 中断、ちゅうだん

FOR~NEXTのループから抜け、NEXT文の次の文または命令から実行します。BREAK文にパラメータはありません。

多重ループの中でBREAK文を使うと、一番内側のループを抜けます。FOR~NEXTのループの外でBREAK文を使うと、エラーになります。

BREAK文を使うと、FOR文で指定した変数の値は、BREAK文を実行する直前の値のまま、ループを抜けます。例えば次の例では、実行すると3が表示されます。

10 FOR I=1 TO 10
20   IF I=3 THEN BREAK
30 NEXT
40 PRINT I
CLS文 画面消去、がめんをけせ

画面を消去します。CLS文にパラメータはありません。

CONTINUE文 続けろ、つづけろ

CONTINUE文は、FOR~NEXTのループ内で使います。CONTINUE文を実行すると、CONTINUE文以下の文や命令を実行せずに、NEXT文にジャンプします。

例えば、

10 FOR I=-10 TO 10
20   IF I=0 THEN CONTINUE
30   PRINT 1/I
40 NEXT

というプログラムは、I=0の時だけ、30行を実行しません。

ループ外でCONTINUE文を使うとエラーになります。

DATA文 データ、でーた

DATA文は、READ文で読み取るためのデータ(数値または文字列)を記述します。

DATAの後に数値を記述すると(例:DATA 5)、READ文で数値変数にそのデータを読み込ませる事ができます。また、DATAの後に文字列を記述すると(例:DATA "ABC")、READ文で文字列変数にそのデータを読み込ませる事ができます。

文字列のデータは必ずダブルクオーテーション(")で囲む必要があります。例えば、DATA "ABC"は、ダブルクオーテーションを省略してDATA ABCと記述する事はできません。

データをカンマ(,)で区切る事で、複数のデータを1つのDATA文内に記述する事ができます。(例:DATA 123,456,"ABC","DEF")

DATA文のパラメータとなるデータは、リテラル(定数)である必要があります。例えばDATA 5+3の様に、数式の計算結果をデータとする事はできません。

DIM文 配列、はいれつ

配列を宣言します。

DIM A(5)とすれば、A(0)~A(5)の6個の要素の1次元配列が宣言されます。DIM B(3,4)とすれば、B(0,0)~B(3,4)の20個の要素2次元の配列が宣言されます。同様に、3次元以上の配列も宣言でき、配列の次元に上限はありません。(メモリ容量に制約されます)

EDIT命令 編集、へんしゅう

指定した行番号のプログラムを編集して再入力します。

EDIT 100とすれば、100行のプログラムを再入力します。

END文 終われ、おわれ

プログラムの実行を終了します。END文にパラメータはありません。

FOR~TO~STEP文 繰り返せ~最後の数~幅、くりかえせ~さいごのかず~はば

指定した変数の数を更新しながら、NEXT文までのループを繰り返し実行します。

FOR文は次の書式で記述します。

FOR 変数=初期値 TO 最終値 STEP 増分

変数は、数値の単純変数(配列でない変数)でなければいけません。

FOR文は、まず変数に初期値を代入し、増分で指定した値だけ変数の値を増加させながら(増分が負の数の場合は減少させながら)最終値まで変化させ、NEXT文までのループを繰り返し実行します。増分が1の場合は、STEP 1の記述を省略できます。

例えば次のプログラムは、1から10までの整数を小さい順に表示します。

10 FOR I=1 TO 10
20   PRINT I
30 NEXT I

また次のプログラムは、2から10までの偶数を小さい順に表示します。

10 FOR I=2 TO 10 STEP 2
20   PRINT I
30 NEXT I

さらに次のプログラムは、1から10までの数字を大きい順(10、9、…1の順)に表示します。

10 FOR I=10 TO 1 STEP -1
20   PRINT I
30 NEXT I
GOSUB文 ってこい、いってこい

指定した行番号またはラベルのサブルーチンを実行します。

GOSUB 1000なら、1000行から始まるサブルーチンを実行します。GOSUB *LABELなら、*LABELというラベルのある行から始まるサブルーチンを実行します。

サブルーチン側でRETURNを実行すると、GOSUBの次の文あるいは命令に戻ってきます。

GOTO文 行け、いけ

指定した行番号にジャンプします。(制御を移します) GOTO 150なら、150行にジャンプします。GOTO *LABELなら、*LABELというラベルのある行にジャンプします。

INPUT文 聞け、きけ

変数の内容をユーザーに打ち込んでもらいます。

INPUT Aなら、画面に?が表示され、その後にユーザーが数字を打ち込んでENTERを押すと、入力した数字が変数Aに代入されます。INPUT A$の様に文字列変数をパラメータとすると、文字列の入力もできます。INPUT A,Bの様に複数の変数をカンマ(,)で区切ってパラメータとする事もできます。この場合は、例えば5,6ENTERという具合に、ユーザーは数字を変数の数と同じだけ、カンマで区切って入力する必要があります。

変数のパラメータの前に、文字列定数(ダブルクオートで囲った文字列)のパラメータを付けると、ユーザーに変数の入力を要求する時のメッセージを指定できます。INPUT "A:",Aの様に、文字列定数の後にカンマで区切って変数を指定すると、画面にA:と表示した後に入力を受け付けます。INPUT "A:";Aの様に、文字列定数の後にセミコロンで区切って変数を指定すると、A:?と、指定した文字列定数の後に?を表示した後に入力を受け付けます。

IF~THEN~ELSE~文 もし~なら~違えば~、もし~なら~ちがえば~

IFの後の条件式を評価し、条件が成立していればTHEN以降の命令やコマンドを実行し、条件が成立していなければELSE以降の命令やコマンドを実行します。

ELSE以降は省略する事ができ、その場合、条件が成立しない時は、何も実行しません。

条件式には通常は等号(=)や不等号(<、>など)を使った比較式を指定します。例えばA=3なら「変数Aの値が3である」という条件式になり、B>5なら「変数Bの値が5より大きい」という条件式になります。

IF A>10 THEN PRINT "大きい" ELSE PRINT "小さい"というIF文を考えると、変数Aの値が10より大きい時にこのIF文を実行するとTHEN以降のPRINT "大きい"が実行され、画面には大きいと表示されます。また変数Aの値が10以下の時にこのIF文を実行すると、ELSE以降のPRINT "小さい"が実行され、画面には小さいと表示されます。

THENELSEの直後がGOTO文の場合は、GOTOを省略して行番号またはラベルだけを書く事ができます。例えばIF A>10 THEN 100 ELSE *STARTなら、変数Aの値が10より大きければ100行にジャンプし、そうでなければ、*STARTというラベルのある行にジャンプします。

KEYWORDS命令 キーワード、きーわーど

Syn BASICの予約語を表示します。

LET文 代入、だいにゅう

代入文を実行します。LETの後に、変数名、イコール記号(=)、数式の順に書くことで、変数に数式の計算結果が代入されます。

LET A=5+3なら、5+3の計算結果の8が変数Aに代入されます。LETを省略して単にA=5+3と書くこともできます。

LETは省略できるため、通常はプログラム中にLETを書く事はありません。古いBASICとの互換性のために用意されている予約語です。

LIMITKBDWIDTH命令 キーボードの幅、きーぼーどのはば

ソフトウェアキーボードの幅の上限を、ピクセル単位で指定します。

ソフトウェアキーボードは、原則的にはSyn BASICの物理画面の幅いっぱいに表示されますが、そのままではWIDTH文で物理画面の幅を広げた時に、ソフトウェアキーボードが大きくなりすぎる事があります。LIMITKBDWIDTH命令は、その様な場合にソフトウェアキーボードが大きくなりすぎない様に、幅に上限を設定するものです。

LIMITKBDWIDTH命令は、数値のパラメータを1つ取ります。そのパラメータをピクセル数として、ソフトウェアキーボードのサイズの上限を設定します。例えば、LIMITKBDWIDTH 400の場合は、ソフトウェアキーボード幅の上限は400ピクセルになります。

パラメータには200以上の数字を指定する必要があります。また、ソフトウェアキーボードの幅の上限値は、初期状態で500ピクセルです。

LIST命令 リスト、りすと

入力されているプログラムのリストの一部または全部を表示します。

単にLISTとすると、プログラムリストの全部を表示します。

数値のパラメータを1つ付けると、その数値に一致する行番号の行を表示します。例えば、LIST 100を実行すると、100行を表示します。

数値のパラメータを1つ付け、パラメータの後ろに-(マイナス)を書くと、行番号が指定したパラメータ以上になる行を表示します。例えば、LIST 100-を実行すると、行番号が100以上の行を全て表示します。

数値のパラメータを1つ付け、パラメータの前に-(マイナス)を書くと、行番号が指定したパラメータ以下になる行を表示します。例えば、LIST -100を実行すると、行番号が100以下の行を全て表示します。

2つの数値のパラメータを付け、それらのパラメータの間に-(マイナス)を書くと、行番号が2つの数値の範囲に入っている行を表示します。2つ目のパラメータが1つ目のパラメータ以上になる様に指定してください。例えば、LIST 100-200を実行すると、行番号が100以上200以下の行を全て表示します。

LIST命令をプログラム中で使う事はできません。ダイレクトモードで使ってください。

LIST命令を実行すると、処理が直ちに終了します。例えばLIST:PRINT "HELLO"という具合にマルチステートメントにしても、後続のPRINT文が実行される事はありません。

LOAD命令 ロード、ろーど

ローカルディスク(使用しているパソコン・スマートフォン等のHDD・SSD等)に保存してあるBASICのプログラムをロードします。(プログラムを読み込みます) LOAD命令にはパラメータはありません。

ロードするプログラムの指定は、LOADENTERと入力した後に画面の下側に出てくるボタンをクリックして、画面に表示されるファイル一覧の中から選択します。

LOAD命令は、プログラム中で使う事はできません。ダイレクトモードで使ってください。

LOAD命令を実行すると、処理が直ちに終了します。例えばLOAD:PRINT "HELLO"という具合にマルチステートメントにしても、後続のPRINT文が実行される事はありません。

LOCATE文 座標、ざひょう

LOCATE文は、カーソルを移動します。

LOCATE文には数値のパラメータが3つあります。

第1パラメータには、カーソルの水平座標を指定します。水平座標は物理画面の一番左が0で、右に1文字移動するごとに1ずつ増えます。物理画面の幅が80桁の場合は、0~79の範囲で水平座標を指定してください。

なお、指定した座標に全角文字の右半分が表示されている場合は、指定した水平座標より1つ左の位置にカーソルが移動します。

第2パラメータにはカーソルの垂直座標を指定します。垂直座標は仮想画面の一番上が0で、下に1行移動するごとに1ずつ増えます。

Syn BASICには仮想画面の考え方があります。実際に物理画面に表示されているのよりも広い仮想画面があり、物理画面を上下にスクロールして仮想画面の必要な部分を表示する事で、物理的な表示領域よりも上下に長い画面を取り扱えるようになっています。

LOCATE文の第2パラメータで指定する垂直座標は、仮想画面中の垂直位置を表しており、実際に画面に表示されている物理画面内の垂直位置ではありません。

LOCATE文の第2パラメータで、物理画面に表示されていない垂直座標を指定すると、物理画面が自動的にスクロールし、指定された垂直座標が物理画面内に表示される様になります。

LOCATE文の第3パラメータには、カーソルの表示モードを指定します。カーソルの表示モードには、0または1の値を指定します。

カーソルの表示モードが0の場合は、常にカーソルが表示されます。初期状態ではカーソルの表示モードは0です。

カーソルの表示モードが1の場合は、入力状態の時にだけカーソルが表示されます。プログラムの実行中で、なおかつINPUT文等でユーザーに入力を求めている時以外は、カーソルは表示されません。

LOCATE文では、任意のパラメータを省略して、一部のパラメータだけを指定する事ができます。(だだし、3つ全てのパラメータを省略する事はできません) 例えばLOCATE 3とすれば、カーソルの水平座標を3にし、カーソルの垂直座標やカーソルの表示モードは変更しません。またLOCATE ,,1とすれば、カーソルの表示モードを1にし、カーソルの座標は変更しません。

NEW命令 消せ、けせ

入力されているプログラムを消去し、全ての変数を初期化します。

NEXT文 変えろ、かえろ

FOR文と組み合わせて使います。FOR文とNEXT文で挟まれた命令や文を繰り返し実行します。

PRINT文 書け、かけ

指定した数式の計算結果を画面に表示します。

PRINT 1+2なら、1+2の計算結果の3を画面に表示します。

文字列の数式の計算結果も表示できます。PRINT "abc"+"def"なら、abcdefと画面に表示します。

セミコロン(;)またはカンマ(,)で区切って複数の数式を指定する事もできます。PRINT "abc";3とセミコロンで数式を区切ると、abc3と、2つの数式の計算結果をつなげて表示します。PRINT "abc",3とカンマで数式を区切ると、abc     3と、2つの数式の計算結果の間にいくつかスペースを挟んで表示します。

PRINT文の文末にセミコロンやカンマを置く事もできます。PRINT文は、通常は数式の計算結果を表示した後に改行しますが、PRINT 3;と数式の後にセミコロンを置くと、3を表示した後に改行しません。後続するPRINT文があれば、文字が3に続いて表示されます。PRINT 3,と数式の後にコロンを置くと、3を表示した後にスペースをいくつか表示して、改行しません。後続するPRINT文があれば、3の後にスペースをいくつか置いて文字が表示されます。

READ文 読め、よめ

READ文は、DATA文で記述された数値または文字列のデータを、変数に読み込みます。例えばREAD Iとすれば、DATA文に記述された数値データを、数値変数Iに読み込みます。またREAD S$とすれば、DATA文に記述された文字列データを、文字列変数S$に読み込みます。

READ文は、DATA文で記述されたデータを、プログラムの最初から最後へ、順に読みます。

例えば次の様なプログラムを考えます。

10 READ D
20 PRINT D
30 GOTO 10
40 DATA 111,222
50 DATA 333

このプログラムは、30行のGOTO文により、無限ループになっているので、10行のREAD文と20行のPRINT文が何度も繰り返し実行されます。

またこのプログラムでは、40行と50行にあるDATA文により、先頭から順に111、222、333の数値データが宣言されています。

最初に10行のREAD文が実行されるときは、先頭のデータの111が変数Dに代入されます。次に10行のREAD文が実行される時は、2番目のデータの222が変数Dに代入されます。3回目に10行のREAD文が実行される時は、3番目のデータの333が変数Dに代入されます。4回目に10行のREAD文が実行される時は、もう全てのデータの読み込みが終わっているため、Out of dataのエラーが出ます。

DATA文に数値のデータが宣言されているのに、READ文で文字列変数にそれを読み込もうとした場合や、逆にDATA文に文字列のデータが宣言されているのに、READ文で数値変数にそれを読み込もうとした場合は、Type mismatchのエラーが出ます。

RENUM命令 番号、ばんごう

RENUM命令は、プログラムの行番号を付け直します。

RENUM命令は、数値のパラメータを3つ取ります。第1パラメータは新番号、第2パラメータは旧番号、第3パラメータは増分を表わします。旧番号で指定された行番号の行が、新番号に変わり、その次の行の行番号は、新番号増分を足した数字になります。それ以降、行が進むごとに、行番号が増分ずつ増えていきます。

例えば、次の様なプログラムがあるとします。

30 I=1
35 PRINT I
70 IF I<10 THEN I=I+1:GOTO 35
90 I=I+10
110 IF I>100 THEN 130
120 GOTO 35
130 END

ここでRENUM 100,35,20を実行すると、35行を100行に改め、以降の行の行番号は20ずつ増えていくので、次の様に行番号が改められます。

30 I=1
100 PRINT I
120 IF I<10 THEN I=I+1:GOTO 100
140 I=I+10
160 IF I>100 THEN 200
180 GOTO 100
200 END

この例で示す様に、RENUM文は、行頭の行番号を付け直すだけでなく、GOTO文やGOSUB文のパラメータの行番号や、IF文のTHEN節やELSE節の直後に書かれた行番号等も書き換え、プログラムの動作を変えない様にします。

RENUM文のパラメータの一部または全部は、省略する事ができます。

第1パラメータの新番号を省略すると、10が指定されたものとして処理されます。

第2パラメータの旧番号を省略すると、プログラムの一番最初の行が指定されたものとして処理されます。

第3パラメータの増分を省略すると、10が指定されたものとして処理されます。

3つのパラメータを全て省略してRENUMとすると、プログラムの最初の行を10行にし、2番目の行を20行にし、3番目の行を30行にし…という具合いに、行番号が10行から始まって、10ずつ増加する様に行番号が振られます。

RENUM命令は、プログラム中では利用できません。ダイレクトモードで使用してください。

RESTORE文 復帰、復帰

RESTORE文は、次にDATA文で読み込むDATA文の行を指定します。RESTORE文は、例えば全てのDATA文のデータを読み込んだ後に、最初のDATA文からもう一度データを読み直す場合などに使えます。

RESTORE文は、1つの行番号またはラベルのパラメータを取ります。

例えばRESTORE 1000とすれば、1000行以降にあるDATA文のデータを、次のREAD文で読み込みます。またRESTORE *DATA_TOPとすれば、*DATA_TOPというラベルのある行以降のDATA文のデータを、次のREAD文で読み込みます。

RESTORE文で指定した行にDATA文がある必要はありません。指定した行にDATA文がない場合は、指定した行以降の最初のDATA文のデータを次のREAD文で読み込みます。

RESTORE文のパラメータを省略して単にRESTOREとした場合は、プログラムの最初のDATA文からデータを読み込みます。

RETURN文 戻れ、もどれ

サブルーチンを終了してメインルーチンに戻ります。RETURN文にパラメータはありません。

RETURN文はGOSUB文で呼び出されたサブルーチン内で使用する必要があります。RETURN文を実行すると、サブルーチンを呼び出したGOSUB文の次の文(または命令)にジャンプします。

REM文 注、ちゅう、'

プログラムに注釈(コンピュータにとっては意味がないがプログラムを読む人間には参考になる情報)を書くための文です。REMの後にスペースを一つ以上挟んで、注釈を書くことができます。

例えば、プログラムで合計を求めている部分があるとして、その部分にREM 合計を求めると、REM文で注釈を書いておくと、後でプログラムを読み直す時に参考になります。

REMのエイリアスとしてダッシュ(')が使えますから、'合計を求めるとダッシュを使う方が、REM文はシンプルになります。なお、REMの場合には、REMと注釈の間にスペースが必要ですが、'の場合は直後に注釈を書く事ができます。

Syn BASICはREM文を見つけると、その行のそれ以降は全て注釈として読み飛ばします。よって、REM PRINT 3とした場合は、PRINT 3の部分が注釈とみなされますから、その部分が「3を表示する」という意味に解釈されることはありません。(プログラムの改変時に、参考のために改変前のコードを残しておきたい場合に、この例の様にREM文を使ってコードの一部を注釈にしておく事がよくあります。この様なREM文の使い方をコメントアウトといいます)

RUN命令 やれ

全ての変数を初期化してから、一番行番号の小さい行からプログラムを実行します。RUN命令にパラメータはありません。

SAVE命令 セーブ、せーぶ

入力されているプログラムをローカルディスク(使用しているパソコン・スマートフォン等のHDD・SSD等)にセーブ(保存)します。

SAVE命令にはファイル名をパラメータとして指定する事もできますし、パラメータを省略する事もできます。

例えばSAVE "abc.txt"とすると、abc.txtというファイル名でプログラムをセーブします。ファイル名の拡張子は.basになります。

SAVE命令でファイル名の拡張子を省略すると、自動的に.basの拡張子が付加されます。例えばSAVE "def"なら、def.basというファイル名でプログラムがセーブされます。

セーブ先のフォルダ(ディレクトリ)は、使用しているブラウザのデフォルトのダウンロードフォルダになります。

注:SAVE命令は、ブラウザのダウンロード機能を利用してプログラムを保存します。

なお、パラメータを省略して単にSAVEとすると、ファイル名を聞かれますので、セーブするファイルのファイル名を入力すると、ファイルがセーブされます。

SAVE命令はプログラム中で使う事はできません。ダイレクトモードで使ってください。

SAVE命令を実行すると、直ちに処理が終了します。例えばSAVE:PRINT "HELLO"という具合にマルチステートメントにしても、後続のPRINT文が実行される事はありません。

WAIT文 待て、まて

プログラムの実行を一定時間停止します。停止する時間はms(ミリ秒)単位で指定します。

1msは1/1000せんぶんのいち秒なので、例えば0.3秒停止するにはWAIT 300とします。

プログラムが停止する時間はあまり正確ではありませんので、目安程度に考えてください。

WIDTH文 幅、はば

WIDTH文は、物理画面および仮想画面の大きさを変更します。(物理画面と仮想画面については、4ページの説明を読んでください)

WIDTH文には3つの数値のパラメータがあります。

1番目のパラメータは、物理画面の桁数(=仮想画面の桁数)です。25桁以上200桁以下の数字を指定してください。物理画面の桁数の初期値は40桁です。

2番目のパラメータは、物理画面の行数です。5行以上200行以下の数字を指定してください。物理画面の行数の初期値は、20行です。

3番目のパラメータは、仮想画面の行数です。0行以上10000行以下の数字を指定してください。仮想画面の行数の初期値は200行です。

仮想画面の行数の指定が、物理画面の行数の指定より小さい場合は、仮想画面の大きさが、物理画面の行数と同じに設定されます。例えば、WIDTH 40,20,10というWIDTH文は、WIDTH 40,20,20と解釈されます。

物理画面の行数と仮想画面の行数が同じ場合、画面はスクロールしません。この状態では、メモリの使用量が少なく、画面の表示速度が速く、また不用意に画面をスクロールしてしまって表示が乱れる事が避けられるため、例えばシューティングゲームのプログラムを作る場合などに便利です。

WIDTH ,,0を実行すると、物理画面の大きさを変更せずに、仮想画面の行数のみを変更し、画面をスクロールしなくする事ができます。

WIDTH文を実行すると、画面の大きさを変更するとともに、画面が消去されます。

次のページでは、Syn BASICで使える関数と演算子について説明します。

目次へ  前のページへ (1) (2) (3) (4) 次のページへ

このページで使われている用語の解説

関連ページ

Arduino 電子工作
このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。