5 #ifndef HOBBES_LANG_PAT_DFA_HPP_INCLUDED 6 #define HOBBES_LANG_PAT_DFA_HPP_INCLUDED 11 #include <unordered_map> 19 typedef std::pair<std::string, MonoTypePtr>
PrimFArg;
25 virtual std::string
stamp() = 0;
45 template <
typename Case>
53 typedef std::pair<std::string, ExprPtr>
Def;
54 typedef std::vector<Def>
Defs;
57 const Defs& defs()
const;
58 stateidx_t nextState()
const;
62 static const int type_case_id = 0;
70 typedef std::pair<PrimitivePtr, stateidx_t>
Jump;
71 typedef std::vector<Jump>
Jumps;
73 SwitchVal(
const std::string&,
const Jumps&, stateidx_t);
74 const std::string& switchVar()
const;
75 const Jumps& jumps()
const;
76 stateidx_t defaultState()
const;
80 static const int type_case_id = 1;
89 typedef std::pair<std::string, stateidx_t>
CtorJump;
92 SwitchVariant(
const std::string&,
const CtorJumps&, stateidx_t);
93 const std::string& switchVar()
const;
94 const CtorJumps& jumps()
const;
95 stateidx_t defaultState()
const;
99 static const int type_case_id = 2;
114 static const int type_case_id = 3;
121 template <
typename Case>
129 template <
typename T>
131 virtual T with(
const LoadVars*)
const = 0;
132 virtual T with(
const SwitchVal*)
const = 0;
137 template <
typename T>
140 case LoadVars::type_case_id:
142 case SwitchVal::type_case_id:
144 case SwitchVariant::type_case_id:
146 case FinishExpr::type_case_id:
149 throw std::runtime_error(
"Internal error, cannot switch on unknown match state");
153 template <
typename T>
159 typedef std::unordered_map<std::string, stateidx_t>
StatesIdx;
161 typedef std::unordered_map<std::string, ExprPtr>
VarNames;
172 typedef std::unordered_map<PatternRows, stateidx_t, hobbes::genHash<PatternRows>>
TableCfgStates;
174 typedef std::unordered_map<Expr*, size_t>
ExprIdxs;
std::pair< PrimitivePtr, stateidx_t > Jump
Definition: dfa.H:70
bool inPrimSel
Definition: dfa.H:185
PrimFArgs primFArgs
Definition: dfa.H:34
std::string var
Definition: dfa.H:82
std::unordered_map< std::string, ExprPtr > VarArrayLen
Definition: dfa.H:164
CtorJumps jmps
Definition: dfa.H:102
std::unordered_map< std::string, ExprPtr > VarNames
Definition: dfa.H:161
std::unordered_map< std::string, ArrayElem > VarArrayElem
Definition: dfa.H:163
VarNames varExps
Definition: dfa.H:191
std::shared_ptr< MState > MStatePtr
Definition: dfa.H:125
ExprPtr exp
Definition: dfa.H:116
std::set< stateidx_t > stateidxset
Definition: dfa.H:17
VarArrayElem elementExps
Definition: dfa.H:192
stateidx_t makeDFA(MDFA *, const PatternRows &, const LexicalAnnotation &)
Definition: dfa.C:1005
MStates states
Definition: dfa.H:181
std::pair< std::string, stateidx_t > CtorJump
Definition: dfa.H:89
str::set rootVars
Definition: dfa.H:187
std::pair< std::string, ExprPtr > FoldedState
Definition: dfa.H:168
std::vector< CtorJump > CtorJumps
Definition: dfa.H:90
std::vector< MStatePtr > MStates
Definition: dfa.H:126
std::unordered_map< Expr *, size_t > ExprIdxs
Definition: dfa.H:174
std::unordered_map< std::string, ExprPtr > StructField
Definition: dfa.H:165
std::map< size_t, ExprPtr > ArrayElem
Definition: dfa.H:162
VarStructField fieldExps
Definition: dfa.H:194
std::unordered_map< std::string, StructField > VarStructField
Definition: dfa.H:166
FoldedStates foldedStates
Definition: dfa.H:197
FoldedStateCalls foldedStateCalls
Definition: dfa.H:198
virtual std::string stamp()=0
std::pair< std::string, ExprPtr > Def
Definition: dfa.H:53
MStateCase()
Definition: dfa.H:122
std::vector< FoldedState > FoldedStates
Definition: dfa.H:169
std::unordered_map< std::string, stateidx_t > StatesIdx
Definition: dfa.H:159
std::vector< PrimFArg > PrimFArgs
Definition: dfa.H:20
ExprPtr liftDFAExpr(cc *, const PatternRows &, const LexicalAnnotation &)
Definition: dfa.C:1204
stateidx_t def
Definition: dfa.H:84
std::vector< Jump > Jumps
Definition: dfa.H:71
size_t refs
Definition: dfa.H:29
std::shared_ptr< Expr > ExprPtr
Definition: expr.H:58
stateidx_t makeDFAState(MDFA *dfa, const PatternRows &ps)
Definition: dfa.C:943
bool isPrimMatchRoot
Definition: dfa.H:33
T switchOf(const MStatePtr &s, const switchMState< T > &f)
Definition: dfa.H:154
Jumps jmps
Definition: dfa.H:83
ExprIdxs exprIdxs
Definition: dfa.H:184
Definition: lannotation.H:22
std::unordered_map< stateidx_t, ExprPtr > FoldedStateCalls
Definition: dfa.H:170
stateidx_t next
Definition: dfa.H:65
int cid
Definition: dfa.H:42
int case_id() const
Definition: dfa.C:18
std::set< std::string > set
Definition: str.H:241
size_t stateidx_t
Definition: dfa.H:16
Defs ds
Definition: dfa.H:64
std::string var
Definition: dfa.H:101
std::unordered_map< PatternRows, stateidx_t, hobbes::genHash< PatternRows > > TableCfgStates
Definition: dfa.H:172
MState(int cid)
Definition: dfa.C:17
VarArrayLen sizeExps
Definition: dfa.H:193
std::vector< Def > Defs
Definition: dfa.H:54
stateidx_t def
Definition: dfa.H:103
cc * c
Definition: dfa.H:188
virtual T with(const LoadVars *) const =0
TableCfgStates tableCfgStates
Definition: dfa.H:183
LexicalAnnotation rootLA
Definition: dfa.H:178
StatesIdx statesIdx
Definition: dfa.H:182
std::vector< PatternRow > PatternRows
Definition: pattern.H:31
stateidx_t nullState
Definition: dfa.C:14
std::pair< std::string, MonoTypePtr > PrimFArg
Definition: dfa.H:19