out+="Таблица переменных - 2\n";
addtable(Vars, out);
out+="Таблица чисел - 3\n";
addtable(Nums, out);
out+="Таблица строковых констант - 4\n";
addtable(Strs, out);
out+="Таблица знаков - 5\n";
addtable(Znaks, out);
ui. SAnalys->setText(out);
//Запись результатов в файлы:
//Преобразование главной таблицы
QString lecsems="Таблица лексем\n";
lecsems+=QString("%1 |%2 |%3 |%4\n").arg(QString("Табл"),4).arg(QString("#"),4).arg("Лексема",20).arg("Координаты",6);
for (int k=0;k<lecs. count();k++)
lecsems+= QString("%1 %2 %3 %4\n").arg(QString::number(lecs[k].tab_cod),4).arg(QString::number(lecs[k].lec_cod),4).arg(lecs[k].value,20).arg(lecs[k].point,6);
lecsems+="";
QFile file;
QString curDir=Filename. left(Filename. lastIndexOf("/"));
QString filename;
//Запись главной таблицы (файл mainTable. txt)
filename=curDir+"/"+"mainTable. txt";
file. setFileName(filename);
if( file. open(QIODevice::WriteOnly))
{
QStringList list=lecsems. split("\n");
QTextStream in(&file);
for (int k=0;k<list. size();k++)
{
list[k]+="\n";
in << list[k];
in << QString();
}
}
else { ui. statusBar->showMessage(QString("Ошибка обработки файла mainTable. txt")); return;}
file. close();
//Запись остальных таблиц (файл allTable. txt)
filename=curDir+"/"+"allTable. txt";
file. setFileName(filename);
if( file. open(QIODevice::WriteOnly))
{
QStringList list=out. split("\n");
QTextStream in(&file);
for (int k=0;k<list. size();k++)
{
list[k]+="\n";
in << list[k];
in << QString();
}
}
else { ui. statusBar->showMessage(QString("Ошибка обработки файла allTable. txt")); return;}
file. close();
//Запись протокола (файл Result. txt)
QString result="Лексический анализ кода из файла:\n"+Filename+"\n"+"Исходный КОД:\n"+buf+"\n\n"+"Найдено лексем:"+QString::number(lecs. count())+"\n"+lecsems+"\n\n"+out+"\n\n"+QDateTime::currentDateTime().toString("dd. MM. yyyy, h:m:s");
filename=curDir+"/"+"Result. txt";
file. setFileName(filename);
if( file. open(QIODevice::WriteOnly))
{
QStringList list=result. split("\n");
QTextStream in(&file);
for (int k=0;k<list. size();k++)
{
list[k]+="\n";
in << list[k];
in << QString();
}
}
else { ui. statusBar->showMessage(QString("Ошибка обработки файла Result. txt")); return;}
file. close();
ui. statusBar->showMessage(QString("Анализ удачно завершён. Выходные файлы в папке: ")+curDir);
}
void lab1_oc::loadCode()
{
Filename = QFileDialog::getOpenFileName(this, "Выбор файла с программой", "", "файл программы (*.pas)");
ui. SCod->clear();
QString str;
QFile file( Filename ); //Создаем объект файла
if( file. open(QIODevice::ReadOnly)) //Если файл открыт только для чтения
{
QTextStream in(&file); //открываем поток ввода
str+=in. readAll();
ui. SCod->setText(str);
ui. statusBar->showMessage("Загружен код из файла: "+Filename);
}
else ui. statusBar->showMessage("Файл не загружен");
}
void lab1_oc::loadBase()
{
all_service_words. clear();
all_znaks. clear();
QString str;
QFile file;
QString filename=QDir::currentPath()+"/"+"service_words. txt";
file. setFileName(filename);
if( file. open(QIODevice::ReadOnly)) //Если файл открыт только для чтения
{
QTextStream in(&file); //открываем поток ввода
while(!in. atEnd()) //пока не достигли конца потока
{
in >> str;
all_service_words << str;
}
}
file. close();
filename=QDir::currentPath()+"/"+"symbols. txt";
file. setFileName(filename);
if( file. open(QIODevice::ReadOnly)) //Если файл открыт только для чтения
{
QTextStream in(&file); //открываем поток ввода
while(!in. atEnd()) //пока не достигли конца потока
{
in >> str;
all_znaks << str;
}
}
file. close();
}
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |


