SHARE
TWEET

step4

vikt144 Jan 27th, 2020 2 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  //step4
  2. // https://anonfile.com/N9l1LeQ3n7/vm_7z
  3.  
  4. // файл usesStack.java
  5. import java.util.*;
  6. import forth.*;
  7.  
  8.  
  9. public class usesStack {
  10.  
  11.  
  12.     public static void main(String[] args) {
  13.  
  14.         Scanner in = new Scanner(System.in);
  15.  
  16.         System.out.println(" введите строку или end для выхода");
  17.  
  18.  //////////////////////////////////////////////STACK//////
  19.   STACK ST,STa;   // стеки данных и адресный      
  20.   ST=new STACK();
  21.   STa=new STACK();  
  22.   int[] stackarray = new int [20];
  23.   int[] adrstackarray = new int [20];  
  24.   int[] ports = new int[20];  
  25.  
  26.   ST.stack=stackarray;
  27.   STa.stack=adrstackarray;  
  28.   ////////////////////////////////////////
  29.  
  30.  fas as = new fas();
  31.  
  32.       as.ST=ST;  //   добавить стек
  33.       as.here=  2;
  34.       as.  latest=3;
  35.       as.state   =4;      
  36.       as.  memory[as.here]=6; //взято от балды
  37.       as.  memory[as.latest]=0; // записи в словари еще не создавались
  38.       as.  memory[as.state] =0; // 0 на данный момент исполнение        
  39.     Vector V=null;
  40.      V = as.initVirtualMem(0);
  41.     as.StringVector=V;
  42.  
  43.    FVM VM=new FVM();
  44.    VM.stack=as.ST;
  45.    VM.adrStack=STa;
  46.    VM.image=as.memory;
  47.    VM.ports=ports;
  48.    as.VM=VM;
  49.  
  50.    VM.as=as;
  51.  
  52.  
  53.  
  54. ////////////////////////////////// загрузка форт слов
  55. /*  перенесено в fas
  56.   public String initwords =        //  текст, определяющий опкоды виртуальной машины
  57.                                    //  " имя "  op  -1/1   immediate/noimmediate
  58.   " NOP 0  -1      LIT  1 -1      DUP  2  -1    DROP  3  -1  SWAP  4  -1 "+
  59.  "     PUSH  5  -1    POP  6 -1      CALL  7  -1    JUMP  8 -1   ;  9 1 " +
  60.    "  GT_JUMP   10 -1 LT_JUMP  11 -1  NE_JUMP  12  -1     EQ_JUMP  13  -1 " +
  61.    "  FETCH  14  -1   STORE  15  -1      " +
  62.   "   +  16  -1   -  17 -1   *  18  -1 DIVMOD  19  -1 " +
  63.   "   AND  20   -1   OR  21 -1   XOR  22  -1 SHL  23  -1  SHR  24 -1 "+
  64.   "   ZERO_EXIT  25 -1    INC  26  -1   DEC  27 -1 "+
  65.   "   IN  28  -1  OUT  29 -1    WAIT  30  -1 "+
  66.  "    LIT32  31 -1  endpart -111 -1 "+
  67. "end_ "
  68. ;  
  69. */
  70.   String ini =  as.initwords;
  71.   as.TIB=null; as.TIB=ini;
  72.   as._IN=0;
  73.   boolean enddo=false; //для выхода из цикла
  74.   do {
  75.  ///   String    name    = as.WORD(ini);
  76.     int old = as._IN;
  77.     as.ST.push(666);  
  78.     as.WORD();    // на стеке 0    
  79.     as.ST.pop();  // сброс стека
  80.     System.out.println("added " + as.StrBuffer);  
  81. //    as.cre1();  
  82.  
  83.    
  84.     if (as.StrBuffer.compareTo("end_") != 0) {
  85.       as._IN=old;  // вернуть указатель в строке
  86.       as.cre1();
  87.  
  88.       as.ST.push(666);
  89.       as.WORD();
  90.       as.ST.pop();  // сброс стека      
  91.       String codeString = as.StrBuffer;
  92.  
  93.       as.ST.push(666);
  94.       as.WORD();
  95.       as.ST.pop();  // сброс стека    
  96.       String immString  = as.StrBuffer;
  97.  
  98.       int code=0;
  99.       try { code=Integer.parseInt(codeString);} catch (Exception e){ System.out.print("num expected");}  
  100.  //     int imm=0;
  101.  //     try {imm=Integer.parseInt(immString);} catch (Exception e){ System.out.print("huynia imme");}  
  102.  //     boolean bool =  imm>0;
  103.  
  104.       as.ST.push(code); as.comma16();
  105.            
  106.       as.ST.push(9); as.comma16();  // 9 - код операции ";" возврат из подпрограммы
  107.  
  108. //System.out.print(name+code + " " +imm);
  109.       }
  110.        else enddo = true;
  111.      } while (! enddo) ;
  112.  
  113. ///////////////////////////////////////////
  114.  
  115.  as.TIB=null; as.TIB="EXIT  . "; as._IN=0; // тут дальнейшие определения
  116.  
  117.  as.cre1();  // создается  определение для exit
  118.  
  119.  as.exit_addr=as.memory[as.here];//сохранить точску входа в exit,чтобы положить на стек возвратов  
  120.  
  121.  as.ST.push(1); as.comma16();  // lit  
  122.  as.ST.push(0); as.comma16();  // 0
  123.  as.ST.push(1); as.comma16();  // lit  
  124.  as.ST.push(0); as.comma16();  // 0
  125.  as.ST.push(29); as.comma16(); // out      -- вывод в порт 0, номер фции 0 "exit"
  126. /*
  127.        as.find_("EXIT");
  128.        ST.pop(); //
  129.        as.exit_addr=ST.pop(); //сохранить точску входа в exit,чтобы положить на стек возвратов  
  130.  */
  131. // определяется "."
  132.  
  133.  as.cre1();
  134.   as.ST.push(1); as.comma16();  // lit  
  135.  as.ST.push(1); as.comma16();  // 1    
  136.  as.ST.push(1); as.comma16();  // lit  
  137.  as.ST.push(0); as.comma16();  // 0  // номер порта
  138.  as.ST.push(29); as.comma16(); // out      -- вывод в порт 0, номер фции 0 "exit"
  139.  
  140. /////////////////////////////////////////////////////
  141.  
  142. /*
  143. <адр строки> --  тут число , если ноль, то StrBuffer иначе индекс  в Vector
  144. */
  145.  
  146. System.out.println( "набирать  DUP SWAP ... большими буквами а end для выхода маленькими" );
  147.  
  148.  as.TIB=null; as.TIB="";  
  149.  // String TIB=as.TIB;  //
  150.  while (as.TIB.compareTo("end")!=0) {
  151.            as.TIB  =null;
  152.            as.TIB  =in.nextLine();
  153.                  
  154.         as._IN=0;                      // !  changed
  155.        boolean log = true;    
  156.            while ( log ) {
  157.        String st;//  = as.word_(TIB);
  158.         int old_in = as._IN;
  159.         as.ST.push(666);  
  160.         as.WORD();    // на стеке 0
  161. //System.out.println("getti "+ as.StrBuffer);      
  162.            st = as.StrBuffer;  //  ;   // !  changed
  163.        if (st=="") { log = false;  }
  164.               else { as.FIND();                // на стеке n  и
  165.                  int n = as.ST.pop();     // снять со стека признак немедленного исполнения
  166. //                     int ind = as.ST.pop();  // снять со стека cfa
  167.                  if (n==0) {
  168.                       as.number(); //забирает со стека <адр строки>
  169.                   if (as.error != 0)  {
  170.                                        log = false;
  171.                            System.out.println("слово " +  st + " не найдено" );
  172.                                                    as.error = 0;
  173.                            } else System.out.println("число " +  st + " на стеке" );
  174.  
  175.                   }
  176.                   else {
  177.                   // int ind = as.ST.pop();  // снять со стека cfa
  178.                   as.exec();
  179.                  
  180.                  
  181.                   }
  182.  
  183.                 }
  184.        }//while log
  185.  }//while      
  186.  
  187.   printm(as.memory,0  , 8 , 25 );      
  188.  
  189.   for (int k=0;k<V.size();k++) System.out.println(V.elementAt(k).toString() ) ;
  190.  
  191. //  System.out.println(as.getTypeData( V ,0 )  );
  192. }//main
  193.  
  194. static void printm(short[] mem,  int start , int str, int col) { //dump
  195.   int pos=start;
  196.   for (int l=0;l<str;l++) {
  197.    for (int k=0;k<col;k++) {
  198.      if (pos < mem.length )
  199.        {System.out.print(mem [pos]+" "); pos++;
  200.        }//endif
  201.      }//for  
  202.     System.out.println("# \n");
  203.  }//for
  204.  } //void
  205.  
  206. }//all
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top