C言語-トランスレータ(mbas to C)
前へ 目次へ 次へ 

 8. 代入文(計算式)

 mini basicの代入文は、C言語とほぼ同じであるから、変数名(A〜Z)だけを配列hensuuに変換すればよい。

変数 = 計算式

 計算式はすでに作成した関数get_shiki(ファイルgetshiki.c)で取り出すことができる。
 処理としては、最初のトークンが変数であり、かつ、2つ目のトークンが'='であれば代入式であると判断できる。代入式であれば、関数get_shikiで計算式を取り出し表示する。
 関数get_shikiは、四則演算だけではなく、論理演算も正しく(例えば、<>は!=に)変換した上で取り出すことができる。ただし、取り出した式の先頭には、空白が1文字付く。

[main10.c]
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
        else if(!strcmp("REM", token))
            printf("REM 命令です\n");
        else if(isalpha(@    ) && strlen(A    ) == 1){  /*  変数名チェック*/
            ptab(tab);
            printf("hensuu[%d]", B             );      /* 変数名変換表示 */
            if(*get_token() != '='){                   /* = チェック */
                printf("代入文 文法エラー \n");
                exit(1);
            }
            printf(" = %s;\n", C              );       /* = と計算式表示 */
        }else
            printf("命令以外です\n");
    }
    printf("}\n");
}
[解答欄] (すべて半角文字で、空白文字もチェックされます。)
@   A   B   C
     
実行結果
D:\Data\src>make
lcc  -c -o main10.obj main10.c
lcc -o mbt.exe  main10.obj  mbt_sub.obj gettoken.obj getshiki.obj
lld @link.i
D:\Data\src>mbt reidai3.mb
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
        double hensuu[26];
        char buff[256];
        printf("A=");
        gets(buff);
        hensuu[0] = atof(buff);
        printf("Z=");
        gets(buff);
        hensuu[25] = atof(buff);
        hensuu[23] =  hensuu[0] + hensuu[25] * 10;
        printf("A+Z*10=");
        printf("%f",  hensuu[23]);
        printf("\n");
        hensuu[23] =  ( hensuu[0] + hensuu[25] ) * 10;
        printf("(A+Z)*10=");
        printf("%f",  hensuu[23]);
        printf("\n");
        printf("終了します\n");
        exit(1);
}

D:\Data\src>mbt reidai3.mb > reidai3.c

D:\Data\src>cc reidai3.c
lld @link.i
D:\Data\src>reidai3
A=12.345
Z=10
A+Z*10=112.345000
(A+Z)*10=223.450000
終了します
reidai3.mb
INPUT "A=",A
INPUT "Z=",Z
X = A + Z * 10
PRINT "A+Z*10=";X
X = (A + Z) * 10
PRINT "(A+Z)*10=";X
END

※ メインのファイル名をmain10.cとしたので、makefileの1行目を次のように変更する。(サブのファイル名はそのままでよい)

MAIN = main10



 

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

 

 

inserted by FC2 system