};
int find_keyword(char mas[]); //поиск кл слова
int i,j;int c_id=0, c=0,c_con=0,c_str=0;
char out_mas[10000][10];
char temp[4]=" ";
char sym[10000];
char lex[50];
char tmp;
char id[50];
char ident[50][20];
char consts[50][10];
int n=0 ;
FILE *in,*nnn;
//поиск ключевого слова:
int find_keyword(char mas[])
{
for(int j=0;j<91;j++)
{
if (strcmp(mas,KeyWordMass[j])==0) return j;//возвращает позицию в массиве ключ слов
}
return 0;
}
//функция используется для КА определения чисел
int term()
{
char tmp1=sym[n];
curpos=ftell(in); //
sym[n]=fgetc(in); //читаем очередной символ
//определяет номер столбца
switch (sym[n]) {
case '0': ; case '1': ; case '2': ;
case '3': ; case '4': ; case '5': ;
case '6': ; case '7': ; case '8': ;
case '9': Num=1; return 0;
case '.': return 1;
case 'e': ;
case 'E': return 2;
case '+':
case '-':
if (tmp1=='e'||tmp1=='E'||Num==0) {return 3;}//минус/плюс числа
else return 4; // конец числа (минус/плюс - разделитель)
case ',': case ';':case ' ':case '#':case '/':case '=':
case '%': case '<': case '>': case '^':
case '!': case '\n': case '\t': case '\0':
case '*': case ')': case ']':
return 4; //конец числа
default : return 5; //неверное число
}
}
//конечный автомат для определения числа:
void KA_number()
{
curpos=ftell(in);
fseek(in,curpos-1,0);
i=0;
//матрица переходов:
int avt[10][6]={1, 3,-1, 2,-1,-1, //0
1, 3, 5,-1,10,-1, //1
1, 3,-1,-1,-1,-1, //2
4,-1,-1,-1,-1,-1, //3
4,-1, 5,-1,10,-1, //4
7,-1,-1, 6,-1,-1, //5
7,-1,-1,-1,-1,-1, //6
8,-1,-1,-1,10,-1, //7
8,-1,-1,-1,10,-1, //8
8,-1,-1,-1,10,-1, //9
};
int top_index=0;
char p[20];
while(top_index!=10)//пока не попали на позицию выхода
{
top_index=avt[top_index][term()];//получаем значение след состояния
if (top_index==-1) {
ShowMessage("Wrong number!!!");return;}//-1 - ошибка
p[i]=sym[n];//сохраняем число
i++;
}
i--;
if(i>0)
{
p[i]='\0';
fseek(in,curpos,0);
}
Num=0;
//сохранение и вывод числа:
for (int k=0;k<50;k++)
{ if ( strcmp(consts[k],p) == 0)
{
i=555;//если есть число в табл, то выводим его положение
strcpy(out_mas[c],"( ,40)\0");out_mas[c][1]=char(k/10+48);out_mas[c][2]=char(k%10+48);c++;
}
}
//если нет числа в табл, то запоминаем его и выводим его положение
if(i!=555)
{
strcpy(consts[c_con],p);
strcpy(out_mas[c],"( ,40)\0");out_mas[c][1]=char(c_con/10+48);out_mas[c][2]=char(c_con%10+48);c++;
c_con++;
}
}
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
MyFName ="C:\lab1.txt";
if (OpenDialog1->Execute() )MyFName = (OpenDialog1->FileName);
Form1->Edit1->Text= MyFName;
Fstr = MyFName.c_str() ;
MyFName_out = MyFName+"_out.txt";
Fstr_out = MyFName_out.c_str() ;
}
//--------------------------------------------------------------------------void __fastcall TForm1::N1Click(TObject *Sender)
{
exit(0);
}
//--------------------------------------------------------------------------void __fastcall TForm1::N2Click(TObject *Sender)
{
ShowMessage("Лексичекский анализатор языка php\n Выполнили: \n Клименко В.А\n Зимин А.В.\n группа 4ВС");
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
in=fopen(Fstr,"r");
nnn=fopen(Fstr_out,"w+");
bool y=0;int jj=0;
if (MyFName!="") while(!feof(in))
{
sym[n] = fgetc(in);//читаем символ
/**************************************************************************/
//Проверка на зарез слова:
if(isalpha(sym[n])||sym[n]=='_')
{
i=0;
while (isalpha(sym[n]) || isdigit(sym[n])||sym[n]=='_' )
{
lex[i]=sym[n];
n++;
sym[n]=fgetc(in);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.