6  if  10,17;

7  then  10,39;

8  end  12,1;

3. Таблица переменных – 2

Индекс  |  Лексема  |  Координаты

0  a  1,17; 8,22; 9,41;

1  b  1,24; 8,25; 9,33; 9,35;

2  c  1,30; 8,28; 9,43;

3  Descriminant  2,17; 9,17; 10,21;

4  x1  3,17;

5  x2  3,24;

6  Message  4,17; 6,17; 7,23;

7  InfoString  4,26; 11,19;

4. Таблица чисел - 3

Индекс |  Лексема  |  Координаты

0  45  1,20;

1  1  1,27;

2  4567  1,33;

3  0  3,21; 10,36;

4  32  3,28;

5  2  9,39;

5. Таблица строковых констант – 4

Индекс  | Лексема  |  Координаты

0 "В ведитекоэффициенты a, b,c: "  6,28;

1 "Дес криминант меньше нуля.

  Действительных корней уравненияне существует."  11,32;

6.Таблица знаков - 5

Индек  с |  Лексема  |  Координаты

0  :  1,18; 1,25; 1,31; 1,37; 2,29; 3,19; 3,26; 3,30; 4,36; 6,25; 9,30; 11,30;

1  =  1,19; 1,26; 1,32; 3,20; 3,27; 6,26; 9,31; 11,31;

2  ,  1,22; 1,28; 3,22; 4,24; 8,23; 8,26;

3  ;  1,46; 2,38; 3,39; 4,44; 6,62; 7,30; 8,29; 9,44; 11,108;

4  *  9,34; 9,40; 9,42;

5  -  9,37;

6  (  10,20;

7  <  10,34;

8  )  10,37;

VI. Код программы:

Lab1_os. h

#ifndef LAB1_OC_H

#define LAB1_OC_H

#include <QtGui/QMainWindow>

#include "ui_lab1_oc. h"

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

#include <QFileDialog>

#include <QFile>

#include <QTextStream>

#include <QMessageBox>

#include <QDateTime>

class lab1_oc : public QMainWindow

{

       Q_OBJECT

public:

       lab1_oc(QWidget *parent = 0, Qt::WFlags flags = 0);

       ~lab1_oc();

       QString buffer;

       QString buf;

       QString Filename;

       int curlen;

       int j;

//Базы:

               QVector<QString> all_service_words; //служебные слова

               QVector<QString> all_znaks; //знаки

               //Результаты:

               struct lec

               {

                       int tab_cod;

                       int lec_cod;

                       QString value;

                       QString point;

               };

               struct word

               {

                       QString value;

                       QString point;

               };

               QVector<lec> lecs;

               QVector<word> service_words;

               QVector<word> Vars; 

               QVector<word> Nums; 

               QVector<word> Strs; 

               QVector<word> Znaks; 

       

       //Координаты анализируемого символа:

               int colnum; //столбец

               int strnum; //строка

       //Функции распознавания лексем:

               int vars(QString);

               int nums(QString);

               int strs(QString);

               int znaks(QString);

       bool isZnak(char);

       void addvector(QVector<word> &, int);

       void Point (int & row, int & col, int len);

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

private slots:

  void Analys();

       void loadCode();

       void loadBase();

private:

       Ui::lab1_ocClass ui;

};

#endif // LAB1_OC_H

Lab1_oc. cpp

#include "lab1_oc. h"

lab1_oc::lab1_oc(QWidget *parent, Qt::WFlags flags)

       : QMainWindow(parent, flags)

{

       ui. setupUi(this);

       ui. setupUi(this);

       ui. SCod->setFocus();

       ui. Table->setColumnWidth(0,40);

       ui. Table->setColumnWidth(1,40);

       ui. statusBar->showMessage("Select file of programming code");

       //Подгрузка баз:

       loadBase();

       connect(ui. BAnalys, SIGNAL(clicked()),this, SLOT(Analys()));  //связь для кнопки BAnalys

       connect(ui. BLoadCode, SIGNAL(clicked()),this, SLOT(loadCode()));  //связь для кнопки BLoadCode

       connect(ui. BLoadBase, SIGNAL(clicked()),this, SLOT(loadBase()));  //связь для кнопки BLoadBase

}

lab1_oc::~lab1_oc()

{

}

void lab1_oc::Analys()

{

       //Инициализация массивов:

       lecs. clear();

       service_words. clear();  //1

       Vars. clear();  //2

       Nums. clear();  //3

       Strs. clear();  //4

       Znaks. clear();  //5

       ui. Table->clearContents();

       //Получили строки

       buf=ui. SCod->toPlainText();

       for (int l=ui. Table->rowCount()-1; l>=0; l--) ui. Table->removeRow(l);

       //Анилизируем полученную строку:

               for (j=0;j<buf. length();j++)

               {

                       char ch=buf[j].toAscii();

                       if (ch=='_' || buf[j].isLetter()) { if (vars(buf)!=0) return;}

                       else if (buf[j].isDigit()) {if (nums(buf)!=0)return ;}

                       else if (buf[j]=='"') {if (strs(buf)!=0) return; }

                       else if (isZnak(ch)) { if (znaks(buf)!=0) return; }

                       else if (buf[j]!=' ' && buf[j]!='\n')

                       {

                               Point (strnum, colnum, j-1);

                               QMessageBox::warning(this, "Ошибка!", QString("Недопустимый символ: '")+QString(ch)+QString("' [")+QString::number(strnum)+QString(",")+QString::number(colnum)+QString("]!"));

                               ui. statusBar->showMessage(QString("Недопустимый символ: '")+QString(ch)+QString("' [")+QString::number(strnum)+QString(",")+QString::number(colnum)+QString("]!"));

                               return;

                       }                

               }

       //}

       //Отображение результатов в таблице:

       for (int l=ui. Table->rowCount()-1; l>=0; l--) ui. Table->removeRow(l);

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

       {

               ui. Table->insertRow(i);

               ui. Table->setItem(i,0,new QTableWidgetItem(QString::number(lecs[i].tab_cod)));

               ui. Table->setItem(i,1,new QTableWidgetItem(QString::number(lecs[i].lec_cod)));

               ui. Table->setItem(i,2,new QTableWidgetItem(lecs[i].value));

               ui. Table->setItem(i,3,new QTableWidgetItem(lecs[i].point));

       }

       //Вывод таблиц:

       ui. SAnalys->clear();

       QString out="Таблица служебных слов - 1\n";

       addtable(service_words, out);

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