Package abstrasy.interpreter

Examples of abstrasy.interpreter.InterpreterException


  }

 
  private final static double getFuzzy(Node enode) throws Exception {
    double v = enode.getNumber();
        if(v<0 || v>1){ throw new InterpreterException(StdErrors.Out_of_range); }
        return v;
  }
View Full Code Here


   * @return Node
   * @throws Exception
   * @todo Implémenter cette méthode abstrasy.PCFx
   */
  public Node eval(Node startAt) throws Exception {
      throw new InterpreterException(StdErrors.extend(StdErrors.Syntax_error,PCoder.getReserved(getPcode().getCode())));
    }
View Full Code Here

        Node s = startAt.getSubNode(1, Node.TYPE_CLIST);
        Node sdiff = startAt.getSubNode(2, Node.TYPE_CLIST);
        Node r;
   
        if(sdiff.size()<2)
            throw new InterpreterException(StdErrors.extend(StdErrors.Out_of_range,"diff list size < 2"));
       
        // il ne peut pas y avoir 2 x le même...
        Node diff = Node.createCList();
        for(int i=0;i<sdiff.size();i++){
            Node n = sdiff.getSubNode(i,Node.TYPE_NUMBER);
            if(isIn_int((int)n.getNumber(),diff))
                throw new InterpreterException(StdErrors.Duplicate_parameters);
            else
                diff.append(n);
        }
       
        // besoin d'une copie
        Node diff2 = diff.select(0, diff.size());
       
        // résulat...
        r = Node.createCList();
       
        for(int i=0;i<s.size();i++){
            if(isIn_int(i,diff) && (diff2.size()>0)){
                int j = select_int(i,diff2);
                remove_int(j,diff2);
                if(j<0 || j>=s.size()){
                    throw new InterpreterException(StdErrors.Out_of_range);
                }
                r.append(s.elementAt(j).secure());
            }
            else{
                r.append(s.elementAt(i).secure());
View Full Code Here

        if (qt==Node.TYPE_QSTRING) {
     
            int pcode = PCoder.getCode(snode.getString());
     
            if (pcode == PCoder.PC_ERR)
        throw new InterpreterException(StdErrors.extend(StdErrors.Syntax_error, "invalid pcode \'" + snode.getString() + "\'"));
     
      return Node.createPCode(pcode)
        }
   
        else if (qt==Node.TYPE_PCODE)
      return Node.createClone(snode);
           
    else if (qt==Node.TYPE_QPCODE)
      return Node.createClone(snode).letQuoted(false);
           
    else
      throw new InterpreterException(StdErrors.Argument_type_mismatch);
   
  }
View Full Code Here

        long timed=0;
        if(startAt.size()==3){
            startAt.requirePCode(1, PCoder.PC_TIMED);
            timed=(long)Math.ceil(startAt.getSubNode(2, Node.TYPE_NUMBER).getNumber());
            if(timed<0){
                throw new InterpreterException(StdErrors.Out_of_range);
            }
        }
        boolean timeout=false;
        try {
            if(timed>0){
                timeout=Interpreter.getSemaphore().suspendAndWaitResume(timed);
            }
            else{
                Interpreter.getSemaphore().suspendAndWaitResume();
            }
        }
        catch (InterruptedException iex) {
            Interpreter.Log("Interrupted... SEMAPHORE MSG");
            throw new SilentException();
        }
       
        /*
         * Si timeout, alors exception...
         */
        if(timeout){
            throw new InterpreterException(StdErrors.Timed_expired_exception);
        }
        return null;
    }
View Full Code Here

     */
        startAt.isGoodArgsCnt(3);
        String str = startAt.getSubNode(2, Node.TYPE_STRING).getString();
        int cnt = (int) startAt.getSubNode(1, Node.TYPE_NUMBER).getNumber();
        if(cnt<0){
             throw new InterpreterException(StdErrors.extend(StdErrors.Out_of_range, "" + cnt));
        }
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < cnt; i++) {
            sb.append(str);
        }
View Full Code Here

             *
             */
            sema.send_MSG(amie, msg);
        }
        else {
            throw new InterpreterException(StdErrors.extend(StdErrors.Actor_not_found, target));
        }
        return null;
    }
View Full Code Here

        //
        //System.out.println("Return getCallerSignature :" + interpreter.getCallerSignature());
        if ((!interpreter.isTerminalNode()) || interpreter.getCallerSignature() == 0)
            // il ne devrait pas y avoir de signature GUID = 0...
            // si c'est le cas, c'est que qu'aucune fonction n'a été appelée...
            throw new InterpreterException(StdErrors.Continue_misplaced);

        int arg_i=1;
        // récupérer le premier élément..
        Node r = startAt.getSubNode(arg_i++, Node.VTYPE_VALUABLE);
       
        //S'il s'agit d'une expression quotée, il ne peut pas y avoir d'autres éléments...
        if(r.getQType()==Node.TYPE_QEXPR){
            startAt.isGoodArgsCnt(2);
            r=r.deref().letQuoted(false);
        }
        else{
            // sinon... on construit une expression temporaire...
            r=new Node().append(r);
            while(arg_i<startAt.size())
                r.addElement(startAt.getSubNode(arg_i++, Node.VTYPE_VALUABLE));
            r.setDTrace(startAt.getDTrace());
        }
        try {
            Heap.setRETURN(r);
        }
        catch (Exception ex) {
            throw new InterpreterException(StdErrors.Return_register_error);
        }

        //

        if (interpreter.getBreakCode() != Interpreter.BREAKCODE_TAIL)
