Изучение конечных автоматов без памяти, способов определения КА – канонического, графового и табличного, методов построения недетерминированного КА по системе регулярных выражений, страница 6

  inpTxt.style.width=document.body.offsetWidth-40;

 if(document.body.offsetHeight>500)

  inpTxt.style.height=document.body.offsetHeight-400;

}

 --></script>

<script for=window event=onload><!--

inpTxt.style.visibility="visible"

tst.style.display="block"

rez.style.display="block"

tresize();

 --></script>

<script for=window event=onresize><!--

tresize();

 --></script>

<!-- end of Part_8 --><%@page contentType="text/html; charset=Windows-1251"%>

<%@page import="AuxObjects.*"%>

<%@page import="lexAcceptor.*"%>

<%@page import="java.io.*"%>

<%@page import="java.util.*"%>

<%

//Построено 03.10.2010 19:00:21 по исходному файлу/шаблону mainframe2.xml/lexAsTableSyntAsManySA_to_jsp

//end of Part_1

//Part_2: определения используемых классов

//enf of Part_2

//Part_3: глобальные переменные

final TraceInfo ti=new TraceInfo();

//end of Part_3

//Part_4: лексический анализатор

//Part_4_1: мультиавтоматный ЛА

class fAutomat extends fAutomatAsMTable{

 public fAutomat(int no,charToIndex cToI,int[][] ctlTbl,textReader tr){

  super(no,cToI,ctlTbl,tr);

 }

 public fAutomat(charToIndex cToI,int[][] ctlTbl,textReader tr){

  super(cToI,ctlTbl,tr);

 }

}

//Part_4_1: мультиавтоматный ЛА

class lexAnalyzer{

 Stack lexStk=new Stack();           //стек для хранения индексов лексических акцепторов

 private fAutomat[] lexAcceptors=new fAutomat[4];           //массив лексических акцепторов

 private fAutomat lexAcceptor;           //текущий (активный) лексический акцептор

 private textReader inp;           //входной поток литер

 private boolean ignoreLastWord;           //флажок необходимости не возвращать (игнорировать) последнюю обнаруженную лексему

 private lexem Lexem;           //лексема

//набор транслитераторов

 private charToIndex charToI0=new charToIndex();

 private charToIndex charToI1=new charToIndex();

 private charToIndex charToI2=new charToIndex();

 private charToIndex charToI3=new charToIndex();

//набор управляющих таблиц

 private int[][] controlTable0={

   {-1,5,3,-1073741831,-1073741832,-2,4,2,1},

   {-3,-3,-3,-3,-3,-3,6,-3,1},

   {-4,-4,3,-4,-4,-4,-4,3,-4},

   {-2,-2,3,-2,-2,-2,-2,3,-2},

   {-5,-5,-5,-5,-5,7,4,-5,-5},

   {-6,5,-6,-6,-6,-6,-6,-6,-6},

   {-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,8,-2147483647,9},

   {-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,10,-2147483647,-2147483647},

   {-9,-9,-9,-9,-9,-9,8,-9,9},

   {-9,-9,-9,-9,-9,-9,9,-9,9},

   {-10,-10,-10,-10,-10,-10,10,-10,-10} };

 private int[][] controlTable1={

   {-1,-1073741827,-1073741826} };

 private int[][] controlTable2={

   {-1,-1073741826} };

 private int[][] controlTable3={

   {-1,-1073741828,1,-1073741827},

   {-2,-2,1,-2} };

//Part_6_0 данные и методы из правил

int codeCharError = -20000;

Stack stack=new Stack();

String s;

//end of Part_6_0

//Part_4_2: конструктор мультиавтоматного ЛА

 public lexAnalyzer(textReader rdr){

  inp=rdr;           //запомним указатель входного потока

//далее для каждого автомата создадим требуемые совокупности диапазонов литер

  charToI0.addRange('\u0009','\n',1);

  charToI0.addRange('\r','\r',1);

  charToI0.addRange(' ',' ',1);

  charToI0.addRange('\"','\"',2);

  charToI0.addRange('*','+',2);

  charToI0.addRange('-','-',2);

  charToI0.addRange('/','/',2);

  charToI0.addRange('=','=',2);

  charToI0.addRange('\'','\'',3);

  charToI0.addRange('(',')',4);

  charToI0.addRange('[','[',4);

  charToI0.addRange(']',']',4);

  charToI0.addRange('{','{',4);

  charToI0.addRange('}','}',4);

  charToI0.addRange(',',',',5);

  charToI0.addRange('0','9',6);

  charToI0.addRange(':',':',7);

  charToI0.addRange('A','Z',8);

  charToI0.addRange('a','z',8);

  charToI0.addRange('А','я',8);

  charToI1.addRange('\'','\'',1);