Kactus2
Kactus2 reference guide
Loading...
Searching...
No Matches
SystemVerilogExpressionParser.h
Go to the documentation of this file.
1//-----------------------------------------------------------------------------
2// File: SystemVerilogExpressionParser.h
3//-----------------------------------------------------------------------------
4// Project: Kactus2
5// Author: Esko Pekkarinen
6// Date: 25.11.2014
7//
8// Description:
9// Parser for SystemVerilog expressions.
10//-----------------------------------------------------------------------------
11
12#ifndef SYSTEMVERILOGEXPRESSIONPARSER_H
13#define SYSTEMVERILOGEXPRESSIONPARSER_H
14
15#include "ExpressionParser.h"
16
17#include "KactusAPI/KactusAPIGlobal.h"
18
19#include <QString>
20#include <QMap>
21
22//-----------------------------------------------------------------------------
24//-----------------------------------------------------------------------------
26{
27public:
28
31
33 ~SystemVerilogExpressionParser() override = default;
34
35 // Disable copying.
38
47 QString parseExpression(QStringView expression, bool* validExpression = nullptr) const override;
48
56 virtual bool isArrayExpression(QStringView expression) const noexcept;
57
65 bool isPlainValue(QStringView expression) const override;
66
74 int baseForExpression(QStringView expression) const override;
75
76protected:
77
85 QString parseConstant(QStringView token) const;
86
94 virtual bool isSymbol(QStringView expression) const;
95
103 virtual QString findSymbolValue(QStringView symbol) const;
104
112 virtual int getBaseForSymbol(QStringView symbol) const;
113
121 static unsigned int operatorPrecedence(QStringView oper);
122
130 virtual bool isUnaryOperator(QStringView token) const;
131
140 virtual QString solveUnary(QStringView operation, QString const& term) const;
141
142private:
143
152 static QVector<QStringView> convertToRPN(QString& expression);
153
162 QString solveRPN(QVector<QStringView> rpn, bool* validExpression) const;
163
171 bool isStringLiteral(QStringView expression) const noexcept;
172
180 bool isLiteral(QStringView expression) const;
181
189 bool isBinaryOperator(QStringView token) const;
190
198 bool isTernaryOperator(QStringView token) const;
199
209 QString solveTernary(QStringView condition, QString const& trueCase, QString const& falseCase) const;
210
211
221 QString solveBinary(QStringView operation, QString const& leftTerm, QString const& rightTerm) const;
222
230 QString solveClog2(QString const& value) const;
231
239 QString solveSqrt(QString const& value) const;
240
248 static int precisionOf(QStringView term) noexcept;
249
257 static int baseOf(QStringView constantNumber);
258};
259
260#endif // SYSTEMVERILOGEXPRESSIONPARSER_H
Interface for expression parsers.
QString parseConstant(QStringView token) const
QString parseExpression(QStringView expression, bool *validExpression=nullptr) const override
virtual bool isArrayExpression(QStringView expression) const noexcept
SystemVerilogExpressionParser & operator=(SystemVerilogExpressionParser const &rhs)=delete
virtual bool isUnaryOperator(QStringView token) const
virtual int getBaseForSymbol(QStringView symbol) const
virtual QString findSymbolValue(QStringView symbol) const
SystemVerilogExpressionParser(SystemVerilogExpressionParser const &rhs)=delete
static unsigned int operatorPrecedence(QStringView oper)
bool isPlainValue(QStringView expression) const override
virtual QString solveUnary(QStringView operation, QString const &term) const
int baseForExpression(QStringView expression) const override
~SystemVerilogExpressionParser() override=default
The destructor.
SystemVerilogExpressionParser()=default
The constructor.
virtual bool isSymbol(QStringView expression) const