//Part_2: определения используемых классов
class fAutomat extends fAutomatAsGraph{
public fAutomat(int no,int stCnt,textReader tr){
super(no,stCnt,tr);
}
public fAutomat(int stCnt,textReader tr){
super(stCnt,tr);
}
}
//end of Part_2
//Part_3: глобальные переменные
final TraceInfo ti=new TraceInfo();
//end of Part_3
//Part_4: лексический анализатор
class lexAnalyzer{
fAutomat lexAcceptor; //текущий (активный) лексический акцептор
lexem Lexem=new lexem(); //текущая лексема
boolean ignoreLastWord; //флажок необходимости не возвращать (игнорировать) последнюю обнаруженную лексему
//Part_4_0: данные и методы из правил
Stack stack = new Stack();
class Record
{
private int _index;
private String _text;
private boolean _isId;
private boolean _isConstBoolean;
private boolean _isConstSymbol;
private void _ResetType() {
_isId = false;
_isConstBoolean = false;
_isConstSymbol = false;
}
public Record(String text)
{ _text = text; }
public String GetType()
{
String type = new String();
if(_isId) type = "Id";
else if(_isConstBoolean)
type = "ConstBoolean";
else if(_isConstSymbol) type = "ConstSymbol";
else type = "Undefined";
return type; }
public void IsId()
{
_ResetType();
_isId = true;
}
public void IsConstBoolean()
{
_ResetType();
_isConstBoolean = true;
}
public void IsConstSymbol()
{
_ResetType();
_isConstSymbol = true;
}
public int GetIndex()
{ return _index; }
public String GetText() { return _text; }
} // Конец класса 'Record'
class Table {
private int _size;
private ArrayList<Record> _records;
public Table()
{ _size = 0; _records = new ArrayList(); }
public void Add(Record R)
{ if(this.Seach(R.GetText()) == null) _records.add(R); }
public Record Seach(String text)
{ for(Record r: _records)
if(r.GetText().compareToIgnoreCase(text)==0)
return r; return null; }
public String Info()
{
String info = new String();
info = info + "Id(";
for(Record r: _records)
if(r.GetType().compareTo("Id") == 0) info = info + " " + r.GetText();
info = info + ") ConstBoolean("; for(Record r: _records)
if(r.GetType().compareTo("ConstBoolean") == 0)
info = info + " " + r.GetText();
info = info + ") ConstSymbol("; for(Record r: _records)
if(r.GetType().compareTo("ConstSymbol") == 0) info = info + " " + r.GetText();
info = info + ")";
return info;
}
}
Record R;
Table T = new Table();
//end of Part_4_0
//Part_4_1: мультиавтоматный ЛА
Stack lexStk=new Stack(); //стек индексов лексических акцепторов
fAutomat[] lexAcceptors=new fAutomat[4]; //массив лексических акцепторов
//Part_4_2: конструктор мультиавтоматного ЛА
public lexAnalyzer(textReader rdr){
faState state; //переменная для временного хранения состояния конечного автомата
//дальше идет создание автоматов, их состояний, выходящих из них дуг и запоминание всего этого в соответствующих местах
lexAcceptors[0]=new fAutomat(0,26,rdr);
state=new faState(12);
state.setArc(1,"\n\r\u0009");
state.setArc(2," ");
state.setArc(3,"t");
state.setArc(4,"f");
state.setArc(5,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdeghijklmnopqrsuvwxyzАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя");
state.setArc(6,";");
state.setArc(7,"0123456789");
state.setArc(8,"(){}");
state.setArc(9,"/");
state.setArc(10,"+*-");
state.setArc(11,"<");
state.setArc(12,"\"");
lexAcceptors[0].setState(0,state);
state=new faState(2);
state.setArc(-2,"");
state.setArc(1,"\n\r\u0009");
lexAcceptors[0].setState(1,state);
state=new faState(2);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.