C言語-インタプリタminiBASIC
前へ 目次へ 次へ 

 8. 命令の機能追加

(2) PRINT命令の機能追加

書式
    PRINT [{文字定数|式}] [{,|;}{文字定数|式} ...]

 [ ] 内は省略することができ、省略したときは、改行するだけである。
 パラメータとして文字定数または式(数値、変数、計算式)を指定するとそのデータを表示する。
 パラメータはカンマまたはセミコロンで区切って複数指定することができる。カンマで区切ったときは間隔としてタブが表示される。セミコロンで区切ったときはデータが連続して表示される。

 書式を構文図で表すと次のようになる。

void mb_print(void)
{
  永久ループ{
      次のトークン取得
      if 文字定数
          文字定数表示
      else if 引数なし(改行)
          永久ループ脱出
      else            /* 計算式 */
          式の結果表示

      次のトークン取得
      if カンマ
          タブ表示
      else if セミコロン
          何もしない
      else if 引数なし(改行)
          永久ループ脱出
      else
          文法エラー
  }
}
[mb_cmds3.c]
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:

61:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "gettoken.h"
/* 関数プロトタイプ宣言 外部参照 */
extern double expression(void); /* eval.c */
/* グローバル変数 */
extern double  hensuu[26];      /* 変数用(A〜Z) */

void mb_print(void)
{
    @        {
        get_token();
        if(A                )        /* 文字定数 */
            printf("%s", &token[1]);
        else if(B                )   /* 引数なし */
            break;
        else                        /* 計算式 */
            printf("%f", expression());
        get_token();
        if(*token == ',')
            printf("\t");           /* TAB 表示 */
        else if(*token == ';')
            ;                       /* 何もしない */
        else if(B                )
            break;
        else{
            printf("Error : PRINT 文法エラー\n");
            exit(1);
        }
    }
    printf("\n");
}
void mb_input(void)
{
<<省 略>>
}
[解答欄] (すべて半角文字で、空白文字もチェックされます。)
@    A    B   C
     
reidai5.mb
INPUT A
INPUT "Data(No ?) = ",B
INPUT "Data(Yes ?) = ";C
X = (A + B) * C
PRINT A
PRINT A,B;C
PRINT "Answer = ";C
END
実行結果
D:\Data\src>make
lcc  -c -o mb_cmds3.obj mb_cmds3.c
lcc -o mbas.exe mbas07.obj mb_cmds3.obj gettoken.obj eval.obj
lld @link.i
D:\Data\src>mbas reidai05.mb
? 12.345
Data(No ?) = 23.4567
Data(Yes ?) = ? 34.56
12.345000
12.345000       23.45670034.560000
Answer = 34.560000
終了します

 23.45670034.560000
 変数BとCがセミコロンで区切られているので、変数BとCの値が連続して表示されている。


前へ 目次へ 次へ 
Copyright © 2001 Hiroshi Masuda 

 

 

inserted by FC2 system