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 |


