つづき
FUNCTION factor(s$) !因子 LET CntOfNOT=0 !補演算子の数 LET t$=token$(s$) IF t$="¬" OR t$="〜" OR t$="!" THEN !補演算なら LET p=p+1 !eat it LET CntOfNOT=1 LET t$=token$(s$) DO WHILE t$="¬" OR t$="〜" OR t$="!" !補演算が続けば LET p=p+1 !eat it LET CntOfNOT=CntOfNOT+1 LET t$=token$(s$) !次へ LOOP END IF CALL push(stack_Eval,sp_Eval, CntOfNOT) !save it LET t$=token$(s$) IF t$="(" THEN !括弧なら LET p=p+1 !eat it LET v=propositional_expression(s$) !命題 !LET v=boolean_expression(s$) !式 CALL CheckToken(s$,")") !閉じ括弧か確認する ELSE LET v=num(s$) !数を得る END IF CALL pop(stack_Eval,sp_Eval, CntOfNOT) !restore it LET t$=token$(s$) IF t$="'" THEN !補演算なら LET p=p+1 !eat it LET CntOfNOT=CntOfNOT+1 LET t$=token$(s$) DO WHILE t$="'" !補演算が続けば LET p=p+1 !eat it LET CntOfNOT=CntOfNOT+1 LET t$=token$(s$) !次へ LOOP END IF IF MOD(CntOfNOT,2)=1 THEN LET v=BitNOT(v) !v=!v LET factor=v END FUNCTION
FUNCTION num(s$) !数 LET c=func(s$) IF c>=0 THEN !組込み関数なら LET v=cTBL(c) ELSE LET c=var(s$) IF c>0 THEN !変数なら LET v=vTBL(c) !1=A,2=B,…,26=Z ELSE LET c=digit(s$) IF c>=0 THEN !数値なら LET v=cTBL(c) ELSE CALL Error("不正な文字です。") END IF END IF END IF LET num=v END FUNCTION
FUNCTION func(s$) !組込み関数 LET t$=token$(s$) IF t$="φ" THEN !空集合 LET p=p+1 !eat it LET func=0 ELSEIF t$="Ω" THEN !普遍集合 LET p=p+1 !eat it LET func=1 ELSE LET func=-1 END IF END FUNCTION
FUNCTION var(s$) !変数 LET t$=UCASE$(token$(s$)) !大文字へ IF "A"<=t$ AND t$<="Z" THEN LET p=p+1 !eat it LET var=ORD(t$)-ORD("@") !オフセット @=0,A=1,B=2,…,Z=26 ELSE LET var=-1 END IF END FUNCTION
FUNCTION digit(s$) !1文字の数字(2進法) LET t$=token$(s$) IF "0"<=t$ AND t$<="1" THEN LET p=p+1 !eat it LET digit=VAL(t$) !値 ELSE LET digit=-1 END IF END FUNCTION
|