Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- FILE *fp; //указатель на файл
- lex *f_lex=NULL, *l_lex=NULL, *t_lex=NULL;
- lex *f_prog=NULL, *l_prog=NULL, *t_prog=NULL;
- lex *f_id=NULL, *l_id=NULL, *t_id=NULL;
- HWND hLogin, hStatic;
- BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
- {
- return DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
- }
- BOOL CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- //открываем файл для чтения
- if((fp=fopen("lex.txt", "r"))==NULL)
- MessageBox(hWnd, TEXT("Файл лексем не найден."), TEXT("Ошибка"), MB_OK | MB_ICONSTOP);
- //пока не достигнут конец файла
- while(feof(fp)==0)
- {
- //считываем из файла символ, тип и подтип
- fscanf(fp,"%s %d %d\n",&str,&t1,&t2);
- t_lex=new lex; //создаем структуру символов
- strcpy(t_lex->name, str); //сохраняем название символа
- t_lex->t1=t1; //сохраняем тип символа
- t_lex->t2=t2; //сохраняем подтип символа
- if(f_lex==NULL) //если список пуст
- { //считаем текущий символ началом и концом списка
- f_lex=t_lex;
- l_lex=t_lex;
- t_lex->next=NULL;
- }
- else
- { //если нет, то записываем текущий символ в следующую ячейку списка
- l_lex->next=t_lex;
- t_lex->next=NULL;
- l_lex=t_lex;
- }
- }
- fclose(fp); //закрываем файл
- switch(message)
- {
- case WM_CLOSE:
- EndDialog(hWnd, 0);
- return TRUE;
- case WM_INITDIALOG:
- hLogin = GetDlgItem(hWnd, IDC_EDIT1);
- hStatic = GetDlgItem(hWnd, IDC_EDIT3);
- return TRUE;
- //case WM_RBUTTONDOWN:
- // SetWindowText(hStatic, TEXT("Нажата правая кнопка мыши"));
- // return TRUE;
- case WM_COMMAND:
- if(LOWORD(wParam) == IDC_ENTRY)
- {
- GetWindowText(hLogin, str, 32);
- if(lstrlen(str) == 0 )
- MessageBox(hWnd, TEXT("Не введено имя файла."), TEXT("Ошибка"), MB_OK | MB_ICONSTOP);
- if((fp=fopen(str, "r"))==NULL)
- MessageBox(hWnd, TEXT("Файл с заданным именем не найден."), TEXT("Ошибка"), MB_OK | MB_ICONSTOP);
- /*else
- {
- wsprintf(text, TEXT("Логин: %s\n"), str);
- MessageBox(hWnd, text, TEXT("Авторизация"), MB_OK | MB_ICONINFORMATION);
- }*/
- //пока не достигнут конец файла
- while(feof(fp)==0)
- {
- c=fgetc(fp); //считываем символ из файла и преобразовываем его в int
- switch(c)
- {
- //при считывании пробела, переноса строки и табуляции
- case ' ':
- case '\n':
- case '\t':
- buf[i]='\0'; //записываем в буфер признак конца строки
- t_prog=new lex;
- strcpy(t_prog->name, buf);
- t_prog->t1=9;
- t_prog->t2=0;
- // если считывается число, то даем ему соответствующий номер типа
- if(atoi(t_prog->name)!=0) {
- if ( strpbrk(t_prog->name, "89") == NULL )
- t_prog->t1=8;
- }
- t_lex=f_lex;
- while(t_lex!=NULL)
- {
- // проверяем есть ли такой символ в словаре
- if (strcmp(t_lex->name,t_prog->name)==0)
- {
- t_prog->t1=t_lex->t1;
- t_prog->t2=t_lex->t2;
- }
- t_lex=t_lex->next;
- }
- //формируем список
- if(f_prog==NULL)
- {
- f_prog=t_prog;
- l_prog=t_prog;
- t_prog->next=NULL;
- }
- else
- {
- l_prog->next=t_prog;
- t_prog->next=NULL;
- l_prog=t_prog;
- }
- if(t_prog->t1==9)//если найден новый идентификатор
- {
- if(f_id==NULL)//если таблица идентификаторов пуста
- {
- f_id=new lex;//создаем структуру идентификаторов
- //копируем текущее имя идентификатора
- strcpy(f_id->name, t_prog->name);
- f_id->t2=id;//присваиваем ему номер подтипа
- l_id=f_id;//устанавливаем начало на конец списка
- f_id->next=NULL;
- id++;//увеличиваем счётчик подтипов на 1
- cout<<"\nNew symbols: "<<f_id->name;
- }
- else//если таблица идентификаторов не пуста
- {
- t_id=f_id;
- while(t_id!=NULL)//пока не достигнут конец списка
- {
- //проверяем есть ли уже такой идентификатор в списке
- //Если есть, то даем ему соответствующий номер подтипа
- if (strcmp(t_id->name,t_prog->name)==0)
- {
- t_prog->t2=t_id->t2;
- x=1;
- break;
- }
- t_id=t_id->next;
- }
- if(x==0)
- { //если такого идентификатора в списке нет
- t_id=new lex;//то создаем структуру для нового
- strcpy(t_id->name, t_prog->name);
- //присваиваем идентификатору номер подтипа
- t_id->t2=id;
- t_prog->t2=t_id->t2;
- l_id->next=t_id;
- l_id=t_id;
- l_id->next=NULL;
- id++;//увеличиваем счётчик подтипов на 1
- cout<<" "<<t_id->name;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement