Flutter Engine
The Flutter Engine
third_party
skia
src
sksl
lex
RegexParser.h
Go to the documentation of this file.
1
/*
2
* Copyright 2017 Google Inc.
3
*
4
* Use of this source code is governed by a BSD-style license that can be
5
* found in the LICENSE file.
6
*/
7
8
#ifndef SKSL_REGEXPARSER
9
#define SKSL_REGEXPARSER
10
11
#include "
src/sksl/lex/RegexNode.h
"
12
13
#include <stack>
14
#include <string>
15
16
/**
17
* Turns a simple regular expression into a parse tree. The regular expression syntax supports only
18
* the basic quantifiers ('*', '+', and '?'), alternation ('|'), character sets ('[a-z]'), and
19
* groups ('()').
20
*/
21
class
RegexParser
{
22
public
:
23
RegexNode
parse
(std::string
source
);
24
25
private
:
26
inline
static
constexpr
char
END =
'\0'
;
27
28
char
peek();
29
30
void
expect(
char
c);
31
32
RegexNode
pop();
33
34
/**
35
* Matches a char literal, parenthesized group, character set, or dot ('.').
36
*/
37
void
term();
38
39
/**
40
* Matches a term followed by an optional quantifier ('*', '+', or '?').
41
*/
42
void
quantifiedTerm();
43
44
/**
45
* Matches a sequence of quantifiedTerms.
46
*/
47
void
sequence();
48
49
/**
50
* Returns a node representing the given escape character (e.g. escapeSequence('n') returns a
51
* node which matches a newline character).
52
*/
53
RegexNode
escapeSequence(
char
c);
54
55
/**
56
* Matches a literal character or escape sequence.
57
*/
58
void
literal();
59
60
/**
61
* Matches a dot ('.').
62
*/
63
void
dot();
64
65
/**
66
* Matches a parenthesized group.
67
*/
68
void
group();
69
70
/**
71
* Matches a literal character, escape sequence, or character range from a character set.
72
*/
73
void
setItem();
74
75
/**
76
* Matches a character set.
77
*/
78
void
set();
79
80
void
regex();
81
82
std::string fSource;
83
84
size_t
fIndex;
85
86
std::stack<RegexNode> fStack;
87
};
88
89
#endif
RegexNode.h
RegexParser
Definition:
RegexParser.h:21
RegexParser::parse
RegexNode parse(std::string source)
Definition:
RegexParser.cpp:17
source
SkBitmap source
Definition:
examples.cpp:28
RegexNode
Definition:
RegexNode.h:20
Generated on Sun Jun 23 2024 21:56:35 for Flutter Engine by
1.9.4