int lab1_oc::vars(QString str)

{

       buffer. clear();

       while (str[j].isLetterOrNumber() || str[j]=='_')

       {

               buffer+=str[j];

               j++;

       }

       word tmp; lec temp;

       //если слово является служебным

       if (all_service_words. contains(buffer)) addvector(service_words,1);

       else addvector(Vars,2);

        j--;

       return 0;

}

int lab1_oc::nums(QString str)

{

//Инициализация

       buffer. clear();

       int flag=0;

       int point_count=0;

       int numflag=0;

//Формирование слова

       while (str[j].isLetterOrNumber() || str[j]=='_' || str[j]=='.')

       {

               if (str[j]=='.') { flag=j; point_count++;}

               buffer+=str[j];

               j++;

       }

//Обработка ошибки: неправильное имя переменной

       for (int k=0;k<buffer. length();k++)

       {

               if (buffer[k].isDigit() || buffer[k]=='.'); else numflag=1;

НЕ нашли? Не то? Что вы ищете?

       }

       if (numflag==1)

       {

               Point (strnum, colnum, j-buffer. length());

               QMessageBox::warning(this, "Ошибка!", QString("Неправильное имя переменной!\nПеременная может начинаться с буквы\nили '_': '")+QString(buffer[0])+QString("' [")+QString::number(strnum)+QString(",")+QString::number(colnum)+QString("]!"));

               ui. statusBar->showMessage(QString("Неправильное имя переменной: '")+QString(buffer[0])+QString("' [")+QString::number(strnum)+QString(",")+QString::number(colnum)+QString("]!"));

               return 31;

       }

//Обработка ошибки чисел с точками

       if (point_count>1)

       {

               Point (strnum, colnum, j-buffer. length());

               QMessageBox::warning(this, "Ошибка!", QString("Ошибка в записи дробного числа: '")+QString(buffer)+QString("' [")+QString::number(strnum)+QString(",")+QString::number(colnum)+QString("]!"));

               ui. statusBar->showMessage(QString("Ошибка в записи дробного числа: '")+QString(buffer)+QString("' [")+QString::number(strnum)+QString(",")+QString::number(colnum)+QString("]!"));

               return 32;

       }

       addvector(Nums,3);

        j--;

       return 0;

}

int lab1_oc::strs(QString str)

{

       buffer. clear();

       buffer+=str[j++];

       int l=str. count("\"");

       if (l%2 != 0)

       {

               Point (strnum, colnum, j);

               QMessageBox::warning(this, "Ошибка!", QString("Незакрытая строка: '")+QString(buffer)+QString("' [")+QString::number(strnum)+QString("]!"));

               ui. statusBar->showMessage(QString("Незакрытая строка: '")+QString(buffer)+QString("' [")+QString::number(strnum)+QString("]!"));

               return 41;

       }

       while (str[j]!='"')

       {

               buffer+=str[j];

               j++;

       }

       buffer+=str[j++];

       for (int k=0;k<buffer. length();k++) if (buffer[k]=='\n') buffer[k]='|';

       addvector(Strs,4);

       j--;

       return 0;

}

int lab1_oc::znaks(QString str)

{

       buffer. clear();

       int i=0;

       while (isZnak(str[j].toAscii()))

       {

               buffer+=str[j];

               j++;

               if (all_znaks. contains(buffer))

               {

                       addvector(Znaks,5);

                       j--;

                       return 0;

               }

       }

        j--;

       if (all_znaks. contains(buffer))

               {

                       addvector(Znaks,5);

                       return 0;

               }

       else

       {

               QMessageBox::warning(this, "Ошибка!", QString("Неизвестный знак: '")+QString(buffer)+QString("' [")+QString::number(strnum)+QString(",")+QString::number(j-buffer. length())+QString("]!"));

               ui. statusBar->showMessage(QString("Ошибка в записи дробного числа: '")+QString(buffer)+QString("' [")+QString::number(strnum)+QString(",")+QString::number(j-buffer. length())+QString("]!"));

               return 51;

       }

}

bool lab1_oc::isZnak(char ch)

{

       for (int i=0;i<all_znaks. count();i++)

               if (ch==all_znaks[i][0]) return true;

       return false;

}

void lab1_oc::addvector(QVector<word> & vector, int p)

{

       Point (strnum, colnum, j-buffer. length());

       word tmp;

       lec temp;

       int flag=-1;

               for (int k=0;k<vector. count();k++) if (vector[k].value==buffer) flag=k;

               if (flag>-1)

               {

                       vector[flag].point+=" "+QString::number(strnum)+","+QString::number(colnum)+";";

                       for (int k=0;k<lecs. count();k++)

                               if (lecs[k].tab_cod==p && lecs[k].lec_cod==flag)

                                       lecs[k].point+=" "+QString::number(strnum)+","+QString::number(colnum)+";";

               }

               else

               {

                       vector << tmp;

                       vector. last().value=buffer;

                       vector. last().point=QString::number(strnum)+","+QString::number(colnum)+";";

                       temp. tab_cod=p; temp. value=buffer; temp. point=QString::number(strnum)+","+QString::number(colnum)+";"; temp. lec_cod=vector. count()-1;

                       lecs << temp;

               }

}

void lab1_oc::Point (int & row, int & col, int len)

{

       row=buf. mid(0,len).count("\n");

       int m=buf. mid(0,len).lastIndexOf("\n");

       col=buf. mid(0,len).mid(m).length();

}

void lab1_oc::addtable(QVector<word> & vector, QString & str)

{

       QString row;

       str+=QString("%1 |%2 |%3 \n").arg(QString("Индекс"),4).arg("Лексема",20).arg("Координаты",6);

       for (int i=0;i<vector. count();i++)

       {

               row+= QString("%1 %2 %3 \n").arg(QString::number(i),4).arg(vector[i].value,20).arg(vector[i].point,6);

       }

       str+=row+"";

}

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4