~gabriel1984sibiu/minitube/qt5.6

« back to all changes in this revision

Viewing changes to util/lexgen/re2nfa.h

  • Committer: Grevutiu Gabriel
  • Date: 2017-06-13 08:43:17 UTC
  • Revision ID: gabriel1984sibiu@gmail.com-20170613084317-ek0zqe0u9g3ocvi8
OriginalĀ upstreamĀ code

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
**
 
3
** Copyright (C) 2016 The Qt Company Ltd.
 
4
** Contact: https://www.qt.io/licensing/
 
5
**
 
6
** This file is part of the utils of the Qt Toolkit.
 
7
**
 
8
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
 
9
** Commercial License Usage
 
10
** Licensees holding valid commercial Qt licenses may use this file in
 
11
** accordance with the commercial license agreement provided with the
 
12
** Software or, alternatively, in accordance with the terms contained in
 
13
** a written agreement between you and The Qt Company. For licensing terms
 
14
** and conditions see https://www.qt.io/terms-conditions. For further
 
15
** information use the contact form at https://www.qt.io/contact-us.
 
16
**
 
17
** GNU General Public License Usage
 
18
** Alternatively, this file may be used under the terms of the GNU
 
19
** General Public License version 3 as published by the Free Software
 
20
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
 
21
** included in the packaging of this file. Please review the following
 
22
** information to ensure the GNU General Public License requirements will
 
23
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
 
24
**
 
25
** $QT_END_LICENSE$
 
26
**
 
27
****************************************************************************/
 
28
 
 
29
#ifndef RE2NFA_H
 
30
#define RE2NFA_H
 
31
 
 
32
#include "nfa.h"
 
33
#include <QSet>
 
34
 
 
35
class RE2NFA
 
36
{
 
37
public:
 
38
    RE2NFA(const QMap<QString, NFA> &macros, const QSet<InputType> &maxInputSet, Qt::CaseSensitivity cs);
 
39
 
 
40
    NFA parse(const QString &expression, int *errorColumn = 0);
 
41
 
 
42
private:
 
43
    NFA parseExpr();
 
44
    NFA parseBranch();
 
45
    NFA parsePiece();
 
46
    NFA parseAtom();
 
47
    NFA parseMaybeQuantifier(const NFA &nfa);
 
48
    NFA parseSet();
 
49
    NFA parseSet2();
 
50
 
 
51
    NFA createCharNFA();
 
52
 
 
53
private:
 
54
    friend class RegExpTokenizer;
 
55
 
 
56
    enum Token {
 
57
        TOK_INVALID,
 
58
        TOK_STRING,
 
59
        TOK_LBRACE,   // {
 
60
        TOK_RBRACE,   // }
 
61
        TOK_LBRACKET, // [
 
62
        TOK_RBRACKET, // ]
 
63
        TOK_LPAREN,   // (
 
64
        TOK_RPAREN,   // )
 
65
        TOK_COMMA,
 
66
        TOK_STAR,
 
67
        TOK_OR,
 
68
        TOK_QUESTION,
 
69
        TOK_DOT,
 
70
        TOK_PLUS,
 
71
        TOK_SEQUENCE,
 
72
        TOK_QUOTED_STRING
 
73
    };
 
74
 
 
75
    struct Symbol
 
76
    {
 
77
        inline Symbol() : token(TOK_INVALID), column(-1) {}
 
78
        inline Symbol(Token t, const QString &l = QString()) : token(t), lexem(l), column(-1) {}
 
79
        Token token;
 
80
        QString lexem;
 
81
        int column;
 
82
    };
 
83
 
 
84
    inline bool hasNext() const { return index < symbols.count(); }
 
85
    inline Token next() { return symbols.at(index++).token; }
 
86
    bool next(Token t);
 
87
    bool test(Token t);
 
88
    inline void prev() { index--; }
 
89
    inline const Symbol &symbol() const { return symbols.at(index - 1); }
 
90
    QString lexemUntil(Token t);
 
91
 
 
92
    void tokenize(const QString &input);
 
93
 
 
94
    QMap<QString, NFA> macros;
 
95
    QVector<Symbol> symbols;
 
96
    int index;
 
97
    int errorColumn;
 
98
    const QSet<InputType> maxInputSet;
 
99
    Qt::CaseSensitivity caseSensitivity;
 
100
};
 
101
 
 
102
#endif // RE2NFA_H
 
103