Разработка синтаксического распознавателя вычисляемого оператора перехода языка FORTRAN — страница 9

  • Просмотров 2087
  • Скачиваний 165
  • Размер файла 23
    Кб

fprintf(errors,"T - Проверка на Терм.\n"); O(); if(nx=='/') { Scan(); T(); } else if(nx=='*') { Scan(); if(nx=='*') { Scan(); T(); } else T(); } if(nx==NULL) return(OK); else if(nx!='+' && nx!='-' && nx!=')') Error(2); return(OK); } //¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾ // Реализация нетерминала <Операнд>.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾ int O(void) { #ifdef TEST cprintf("O - Проверка на Операнд.\r\n"); #endif fprintf(errors,"O - Проверка на Операнд.\n"); if(nx=='(') { AB(); if(nx!=')') Error(3); else { Scan(); return(OK); } } else if(IDENT() == NO) { if(FLOAT() == NO) Error(4); } return(OK); }

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾ // Реализация нетерминала <Идентификатор>. //¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾ int IDENT(void) { #ifdef TEST cprintf("IDENT - Проверка на

Идентификатор с символа %c.\r\n",nx); getch(); #endif fprintf(errors,"IDENT - Проверка на Идентификатор с символа %c.\n",nx); if(isalpha(nx)) { while(isalpha(nx) || isdigit(nx)) Scan(); return(YES); } return(NO); } //¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾ // Реализация нетерминала <Дробное Без Знака>.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾ int FLOAT(void) { #ifdef TEST cprintf("FLOAT - Проверка на Дробное Без Знака с цифры %c.\r\n",nx); getch(); #endif fprintf(errors,"FLOAT - Проверка на Дробное Без Знака с цифры %c.\n",nx); if(isdigit(nx)) { while(isdigit(nx)) Scan(); if(nx=='.') { Scan(); while(isdigit(nx)) Scan(); } return(YES); } return(NO); }

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾ // Сканирование следующего символа из строки. //¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾ void Scan(void) { #ifdef TEST cprintf("SCAN - Сканирование.