Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
parser.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#ifndef PARSER_H
5#define PARSER_H
6
7#include "symbols.h"
8#include <QtCore/qbytearrayview.h>
9
10#include <stack>
11
13
14class Parser
15{
16public:
22
24 {
25 inline explicit IncludePath(const QByteArray &_path)
26 : path(_path), isFrameworkPath(false) {}
29 };
30 QList<IncludePath> includes;
31
32 std::stack<QByteArray, QByteArrayList> currentFilenames;
33
34 inline bool hasNext() const { return (index < symbols.size()); }
35 inline Token next() { if (index >= symbols.size()) return NOTOKEN; return symbols.at(index++).token; }
36 inline Token peek() { if (index >= symbols.size()) return NOTOKEN; return symbols.at(index).token; }
37 bool test(Token);
38 void next(Token);
39 void next(Token, const char *msg);
40 inline void prev() {--index;}
41 inline Token lookup(int k = 1);
42 inline const Symbol &symbol_lookup(int k = 1) { return symbols.at(index-1+k);}
43 inline Token token() { return symbols.at(index-1).token;}
44 inline QByteArray lexem() { return symbols.at(index-1).lexem();}
46 inline const Symbol &symbol() { return symbols.at(index-1);}
47 inline const Symbol &symbolAt(qsizetype idx) { return symbols.at(idx); }
48
49 Q_NORETURN void error(const Symbol &symbol);
50 Q_NORETURN void error(const char *msg = nullptr);
51 void warning(const char * = nullptr);
52 void warning(const Symbol &sym, QByteArrayView msg);
53 void note(const char * = nullptr);
54 void defaultErrorMsg(const Symbol &sym);
55 void printMsg(QByteArrayView formatStringSuffix, QByteArrayView msg, const Symbol &sym);
56
57};
58
60{
61 if (index < symbols.size() && symbols.at(index).token == token) {
62 ++index;
63 return true;
64 }
65 return false;
66}
67
68inline Token Parser::lookup(int k)
69{
70 const qsizetype l = index - 1 + k;
71 return l < symbols.size() ? symbols.at(l).token : NOTOKEN;
72}
73
75{
76 if (!test(token))
77 error();
78}
79
80inline void Parser::next(Token token, const char *msg)
81{
82 if (!test(token))
83 error(msg);
84}
85
87
88#endif
QList< IncludePath > includes
Definition parser.h:30
Parser()
Definition parser.h:17
Token peek()
Definition parser.h:36
Token next()
Definition parser.h:35
Token token()
Definition parser.h:43
const Symbol & symbolAt(qsizetype idx)
Definition parser.h:47
bool displayNotes
Definition parser.h:21
void warning(const char *=nullptr)
Definition parser.cpp:78
const Symbol & symbol_lookup(int k=1)
Definition parser.h:42
bool hasNext() const
Definition parser.h:34
qsizetype index
Definition parser.h:19
void prev()
Definition parser.h:40
bool test(Token)
Definition parser.h:59
Token lookup(int k=1)
Definition parser.h:68
const Symbol & symbol()
Definition parser.h:46
QByteArray lexem()
Definition parser.h:44
void printMsg(QByteArrayView formatStringSuffix, QByteArrayView msg, const Symbol &sym)
Definition parser.cpp:29
Symbols symbols
Definition parser.h:18
std::stack< QByteArray, QByteArrayList > currentFilenames
Definition parser.h:32
void defaultErrorMsg(const Symbol &sym)
Definition parser.cpp:46
QByteArray unquotedLexem()
Definition parser.h:45
void note(const char *=nullptr)
Definition parser.cpp:82
bool displayWarnings
Definition parser.h:20
\inmodule QtCore
Definition qbytearray.h:57
qsizetype size() const noexcept
Definition qlist.h:397
const_reference at(qsizetype i) const noexcept
Definition qlist.h:446
Token token
Definition keywords.cpp:444
Combined button and popup list for selecting options.
#define Q_NORETURN
DBusConnection const char DBusError * error
GLuint index
[2]
GLsizei const GLchar *const * path
ptrdiff_t qsizetype
Definition qtypes.h:165
QByteArray path
Definition parser.h:27
IncludePath(const QByteArray &_path)
Definition parser.h:25
Token token
Definition symbols.h:59
QByteArray lexem() const
Definition symbols.h:60
QByteArray unquotedLexem() const
Definition symbols.h:61