#ifndef PARSE_H #define PARSE_H #include #include using namespace std; #include "instruction.h" enum TokenType { TokenTypeError, TokenTypeEOL, TokenTypeComma, TokenTypeHash, TokenTypePercent, TokenTypeDollar, TokenTypeNumber, TokenTypeWord, }; struct Token { size_t line = 0; size_t column = 0; TokenType tokenType = TokenTypeError; size_t begin = 0; size_t end = 0; Token() : line(0) , column(0) , tokenType(TokenTypeError) , begin(0) , end(0) {} Token(const Token& tok) : line(tok.line) , column(tok.column) , tokenType(tok.tokenType) , begin(tok.begin) , end(tok.end) {} Token(size_t line, size_t column, TokenType tokenType, size_t begin, size_t end) : line(line) , column(column) , tokenType(tokenType) , begin(begin) , end(end) {} }; QVector lex(const QString& code); struct ParseError { size_t line = 0; size_t column = 0; QString text; ParseError() : line(0) , column(0) , text("") {} ParseError(const ParseError& par) : line(par.line) , column(par.column) , text(par.text) {} ParseError(size_t line, size_t column, const QString& text) : line(line) , column(column) , text(text) {} }; QVector> parse(const QString& code, const QVector& tokens, QVector& errors); #endif // PARSE_H