davidbien / lexang

Lexical Analyzer Generator Template Library
Boost Software License 1.0
0 stars 0 forks source link

Trigger actions are ambiguous with each other. This shouldn't happen after the new trigger design. #2

Closed davidbien closed 3 years ago

davidbien commented 3 years ago

During NFA->DFA conversion some triggers are becoming ambiguous with each other. This shouldn't happen as the entry transitions into each trigger state are unique transition values.

The example is currently the full XML specification productions.

I filter out the ambiguous trigger states by examining the input transition to that ambiguous state. I keep only the trigger action that corresponds to that single input.

This is the error that I spew while filtering: { "msec": 3240, "Time": "20201211-173212", "Type": 2, "Mesg": ": void ns_re::_l_generator<ns_re::_dfa<wchar_t, std::allocator >, char>::_GenStateType(std::ostream &, ns_re::_l_generator::_TyGraphNode *, int, bool, bool &, bool &, ns_re::vtyTokenIdent &, ns_re::_l_generator::_TyRangeEl &) [t_TyDfa = ns_re::_dfa<wchar_t, std::allocator >, t_TyCharOut = char]: Filtering out token [10] since it doesn't match the input transition. This looks like a bug in NFA->DFA conversion." }

davidbien commented 3 years ago

I believe this is fixed by the bug that existed in KMSBitSet() method. Anyway I just looked through the generation logs in debug and retail for the XML parser state machine and I do not see any "Filtering" in the messages.