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

В ходе выполнения работы была изучена структура программных модулей, построенных пакетом ВебТрансЛаб. В работе были рассмотрены графовый и табличный типы реализации конечных автоматов, реализация вызова действий, определенных в таблице лексических правил. Результатом работы являются доработанные лексические правила, отлаженная последовательность автоматов выделяющих символьные константы, с поддержкой экранирования служебных символов.

6.Приложение

Код лексического акцептора при табличном способе реализации

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

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

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

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

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

<%

//Построено 08.11.2010 13:23:05 по исходному файлу/шаблону laba2_lastversion.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,1,2,-1073741831,-1073741829,-1073741830,-1073741830,-2147483647,-1073741830,7,6,-1073741827,8,5,5,5,4,5,5,5,3,5},

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

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

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

   {-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,9,-2147483647,-2147483647,-2147483647,11,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647},

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

   {-4,-4,-4,-4,-4,-4,-4,12,-4,-4,6,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4},

   {-6,-6,-6,-6,-6,-1073741832,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6,-6},

   {-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-1073741830,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647},

   {-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,-2147483647,13,-2147483647,-2147483647,13,13,13,13,13,13,13,13,13},