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
9class EnumeratedType;
10class StructuredType;
11class TypeDictionary;
12
13class RecursiveDescentParser
14{
15 Q_GADGET
16public:
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
63private:
64 QString m_fileName;
65 QMap<QString, TypeDictionary *> m_mapTypeDictionary;
66};
67

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of qtopcua/tools/datatypecodegenerator/recursivedescentparser.h