View Full Code Here

     */
    public Node eval(Node startAt) throws Exception {
        startAt.isGoodArgsCnt(1);
        Interpreter interpreter = Interpreter.mySelf();
    if (!interpreter.isTerminalNode()){
      throw new InterpreterException(StdErrors.Retry_misplaced);
    }
       
        throw new RetryException(startAt);
      
    }
View Full Code Here

        startAt.isGoodArgsCnt(4); // 1 seule liste...
        Node rnode = null;
        Node xnode = null;
        Node snode = startAt.getSubNode(i++, Node.TYPE_CLIST);
        if(snode.size()==0){
            throw new InterpreterException(StdErrors.Empty_list); // La liste ne peut pas être vide...
        }
        RandomRing[] rings = new RandomRing[snode.size()];
        for(int ri=0;ri<rings.length;ri++){
            Node[] s=snode.getSubNode(ri, Node.TYPE_CLIST).getArray();
            if(s==null){
                throw new InterpreterException(StdErrors.Empty_list); // aucune liste source ne peut être vide...
            }
            rings[ri] = new RandomRing(s);
        }   
        Diag row = new Diag(rings);
       
        Node btype = startAt.getSubNode(i++, Node.TYPE_PCODE);
        Node enode = startAt.getSubNode(i++, Node.TYPE_LAZY);
        Interpreter interpreter = Interpreter.mySelf();
        boolean oldCanLoop = interpreter.isCanLoop();
        boolean oldInLoop = interpreter.isInLoop();
        interpreter.setCanLoop(true);
        interpreter.setInLoop(true);

        try {
            if (btype.isPCode(PCoder.PC_DO)) {
                /**
                 * (foreach-diag [[l1]...[ln]] do {...})
                 */
                Node argv;

                Heap.push(); // nouvel espace local pour argv (exclusivment)
                Heap argv_h = Heap.current(); // optimisation du 09/03/2012
               
                Heap.push(); // nouvel espace local
                Heap local = Heap.current();

                /*
                 * Correction du 10 mai 2011:
                 * =========================
                 *    Les boucles du type do{...} s'arrête dès qu'un résultat est retourné. Cela ne signifie
                 *    bien entendu pas que la condition qui permet l'itération n'est pas vérifiée. Toutefois,
                 *    comme les boucle du type do{...} ne peuvent retourner qu'un seul résultat, il est inutile
                 *    de relancer l'itération suivante ddès qu'un résultat est fourni. Ainsi, pour permettre
                 *    de continuer la boucle, il est possible de placer le résultat dans une variable et non de
                 *    la retourner directement comme résultat.
                 *   
                 */
                while (interpreter.isCanIterate() && row.hasNext() && xnode==null) {
                    _clear_closure_(local);
                    argv = Node.createCList();
                    argv.setArray(row.getNext());
                    argv_h.put(PCoder.ARGV, argv);
                    xnode = enode.exec(true);
                }

                Heap.pull(); // supprimer l'espace local...
                Heap.pull(); // supprimer l'espace de noms argv...

            }
            else if (btype.isPCode(PCoder.PC_LIST)) {
                /**
                 * (foreach-diag [[l1]...[ln]] list{...})
                 */
                Node argv;
                xnode = Node.createCList();

                Heap.push(); // nouvel espace local pour argv (exclusivment)
                Heap argv_h = Heap.current(); // optimisation du 09/03/2012

                Heap.push(); // nouvel espace local
                Heap local = Heap.current();

                while (interpreter.isCanIterate() && row.hasNext()) {
                    _clear_closure_(local);
                    argv = Node.createCList();
                    argv.setArray(row.getNext());
                    argv_h.put(PCoder.ARGV, argv);
                    rnode = enode.exec(true);
                    if (rnode != null)
                        xnode.addElement(rnode.secure());
                   
                }

                Heap.pull(); // supprimer l'espace local...
                Heap.pull(); // supprimer l'espace de noms pour argv...


            }
            else {
                // erreur de syntaxe.
                throw new InterpreterException(StdErrors.Syntax_error);
            }
        }
        catch (Exception ex) {
            interpreter.consumeBreakCode_onLoop();
            interpreter.setCanLoop(oldCanLoop);
View Full Code Here

TOP

Related Classes of abstrasy.interpreter.InterpreterException

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.