その問題におけるプログラムは入力された代入文に文法エラーがないかチェックし、エラーがあればエラーメッセージを表示し終了。
エラーがなければ代入文を変換して表示し終了するといったものです。
問題が起こったのは代入文の文法エラーチェックの部分です。
入力された代入文を一文字ずつ二つの配列S,Vに文字と専用の文字コードを代入していくプログラムなのですが、以下のように組んでみたらstrtrim関数で連続した文字を削除してしまうため代入文を正しく認識することができません。
どのように修正すればいいのかご指摘お願いいたします。
・入力された代入文を配列S,Vに格納するルーチン
※専用の文字コード
S[i]:<< >> 英字 数字 = +,- *,/
V[i]:0 1 2 3 10 11 12
*ready2analyze if analyzed > 0 : gosub *reset x2 = 10 : y2 = 50 pos x2, y2 strerror = match(eval, "[^-+*/=A-Za-z0-9]", 1) if strlen(strerror) > 0 : goto *error backup = eval cnt_eval = strlen(eval) + 1 repeat cnt_eval if cnt == 0 { S.cnt = "<<" } else { S.cnt = match(eval, "[-+*/=A-Za-z0-9]", 1) code = wpeek(S.cnt, 0) eval = strtrim(eval, 1, code) } if S.cnt == "<<" : V.cnt = 0 if S.cnt == match(S.cnt, "[A-Za-z]") : V.cnt = 2 if S.cnt == match(S.cnt, "[0-9]") : V.cnt = 3 if S.cnt == "=" : V.cnt = 10 if S.cnt == "+" | "-" : V.cnt = 11 if S.cnt == "*" | "/" : V.cnt = 12 loop cnt_eval++ S.cnt_eval = ">>" V.cnt_eval = 1 string = "" val = "" foreach S string += S.cnt loop foreach V if cnt > 0 : val += "/" val += "" + str(V.cnt) loop message = "" + eval + "\n" + string + "\n" + val + "\n\n" analyzed++ goto *analyze