| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #ifndef PARSE_H
- #define PARSE_H
- #include <QString>
- #include <QVector>
- 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<Token> 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<QVector<Instruction>> parse(const QString& code, const QVector<Token>& tokens, QVector<ParseError>& errors);
- #endif // PARSE_H
|