Flutter Engine
The Flutter Engine
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
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 */
22public:
23 RegexNode parse(std::string source);
24
25private:
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 parse(std::string source)
Definition: RegexParser.cpp:17
SkBitmap source
Definition: examples.cpp:28