32 return Parser::make_REAL(float_value, pos);
51 if (
text !=
nullptr) {
58 return Parser::make_INTEGER(int_value, pos);
78 value.set_token(token);
79 return Parser::make_NAME(
value, pos);
102 value.set_token(token);
103 return Parser::make_PRIME(
value, pos);
116 value.set_token(token);
117 return Parser::make_STRING(
value, pos);
137 if (
type == Token::UNKNOWN) {
145 switch (
static_cast<int>(
type)) {
147 return Parser::make_AFTER(token, pos);
148 case Token::BBCOREPOINTER:
149 return Parser::make_BBCOREPOINTER(token, pos);
151 return Parser::make_BEFORE(token, pos);
152 case Token::BREAKPOINT:
153 return Parser::make_BREAKPOINT(token, pos);
155 return Parser::make_BY(token, pos);
156 case Token::COMPARTMENT:
157 return Parser::make_COMPARTMENT(token, pos);
158 case Token::CONDUCTANCE:
159 return Parser::make_CONDUCTANCE(token, pos);
160 case Token::CONSERVE:
161 return Parser::make_CONSERVE(token, pos);
162 case Token::CONSTANT:
163 return Parser::make_CONSTANT(token, pos);
164 case Token::CONSTRUCTOR:
165 return Parser::make_CONSTRUCTOR(token, pos);
167 return Parser::make_DEFINE1(token, pos);
169 return Parser::make_DEPEND(token, pos);
170 case Token::ASSIGNED:
171 return Parser::make_ASSIGNED(token, pos);
172 case Token::DERIVATIVE:
173 return Parser::make_DERIVATIVE(token, pos);
174 case Token::DESTRUCTOR:
175 return Parser::make_DESTRUCTOR(token, pos);
176 case Token::DISCRETE:
177 return Parser::make_DISCRETE(token, pos);
178 case Token::ELECTRODE_CURRENT:
179 return Parser::make_ELECTRODE_CURRENT(token, pos);
181 return Parser::make_ELSE(token, pos);
182 case Token::EQUATION:
183 return Parser::make_EQUATION(token, pos);
184 case Token::EXTERNAL:
185 return Parser::make_EXTERNAL(token, pos);
186 case Token::FOR_NETCONS:
187 return Parser::make_FOR_NETCONS(token, pos);
189 return Parser::make_FROM(token, pos);
190 case Token::FUNCTION1:
191 return Parser::make_FUNCTION1(token, pos);
192 case Token::FUNCTION_TABLE:
193 return Parser::make_FUNCTION_TABLE(token, pos);
195 return Parser::make_GLOBAL(token, pos);
197 return Parser::make_IF(token, pos);
198 case Token::INCLUDE1:
199 return Parser::make_INCLUDE1(token, pos);
200 case Token::INDEPENDENT:
201 return Parser::make_INDEPENDENT(token, pos);
202 case Token::INITIAL1:
203 return Parser::make_INITIAL1(token, pos);
205 return Parser::make_KINETIC(token, pos);
207 return Parser::make_LAG(token, pos);
209 return Parser::make_LINEAR(token, pos);
211 return Parser::make_LOCAL(token, pos);
212 case Token::LONGDIFUS:
213 return Parser::make_LONGDIFUS(token, pos);
215 return Parser::make_MODEL(token, pos);
216 case Token::NETRECEIVE:
217 return Parser::make_NETRECEIVE(token, pos);
219 return Parser::make_NEURON(token, pos);
220 case Token::NONLINEAR:
221 return Parser::make_NONLINEAR(token, pos);
222 case Token::NONSPECIFIC:
223 return Parser::make_NONSPECIFIC(token, pos);
224 case Token::NRNMUTEXLOCK:
225 return Parser::make_NRNMUTEXLOCK(token, pos);
226 case Token::NRNMUTEXUNLOCK:
227 return Parser::make_NRNMUTEXUNLOCK(token, pos);
228 case Token::PARAMETER:
229 return Parser::make_PARAMETER(token, pos);
231 return Parser::make_POINTER(token, pos);
232 case Token::PROCEDURE:
233 return Parser::make_PROCEDURE(token, pos);
235 return Parser::make_PROTECT(token, pos);
237 return Parser::make_RANDOM(token, pos);
239 return Parser::make_RANGE(token, pos);
241 return Parser::make_READ(token, pos);
243 return Parser::make_SOLVE(token, pos);
244 case Token::SOLVEFOR:
245 return Parser::make_SOLVEFOR(token, pos);
247 return Parser::make_START1(token, pos);
249 return Parser::make_STATE(token, pos);
250 case Token::STEADYSTATE:
251 return Parser::make_STEADYSTATE(token, pos);
253 return Parser::make_STEP(token, pos);
255 return Parser::make_SWEEP(token, pos);
257 return Parser::make_TABLE(token, pos);
258 case Token::THREADSAFE:
259 return Parser::make_THREADSAFE(token, pos);
261 return Parser::make_TO(token, pos);
263 return Parser::make_UNITS(token, pos);
264 case Token::UNITSOFF:
265 return Parser::make_UNITSOFF(token, pos);
267 return Parser::make_UNITSON(token, pos);
269 return Parser::make_USEION(token, pos);
271 return Parser::make_USING(token, pos);
273 return Parser::make_VS(token, pos);
275 return Parser::make_WATCH(token, pos);
277 return Parser::make_WHILE(token, pos);
279 return Parser::make_WITH(token, pos);
281 return Parser::make_WRITE(token, pos);
283 return Parser::make_REACT1(token, pos);
285 return Parser::make_NONLIN1(token, pos);
287 return Parser::make_LIN1(token, pos);
288 case Token::REACTION:
289 return Parser::make_REACTION(token, pos);
291 return Parser::make_GT(token, pos);
293 return Parser::make_GE(token, pos);
295 return Parser::make_LT(token, pos);
297 return Parser::make_LE(token, pos);
299 return Parser::make_EQ(token, pos);
301 return Parser::make_NE(token, pos);
303 return Parser::make_NOT(token, pos);
305 return Parser::make_AND(token, pos);
307 return Parser::make_OR(token, pos);
308 case Token::OPEN_BRACE:
309 return Parser::make_OPEN_BRACE(token, pos);
310 case Token::CLOSE_BRACE:
311 return Parser::make_CLOSE_BRACE(token, pos);
312 case Token::OPEN_PARENTHESIS:
313 return Parser::make_OPEN_PARENTHESIS(token, pos);
314 case Token::CLOSE_PARENTHESIS:
315 return Parser::make_CLOSE_PARENTHESIS(token, pos);
316 case Token::OPEN_BRACKET:
317 return Parser::make_OPEN_BRACKET(token, pos);
318 case Token::CLOSE_BRACKET:
319 return Parser::make_CLOSE_BRACKET(token, pos);
321 return Parser::make_AT(token, pos);
323 return Parser::make_ADD(token, pos);
325 return Parser::make_MINUS(token, pos);
326 case Token::MULTIPLY:
327 return Parser::make_MULTIPLY(token, pos);
329 return Parser::make_DIVIDE(token, pos);
331 return Parser::make_EQUAL(token, pos);
333 return Parser::make_CARET(token, pos);
335 return Parser::make_COLON(token, pos);
337 return Parser::make_COMMA(token, pos);
339 return Parser::make_PERIOD(token, pos);
340 case Token::REPRESENTS:
341 return Parser::make_REPRESENTS(token, pos);
347 auto msg =
"Token type not found while creating a symbol!";
348 throw std::runtime_error(msg);
Auto generated AST classes declaration.
Represent token returned by scanner.
Represents a double variable.
void set_token(const ModToken &tok)
Set token for the current ast node.
Represents an integer variable.
void set_token(const ModToken &tok)
Set token for the current ast node.
void set_token(const ModToken &tok)
Set token for the current ast node.
Represents a prime variable (for ODE)
static double order(void *v)
static std::string remove_character(std::string text, const char c)
Remove all occurrences of a given character in a text.
std::string to_string(const T &obj)
encapsulates code generation backend implementations
SymbolType prime_symbol(std::string text, PositionType &pos)
Create symbol for ast::Prime AST class.
parser::NmodlParser::symbol_type SymbolType
TokenType token_type(const std::string &name)
Return token type for given token name.
bool is_method(const std::string &name)
Check if given name is an integration method in NMODL.
parser::NmodlParser::token_type TokenType
SymbolType name_symbol(const std::string &text, PositionType &pos, TokenType type)
Create symbol for ast::Name AST class.
SymbolType double_symbol(const std::string &value, PositionType &pos)
Create a symbol for ast::Double AST class.
bool is_keyword(const std::string &name)
Check if given name is a keyword in NMODL.
parser::location PositionType
SymbolType string_symbol(const std::string &text, PositionType &pos)
Create symbol for ast::String AST class.
SymbolType integer_symbol(int value, PositionType &pos, const char *text)
Create a symbol for ast::Integer AST.
SymbolType token_symbol(const std::string &key, PositionType &pos, TokenType type)
Create symbol for AST class.
parser::NmodlParser Parser
Utility functions for NMODL lexer.
Implement string manipulation functions.
Map different tokens from lexer to token types.