日期:2014-05-20  浏览次数:20834 次

暑假在家闲得要命,写了个简单的算术式解析器,大家来批评一下吧
class   Node <E> {

    //o:object
    public   E   o;
    //p:priority
    public   int   p;
    //l:left,r:right
    public   Node   l,r;
   
    public   Node(E   o){
        this.o   =   o;
    }
}

class   Stack <E> {

    private   Node   cur;
    private   int   size   =   0;
   
    public   void   push(E   o){
        Node <E>   n   =   new   Node <E> (o);
        if(cur!=null){
            cur.r   =   n;
            n.l   =   cur;
        }
        cur   =   n;
        size++;
    }
   
    public   E   pop(){
        if(size==0)
            return   null;
        try{
            size--;
            return   (E)cur.o;
        }finally{
            cur   =   cur.l;
            if(cur!=null)
                cur.r   =   null;
        }
    }
   
    public   int   size(){
        return   size;
    }
}

class   Tree{

    private   Node <String>   cur,root,start;
    private   Stack <Node>   nodes;
    private   String   s[],result;
   
    public   void   insert(String   s[]){
   
        if(s.length <=2)
            return;
        int   x   =   Parser.X_INIT;
        nodes   =   new   Stack <Node> ();
       
        //create   a   root   in   order   to   get   a   start
        //and   solve   the   condition   of   starting   with   "( "
        cur   =   new   Node <String> (Parser.operators[0]);
        cur.l   =   new   Node <String> ( "0 ");
        cur.p   =   Parser.p(Parser.operators[0])+x;
        root   =   cur;
        start   =   root;
       
        for(int   i=0;i <s.length;i++){
           
            //a   new   node
            Node <String>   n   =   new   Node <String> (s[i]);