move source parsing functions from project to parseutil

This commit is contained in:
garak
2019-05-06 12:42:09 -04:00
committed by huderlem
parent 675a064df6
commit eb71f72b0e
5 changed files with 310 additions and 343 deletions

View File

@@ -7,6 +7,7 @@
#include <QString>
#include <QList>
#include <QMap>
#include <QRegularExpression>
enum TokenType {
Number,
@@ -14,29 +15,6 @@ enum TokenType {
Error,
};
class DebugInfo {
public:
DebugInfo(QString file, QStringList lines) {
this->file = file;
this->lines = lines;
};
QString file;
int line;
bool err;
QStringList lines;
void error(QString expression, QString token) {
int lineNo = 0;
for (QString line_ : lines) {
lineNo++;
if (line_.contains(expression)) {
this->line = lineNo;
break;
}
}
logError(QString("%1:%2: unknown identifier found in expression: '%3'.").arg(file).arg(line).arg(token));
}
};
class Token {
public:
Token(QString value = "", QString type = "") {
@@ -60,15 +38,29 @@ public:
class ParseUtil
{
public:
ParseUtil(QString, QString);
ParseUtil();
void set_root(QString);
QString readTextFile(QString);
void strip_comment(QString*);
QList<QStringList>* parseAsm(QString);
int evaluateDefine(QString, QMap<QString, int>*);
DebugInfo *debug;
QStringList readCArray(QString text, QString label);
QMap<QString, QString> readNamedIndexCArray(QString text, QString label);
QString readCIncbin(QString text, QString label);
QMap<QString, int> readCDefines(QString filename, QStringList prefixes);
void readCDefinesSorted(QString, QStringList, QStringList*);
QList<QStringList>* getLabelMacros(QList<QStringList>*, QString);
QStringList* getLabelValues(QList<QStringList>*, QString);
bool tryParseJsonFile(QJsonDocument *out, QString filepath);
private:
QString root;
QString text;
QString file;
QList<Token> tokenizeExpression(QString expression, QMap<QString, int>* knownIdentifiers);
QList<Token> generatePostfix(QList<Token> tokens);
int evaluatePostfix(QList<Token> postfix);
void error(QString message, QString expression);
};
#endif // PARSEUTIL_H

View File

@@ -5,6 +5,7 @@
#include "blockdata.h"
#include "heallocation.h"
#include "event.h"
#include "parseutil.h"
#include <QStringList>
#include <QList>
@@ -46,6 +47,9 @@ public:
QMap<QString, int> metatileBehaviorMap;
QMap<int, QString> metatileBehaviorMapInverse;
QMap<QString, QString> facingDirections;
ParseUtil parser;
void set_root(QString);
struct DataQualifiers
{
@@ -66,7 +70,6 @@ public:
Blockdata* readBlockdata(QString);
void loadBlockdata(Map*);
QString readTextFile(QString path);
void saveTextFile(QString path, QString text);
void appendTextFile(QString path, QString text);
void deleteFile(QString path);
@@ -80,8 +83,6 @@ public:
QString readMapLayoutId(QString map_name);
QString readMapLocation(QString map_name);
QList<QStringList>* getLabelMacros(QList<QStringList>*, QString);
QStringList* getLabelValues(QList<QStringList>*, QString);
QMap<QString, bool> getTopLevelMapFields();
bool loadMapData(Map*);
void readMapLayouts();
@@ -107,7 +108,6 @@ public:
void saveTilesetTilesImage(Tileset*);
void saveTilesetPalettes(Tileset*, bool);
QList<QStringList>* parseAsm(QString text);
QStringList getSongNames();
QStringList getVisibilities();
QMap<QString, QStringList> getTilesetLabels();
@@ -136,22 +136,15 @@ public:
void saveMapHealEvents(Map *map);
QStringList readCArray(QString text, QString label);
QString readCIncbin(QString text, QString label);
QMap<QString, int> readCDefines(QString filename, QStringList prefixes);
QMap<QString, QString> readNamedIndexCArray(QString text, QString label);
static int getNumTilesPrimary();
static int getNumTilesTotal();
static int getNumMetatilesPrimary();
static int getNumMetatilesTotal();
static int getNumPalettesPrimary();
static int getNumPalettesTotal();
static bool tryParseJsonFile(QJsonDocument *out, QString filepath);
private:
void updateMapLayout(Map*);
void readCDefinesSorted(QString, QStringList, QStringList*);
void readCDefinesSorted(QString, QStringList, QStringList*, QString, int);
void setNewMapHeader(Map* map, int mapIndex);
void setNewMapLayout(Map* map);