top down precedence operator parser tournament version
top down precedence operator parser tournament version
♥0 |
Line 39 |
Modified 2010-06-13 01:52:49 |
MIT License
archived:2017-03-20 02:07:16
ActionScript3 source code
/**
* Copyright h_sakurai ( http://wonderfl.net/user/h_sakurai )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/cK2B
*/
// top down precedence operator parser tournament version
package {
import flash.display.Sprite;
import flash.text.*;
public class FlashTest extends Sprite {
private var tf:TextField;
public function FlashTest() {
tf = new TextField();
addChild(tf);
var aloha:Object = read("1 + 2 * 3");
tf.text = ""+aloha;
}
}
}
// 愛の結合
class Aloha {
public var guy:String;// 人
public var l:Object;// 左の人
public var r:Object;// 右の人
// コンストラクタ
public function Aloha(guy:String,l:Object,r:Object) {
this.guy = guy;
this.l = l;
this.r = r;
}
// 文字列取得
public function toString():String {
return guy+"("+l+","+r+")";
}
}
// 読み込み
function read(str:String):Object {
// 文字列から人の列を作ります。
var guys:Array = str.split(/\s+/)
// 戦う人の力の表です
var powers:Object = {"+":10,"-":10,"*":20,"/":20};
// トーナメントで戦います
// @param p:int 場の力です。
function tournament(p:int):Object {
// 1人でまずチームを作ります。
var team:Object = guys.shift();
// 次の人は場の力と戦います。
while(powers[guys[0]] > p) {
// 勝ったらその人を取り出します。
var guy:String = guys.shift();
// 勝った人主催でトーナメントを行い、新しいチームを作ります。
// 新しいチームはAloha(愛)の結合で形作られます。
team = new Aloha(guy, team, tournament(powers[guy]));
}
// 勝ち残ったチームが返ります。
return team;
}
// 力0でトーナメントを開催し結果を返します。
return tournament(0);
}