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_DFA
9 #define SKSL_DFA
10 
11 #include <string>
12 #include <vector>
13 
14 /**
15  * Tables representing a deterministic finite automaton for matching regular expressions.
16  */
17 struct DFA {
DFADFA18     DFA(std::vector<int> charMappings, std::vector<std::vector<int>> transitions,
19         std::vector<int> accepts)
20     : fCharMappings(charMappings)
21     , fTransitions(transitions)
22     , fAccepts(accepts) {}
23 
24     // maps chars to the row index of fTransitions, as multiple characters may map to the same row.
25     // starting from state s and looking at char c, the new state is
26     // fTransitions[fCharMappings[c]][s].
27     std::vector<int> fCharMappings;
28 
29     // one row per character mapping, one column per state
30     std::vector<std::vector<int>> fTransitions;
31 
32     // contains, for each state, the token id we should report when matching ends in that state (-1
33     // for no match)
34     std::vector<int> fAccepts;
35 };
36 
37 #endif
38