SHARE
TWEET

step 3

vikt144 Nov 23rd, 2019 104 in 135 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. // file    forth/fas.java
  3.  
  4. package forth;
  5.    
  6. import java.util.*;
  7. import java.lang.*;
  8.  
  9. public class fas {
  10.  
  11.   public STACK ST;
  12.  
  13. public   static int here;  // адрес переменной HERE в массиве memory
  14. public   static int latest; // адрес переменной LATEST в массиве memory
  15. public   static int state;
  16. // static
  17.  public short[] memory = new short[1000];  //выделяем память из 16 битных целых размером в 1000
  18.  
  19.  public int exit_addr;  //адрес процедуры выхода
  20.  
  21. //////////////////////////////////////////////////////////  vectors
  22. public  Vector StringVector;
  23.  
  24. public Vector initVirtualMem(int i) {
  25.  Vector v = new Vector();
  26.  Integer I = new Integer(i);  // тип Integer, это объектное представление типа int
  27.  v.addElement(I);  
  28.  return v;
  29. }
  30.  
  31.  
  32. public int appendData(Vector v,Object obj) {
  33.  
  34.     Integer  Ind = (Integer)v.elementAt(0);   // получить значение начального элемента вектора как Integer
  35.     int ind = Ind.intValue();                      // преобразовать в нормальный int
  36.    
  37.     if ( ind == 0) {                                  // если равен 0, то свободных элементов нет
  38.       v.addElement(obj);//                    // тогда добавляем объект  к вектору
  39.       ind=v.size()-1;
  40.       }
  41.         else {
  42.           Integer I =( Integer)v.elementAt(ind);  // иначе ind указывает на свободный элемент (СЭ)
  43.           int i = I.intValue();                                //там хранится предыдущий  (СЭ) который получаем
  44.     v.setElementAt(obj, ind);                  // Замещаем элемент вектора с номером ind объектом obj
  45.     v.setElementAt(I, 0);                    // в начальный элемент вектора пишем предыдущий  СЭ
  46.           }
  47.  
  48.   return ind;          // возвращаем индекс объекта в векторе
  49. }
  50.  
  51.   public int removeData (Vector v, int ind){
  52.     int ret = 0;
  53.     if ( ind>v.size()-1) return  -1 ;
  54.     if (getTypeData( v, ind).compareTo("java.lang.Integer")==0 )  return  -2 ;
  55.      
  56.     if ( ind==v.size()-1) v.removeElementAt(ind) ;
  57.       else {
  58.            v.setElementAt(null, ind);
  59.            Integer IndOld=(Integer)v.elementAt(0); // получить предыдущее знач 0 элемента
  60.            int ind_=IndOld.intValue();  
  61.            v.setElementAt(IndOld, ind);     // записать его в элемент который на удаление
  62.            Integer IndNew = new Integer(ind);
  63.            v.setElementAt(IndNew, 0);   // 0 элемент указывает на новый        
  64.     }        
  65.   return ret;
  66.   }
  67.  
  68. public String getStringv(Vector v, int ind){
  69.   return (String)v.elementAt(ind);
  70. }
  71.  
  72. public String getTypeData( Vector v, int ind){
  73. return  v.elementAt(ind) . getClass().getName() ;
  74. }
  75.  
  76. // link strsize nomberVector
  77.  
  78. ////////////////////////////////////////////////////////////////////////////////////
  79.  
  80.  
  81.  
  82.  public  void cre0 (String s) {   // временная вспомогательная ф-ция. создающая упрощенную запись в словаре
  83.   short tmp = memory[here]; //получить here
  84.   memory[tmp]=memory[latest];
  85.   memory[latest]=tmp;
  86.   tmp++;
  87.   int i = s.length();    // получаем длинну строки
  88. //  if (immediate)  i=0-i; // если immediate , число отрицательно, (временно для простоты)
  89.   memory[tmp]= (short)i;
  90.   tmp++;  
  91.   i=appendData(StringVector, s);
  92.   memory[tmp]= (short)i;  
  93.   tmp++;
  94.   memory[here]=tmp;  //устанавливается новое значение here
  95. }
  96.  
  97. public void comma16() {  // эквивалентно запятая "," только снимает 16 bit
  98.   short i = (short)ST.pop();
  99.   int adr = memory[here];
  100.   memory[adr]=i;
  101.   memory[here]++;
  102. }
  103.  
  104.  public  void cre1() { // (String s) {   // временная вспомогательная ф-ция. создающая упрощенную запись в словаре
  105.   ST.push(666);  // код бланк для word - пока не используется
  106.   WORD();
  107.   ST.pop();            // сброс стека, world пока возвращает только 0
  108.   String s=StrBuffer; // реализовать проверку на ""  //
  109.  
  110.   short tmp = memory[here]; //получить here
  111.   ST.push(memory[latest] );
  112.   comma16();
  113.   memory[latest]=tmp;  
  114.  
  115.   ST.push( s.length() );
  116.   comma16();
  117.   ST.push( appendData(StringVector, s) ); //appendData возвращает индекс на строку
  118.   comma16();
  119.   ST.push(999);
  120.   comma16();
  121. }
  122.  
  123.  
  124.  
  125. public  int number(String s) {  // тут ьольше 0
  126.   int ret = 0;
  127.   int ii;
  128.   try {ii = Integer.parseInt(s);
  129.  //      ST.push(ii);
  130.  ret = ii;  
  131.       } catch (Exception e) {ret=-1;}
  132.   return ret;
  133. }
  134. ////////////////////////////////реализация WORD//////////////////////////////////////////
  135.  
  136. public int BLK_ = 0 ; // перенести в память
  137. public  int _IN=0;       // !!!!to memory
  138. public String TIB; //  строковая переменная - иммитирует tib
  139. public String StrBuffer;  //  сюда возвращает значение word и забирает find
  140.  
  141.  
  142. public static  boolean ifblank(char ch) {
  143.    boolean ret=false;
  144.    if(ch == ' ' || ch == '\n' || ch == '\t' || ch=='\r') ret = true;
  145.  return ret;  
  146.  }
  147.  
  148. static  public int skipBlank(String s, int _in) {
  149.       int position;
  150.       position=_in;
  151.       boolean log=true;
  152.       while (log)  
  153.       if ( (position)==s.length() ) {position= -1; log = false; }  // достигнут конец потока возвращает -1
  154.        else
  155.        {
  156.          if  ( ifblank( s.charAt(position))  ) position++;  else log=false;
  157.          }  //else
  158.  return position;
  159. } //endfunk
  160.    
  161.  static    public int skipUntilBlank(String s, int _in) {
  162.       int position;
  163.       position=_in;
  164.       boolean log=true;
  165.       while (log)  
  166.       if ( (position)==s.length() ) {  log = false; }  // достигнут конец  
  167.        else
  168.        {
  169.          if  ( ! ifblank( s.charAt(position))  ) position++;  else log=false; //если не бланк
  170.          }  //else
  171.  return position;
  172. } //endfunk
  173.  
  174. public   String word_( String s ) {
  175.   String w = null;
  176.   int start, ends;
  177.   start=skipBlank(s, _IN);  
  178.   if (start==-1) w=""; // достигнут конец потока, возвращает слово нулевой длинны
  179.      else {
  180.      ends=skipUntilBlank(s, start);  
  181.      _IN=ends;
  182.       w=s.substring(start,ends);  
  183.       }
  184. return w;    
  185. }  
  186.  
  187. public void WORD() {
  188.   int charBlank=ST.pop();     // !! снятие со стека blank -- пока не используется
  189.   String s=null;
  190.   if (BLK_==0) s=TIB;
  191.      else
  192.        s = (String)StringVector.elementAt(BLK_);
  193.   String si=word_(s);
  194.   StrBuffer=null; StrBuffer=si;
  195.   ST.push(0);  // если 0, то сохраняет в StrBuffer
  196. }
  197.  
  198.  
  199. public void FIND() { //поле кода   n 0 - не найдено  если не отрицательно то immediate
  200.  int ret=0;
  201.  boolean bool=false;
  202.  ST.pop(); // сброс стека, ----> 0 тут должен анализ ecли  0 то  s=StrBuffer иначе из вектора
  203.  String s=StrBuffer;
  204.  
  205.   boolean immediate=false;
  206.  int tmp=memory[latest];
  207.  while (tmp != 0 && ! bool) {
  208. // immediate=false;  
  209.  int len = memory[tmp+1];
  210. // if (len<0) {immediate=true;} // если длинна слова отрицательна  - immediate=true;
  211.  int ind = memory[tmp+2]; // получаем инд в векторе           
  212.  String si = (String)StringVector.elementAt(ind);
  213.  if ( s.compareTo(si)==0) {
  214.     bool = true;    
  215.     ret=tmp+3;// memory[tmp+3]; //cfa
  216.     }                    
  217.    else
  218.    tmp=memory[tmp];
  219.  
  220.  }//while  
  221.  
  222.  ST.push(ret);
  223.  if (ret==0) ST.push(0);
  224.          else
  225.      if (   ! immediate) ST.push(-1);
  226.        else ST.push(1);
  227.  
  228. }  
  229.  
  230.  
  231. }  //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