07/09/11 23:28:26 x8I9fL8z
>>273
逆ポーランド記法にできれば結構楽よ
// 変数は自分で管理
var MyVariables = {a: 1, b: 100, name: "foo"};
// 変数と数値と文字列の区別は適当に目印つける
var MyCondition = ["V:a", "N:1", "==", "V:b", "N:250", "<", "V:name", "S:Dave", "==", "||", "&&"];
var _stack = new Array();
for(i=0;i<MyCondition.length;i++){
var t = MyCondition[i];
switch(t){
case "==": var wk = _stack.pop() == _stack.pop(); _stack.push(wk); break;
case "&&": var wk = _stack.pop() && _stack.pop(); _stack.push(wk); break;
case "||": var wk = _stack.pop() || _stack.pop(); _stack.push(wk); break;
case "<": var wk = _stack.pop() > _stack.pop(); _stack.push(wk); break;
default: // 演算子以外は項である
var type = substring(t, 1, 2);
var term = substring(t, 3, t.length-2);
switch(type){
case "S:": _stack.push(term); break;
case "N:":_stack.push(parseInt(term)); break;
case "V:":_stack.push(MyVariables[term]); break;
}
break;
}
trace("「"+t+"」を処理した後のスタックの状態");
for(n=0; n<_stack.length;n++) trace("["+n+"] "+_stack[n]);
}
trace("result:" + _stack[0]); // 演算結果が[0]に残る