SST 16.0.0
Structural Simulation Toolkit
jsonstates.h
1// -*- c++ -*-
2
3// Copyright 2009-2026 NTESS. Under the terms
4// of Contract DE-NA0003525 with NTESS, the U.S.
5// Government retains certain rights in this software.
6//
7// Copyright (c) 2009-2026, NTESS
8// All rights reserved.
9//
10// This file is part of the SST software package. For license
11// information, see the LICENSE file in the top level directory of the
12// distribution.
13
14#ifndef SST_CORE_MODEL_JSON_JSONSTATES_H
15#define SST_CORE_MODEL_JSON_JSONSTATES_H
16
17namespace SST::Core::JSONParser {
18
19// X-macros to generate state transition tables
20// Hierarchical states are expanded to form a single state name by appending the nested state names with an underscore
21// State tuple is: state, parent state, next state on object/array open or Invalid, next state on 'params' key
22// Note that 'Invalid' just means that either (a) there is no transition or (b) the transition table can't be used to
23// determine the transition
24// '*_key' states indicate that the keyword for the next state has been seen and an object or array will be opened next
25
26#define X_STATES \
27 /* Entry (start state) */ \
28 X(Entry, Invalid, Root, Invalid) \
29 /* In root object */ \
30 X(Root, Entry, Invalid, Invalid) \
31 /* ------------------------- */ \
32 /* Major Section: 'program_options' */ \
33 /* ------------------------- */ \
34 /* Section keyword seen */ \
35 X(ProgramOptions_key, Root, ProgramOptions, Invalid) \
36 /* In section object */ \
37 X(ProgramOptions, Root, Invalid, Invalid) \
38 /* ------------------------- */ \
39 /* Major Section: 'shared_params' - object containing name/object pairs */ \
40 /* ------------------------- */ \
41 /* Section keyword seen */ \
42 X(SharedParams_key, Root, SharedParams, Invalid) \
43 /* In section's root object */ \
44 X(SharedParams, Root, SharedParams_object_key, Invalid) \
45 /* Got name of next shared_param object */ \
46 X(SharedParams_object_key, SharedParams, SharedParams_object, Invalid) \
47 /* In a shared_param object */ \
48 X(SharedParams_object, SharedParams, Invalid, Invalid) \
49 /* ------------------------- */ \
50 /* Major section: 'statistics_options' */ \
51 /* ------------------------- */ \
52 /* Section keyword seen */ \
53 X(StatOptions_key, Root, StatOptions, Invalid) \
54 /* In 'statistics_options' object*/ \
55 X(StatOptions, Root, Invalid, StatOptions_Params_key) \
56 /* 'params' keyword seen */ \
57 X(StatOptions_Params_key, StatOptions, StatOptions_Params, Invalid) \
58 /* In params object*/ \
59 X(StatOptions_Params, StatOptions, Invalid, Invalid) \
60 /* ------------------------- */ \
61 /* Major section: 'statistics_group' */ \
62 /* ------------------------- */ \
63 /* 'statistics_group' keyword seen */ \
64 X(StatGroupsArray_key, Root, StatGroupsArray, Invalid) \
65 /* In 'statistics_group' array */ \
66 X(StatGroupsArray, Root, StatGroup, Invalid) \
67 /* In a statistics group object */ \
68 X(StatGroup, StatGroupsArray, Invalid, Invalid) \
69 /* 'output' keyword seen */ \
70 X(StatGroup_Output_key, StatGroup, StatGroup_Output, Invalid) \
71 /* In output object */ \
72 X(StatGroup_Output, StatGroup, Invalid, StatGroup_Output_Params_key) \
73 /* 'params' keyword seen */ \
74 X(StatGroup_Output_Params_key, StatGroup_Output, StatGroup_Output_Params, Invalid) \
75 /* In params object */ \
76 X(StatGroup_Output_Params, StatGroup_Output, Invalid, Invalid) \
77 /* 'statistics' keyword seen */ \
78 X(StatGroup_StatArray_key, StatGroup, StatGroup_StatArray, Invalid) \
79 /* In statistics array */ \
80 X(StatGroup_StatArray, StatGroup, StatGroup_Stat, Invalid) \
81 /* In a statistic object */ \
82 X(StatGroup_Stat, StatGroup_StatArray, Invalid, StatGroup_Stat_Params_key) \
83 /* 'params' keyword seen */ \
84 X(StatGroup_Stat_Params_key, StatGroup_Stat, StatGroup_Stat_Params, Invalid) \
85 /* In params object */ \
86 X(StatGroup_Stat_Params, StatGroup_Stat, Invalid, Invalid) \
87 /* 'components' keyword seen */ \
88 X(StatGroup_CompArray_key, StatGroup, StatGroup_CompArray, Invalid) \
89 /* In components array */ \
90 X(StatGroup_CompArray, StatGroup, Invalid, Invalid) \
91 /* ------------------------- */ \
92 /* Major section: 'components'*/ \
93 /* ------------------------- */ \
94 /* 'components' keyword seen */ \
95 X(CompArray_key, Root, CompArray, Invalid) \
96 /* In components array */ \
97 X(CompArray, Root, Comp, Invalid) \
98 /* In a component object */ \
99 X(Comp, CompArray, Invalid, Comp_Params_key) \
100 /* 'params' keyword seen */ \
101 X(Comp_Params_key, Comp, Comp_Params, Invalid) \
102 /* In params object */ \
103 X(Comp_Params, Comp, Invalid, Invalid) \
104 /* 'statistics_options' keyword seen */ \
105 X(Comp_StatOptions_key, Comp, Comp_StatOptions, Invalid) \
106 /* In 'statistics_options' object*/ \
107 X(Comp_StatOptions, Comp, Invalid, Comp_StatOptions_Params_key) \
108 /* 'params' keyword seen */ \
109 X(Comp_StatOptions_Params_key, Comp_StatOptions, Comp_StatOptions_Params, Invalid) \
110 /* In params object*/ \
111 X(Comp_StatOptions_Params, Comp_StatOptions, Invalid, Invalid) \
112 /* 'statistics' keyword seen */ \
113 X(Comp_StatArray_key, Comp, Comp_StatArray, Invalid) \
114 /* 'In statistics arrray */ \
115 X(Comp_StatArray, Comp, Comp_Stat, Invalid) \
116 /* In statistic object */ \
117 X(Comp_Stat, Comp_StatArray, Invalid, Comp_Stat_Params_key) \
118 /* 'params' keyword seen */ \
119 X(Comp_Stat_Params_key, Comp_Stat, Comp_Stat_Params, Invalid) \
120 /* In params object */ \
121 X(Comp_Stat_Params, Comp_Stat, Invalid, Invalid) \
122 /* 'shared_params' keyword seen */ \
123 X(Comp_SharedParamsArray_key, Comp, Comp_SharedParamsArray, Invalid) \
124 /* In shared_params array */ \
125 X(Comp_SharedParamsArray, Comp, Invalid, Invalid) \
126 /* In partition object */ \
127 X(Comp_Partition_key, Comp, Comp_Partition, Invalid) \
128 /* 'partition' keyword seen */ \
129 X(Comp_Partition, Comp, Invalid, Invalid) \
130 /* ------------------------- */ \
131 /* Major SubSection: 'port_modules' in a component or subcomponent */ \
132 /* ------------------------- */ \
133 /* 'port_module' keyword seen */ \
134 X(PortModArray_key, Invalid, PortModArray, Invalid) \
135 /* In port_module array */ \
136 X(PortModArray, Invalid, PortMod, Invalid) \
137 /* In port_module object */ \
138 X(PortMod, PortModArray, Invalid, PortMod_Params) \
139 /* 'params' keyword seen*/ \
140 X(PortMod_Params_key, PortMod, PortMod_Params, Invalid) \
141 /* In params object */ \
142 X(PortMod_Params, PortMod, Invalid, Invalid) \
143 /* 'shared_params' keyword seen */ \
144 X(PortMod_SharedParamsArray_key, PortMod, PortMod_SharedParamsArray, Invalid) \
145 /* In shared_params array */ \
146 X(PortMod_SharedParamsArray, PortMod, Invalid, Invalid) \
147 /* 'statistics' keyword seen */ \
148 X(PortMod_StatArray_key, PortMod, PortMod_StatArray, Invalid) \
149 /* In statistics section */ \
150 X(PortMod_StatArray, PortMod, PortMod_Stat, Invalid) \
151 /* In statistic object */ \
152 X(PortMod_Stat, PortMod_StatArray, Invalid, PortMod_Stat_Params_key) \
153 /* 'params' keyword seen */ \
154 X(PortMod_Stat_Params_key, PortMod_Stat, PortMod_Stat_Params, Invalid) \
155 /* In params object */ \
156 X(PortMod_Stat_Params, PortMod_Stat, Invalid, Invalid) \
157 /* 'statistics_options' keyword seen */ \
158 X(PortMod_StatOptions_key, PortMod, PortMod_StatOptions, Invalid) \
159 /* In 'statistics_options' object*/ \
160 X(PortMod_StatOptions, PortMod, Invalid, PortMod_StatOptions_Params_key) \
161 /* 'params' keyword seen */ \
162 X(PortMod_StatOptions_Params_key, PortMod_StatOptions, PortMod_StatOptions_Params, Invalid) \
163 /* In params object*/ \
164 X(PortMod_StatOptions_Params, PortMod_StatOptions, Invalid, Invalid) \
165 /* ------------------------- */ \
166 /* Major SubSection: 'subcomponents' in a component or subcomponent */ \
167 /* Stack of currently open component objects indicates the nesting of parent (sub)components */ \
168 /* ------------------------- */ \
169 /* 'subcomponents' keyword seen */ \
170 X(SubCompArray_key, Invalid, SubCompArray, Invalid) \
171 /* In subcomponents array */ \
172 X(SubCompArray, Invalid, SubComp, Invalid) \
173 /* In subcomponent object */ \
174 X(SubComp, SubCompArray, Invalid, SubComp_Params_key) \
175 /* 'params' keyword seen */ \
176 X(SubComp_Params_key, SubComp, SubComp_Params, Invalid) \
177 /* In params object */ \
178 X(SubComp_Params, SubComp, Invalid, Invalid) \
179 /* 'statistics_options' keyword seen */ \
180 X(SubComp_StatOptions_key, SubComp, SubComp_StatOptions, Invalid) \
181 /* In 'statistics_options' object*/ \
182 X(SubComp_StatOptions, SubComp, Invalid, SubComp_StatOptions_Params_key) \
183 /* 'params' keyword seen */ \
184 X(SubComp_StatOptions_Params_key, SubComp_StatOptions, SubComp_StatOptions_Params, Invalid) \
185 /* In params object*/ \
186 X(SubComp_StatOptions_Params, SubComp_StatOptions, Invalid, Invalid) \
187 /* 'statistics' keyword seen */ \
188 X(SubComp_StatArray_key, SubComp, SubComp_StatArray, Invalid) \
189 /* 'In statistics arrray */ \
190 X(SubComp_StatArray, SubComp, SubComp_Stat, Invalid) \
191 /* In statistic object */ \
192 X(SubComp_Stat, SubComp_StatArray, Invalid, SubComp_Stat_Params_key) \
193 /* 'params' keyword seen */ \
194 X(SubComp_Stat_Params_key, SubComp_Stat, SubComp_Stat_Params, Invalid) \
195 /* In params object */ \
196 X(SubComp_Stat_Params, SubComp_Stat, Invalid, Invalid) \
197 /* 'shared_params' keyword seen */ \
198 X(SubComp_SharedParamsArray_key, SubComp, SubComp_SharedParamsArray, Invalid) \
199 /* In shared_params array */ \
200 X(SubComp_SharedParamsArray, SubComp, Invalid, Invalid) \
201 /* ------------------------- */ \
202 /* Major section: 'links' */ \
203 /* ------------------------- */ \
204 /* 'links' key seen */ \
205 X(LinkArray_key, Root, LinkArray, Invalid) \
206 /* In links array */ \
207 X(LinkArray, Root, Link, Invalid) \
208 /* In a link object */ \
209 X(Link, LinkArray, Invalid, Invalid) \
210 /* 'left' key seen */ \
211 X(Link_Left_key, Link, Link_Left, Invalid) \
212 /* In left object */ \
213 X(Link_Left, Link, Invalid, Invalid) \
214 /* 'right' key seen */ \
215 X(Link_Right_key, Link, Link_Right, Invalid) \
216 /* In right object */ \
217 X(Link_Right, Link, Invalid, Invalid) \
218 /* ------------------------- */ \
219 /* Invalid state */ \
220 /* ------------------------- */ \
221 X(Invalid, Invalid, Invalid, Invalid)
222
223// Parser states
224enum class State {
225#define X(a, b, c, d) a,
226 X_STATES
227#undef X
228};
229
230// Parent states for each parser state
231static const State ParentState[] = {
232#define X(a, b, c, d) State::b,
233 X_STATES
234#undef X
235};
236
237// Next states when an array or object is started for each parser state
238static const State NextStateObjOrArray[] = {
239#define X(a, b, c, d) State::c,
240 X_STATES
241#undef X
242};
243
244// Next states when 'params' key is encountered for each parser state
245static const State NextStateParams[] = {
246#define X(a, b, c, d) State::d,
247 X_STATES
248#undef X
249};
250
251// Strings for error output
252static const std::string StateString[] = {
253#define X(a, b, c, d) #a,
254 X_STATES
255#undef X
256};
257
258#undef X_STATES
259
260} // namespace SST::Core::JSONParser
261
262#endif