/* * 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 #include /** * Tables representing a deterministic finite automaton for matching regular expressions. */ struct DFA { DFA(std::vector charMappings, std::vector> transitions, std::vector 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 fCharMappings; // one row per character mapping, one column per state std::vector> fTransitions; // contains, for each state, the token id we should report when matching ends in that state (-1 // for no match) std::vector fAccepts; }; #endif