12345678910111213141516171819202122232425262728293031323334353637 |
- /*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef SKSL_DFA
- #define SKSL_DFA
- #include <string>
- #include <vector>
- /**
- * Tables representing a deterministic finite automaton for matching regular expressions.
- */
- struct DFA {
- DFA(std::vector<int> charMappings, std::vector<std::vector<int>> transitions,
- std::vector<int> accepts)
- : fCharMappings(charMappings)
- , fTransitions(transitions)
- , fAccepts(accepts) {}
- // maps chars to the row index of fTransitions, as multiple characters may map to the same row.
- // starting from state s and looking at char c, the new state is
- // fTransitions[fCharMappings[c]][s].
- std::vector<int> fCharMappings;
- // one row per character mapping, one column per state
- std::vector<std::vector<int>> fTransitions;
- // contains, for each state, the token id we should report when matching ends in that state (-1
- // for no match)
- std::vector<int> fAccepts;
- };
- #endif
|