1 | // Copyright (C) 2023 basysKom GmbH, opensource@basyskom.com |
---|---|
2 | // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only |
3 | |
4 | #pragma once |
5 | |
6 | #include <QtCore/qmap.h> |
7 | #include <QtCore/qxmlstream.h> |
8 | |
9 | class EnumeratedType; |
10 | class StructuredType; |
11 | class TypeDictionary; |
12 | |
13 | class RecursiveDescentParser |
14 | { |
15 | Q_GADGET |
16 | public: |
17 | enum ParsingError { |
18 | NoError, |
19 | InvalidFileName, |
20 | InvalidTypeDictionaryEntry, |
21 | InvalidImportEntry, |
22 | InvalidEnumeratedTypeEntry, |
23 | InvalidStructuredTypeEntry, |
24 | InvalidEnumeratedValueEntry, |
25 | InvalidFieldEntry, |
26 | UnknownEntry, |
27 | MissingDependency, |
28 | CannotFullyGenerateNamespaceZero, |
29 | UnableToWriteFile, |
30 | UnableToResolveDependency, |
31 | }; |
32 | Q_ENUM(ParsingError) |
33 | |
34 | RecursiveDescentParser() = default; |
35 | ~RecursiveDescentParser(); |
36 | |
37 | void printInOrder() const; |
38 | ParsingError parseEnumeratedType(QXmlStreamReader &xmlStreamReader, |
39 | TypeDictionary *typeDictionary); |
40 | |
41 | ParsingError parseEnumeratedValue(QXmlStreamReader &xmlStreamReader, |
42 | EnumeratedType *enumeratedType); |
43 | ParsingError parseField(QXmlStreamReader &xmlStreamReader, StructuredType *structuredType); |
44 | |
45 | ParsingError parseFile(const QString &fileName, const bool &dependencyTypeDictionary); |
46 | ParsingError parseImport(QXmlStreamReader &xmlStreamReader, TypeDictionary *typeDictionary); |
47 | |
48 | ParsingError parseStructuredType(QXmlStreamReader &xmlStreamReader, |
49 | TypeDictionary *typeDictionary); |
50 | ParsingError parseTypeDictionary(QXmlStreamReader &xmlStreamReader, |
51 | const bool &dependencyTypeDictionary); |
52 | |
53 | ParsingError skipKnownElement(QXmlStreamReader &xmlStreamReader); |
54 | ParsingError generateInputFiles(const QString &path, |
55 | const QString &prefix, |
56 | const QString &header); |
57 | |
58 | ParsingError dependencyCheck(); |
59 | bool isKnownElement(const QXmlStreamReader &xmlStreamReader); |
60 | |
61 | QString permittedName(const QString &name) const; |
62 | |
63 | private: |
64 | QString m_fileName; |
65 | QMap<QString, TypeDictionary *> m_mapTypeDictionary; |
66 | }; |
67 |