Lime Parser Generator 0.1.0
Runtime-extensible LALR(1) parser with SIMD tokenization and LLVM JIT
Loading...
Searching...
No Matches
execution_policy.h
Go to the documentation of this file.
1
36#ifndef EXECUTION_POLICY_H
37#define EXECUTION_POLICY_H
38
39#include <stdint.h>
40#include <stdbool.h>
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46/* ------------------------------------------------------------------ */
47/* Forward declarations */
48/* ------------------------------------------------------------------ */
49
50struct StrategyResult;
51struct LimeContext;
52
53/* ------------------------------------------------------------------ */
58/* ------------------------------------------------------------------ */
59
69 uint32_t extension_id;
70 const char *name;
71 uint32_t priority;
72 void *user_data;
87 bool (*should_execute)(const struct GrammarExtensionMetadata *self,
88 const struct StrategyResult *strategy_result);
90
/* end exec_ext_meta */
92
93/* ------------------------------------------------------------------ */
98/* ------------------------------------------------------------------ */
99
115
/* end exec_policy_enum */
117
118/* ------------------------------------------------------------------ */
123/* ------------------------------------------------------------------ */
124
128typedef struct ExecutionResult {
129 uint32_t extension_id;
130 void *result;
131 char *error;
133
/* end exec_result */
135
136/* ------------------------------------------------------------------ */
141/* ------------------------------------------------------------------ */
142
151
/* end exec_parser_handle */
153
154/* ------------------------------------------------------------------ */
159/* ------------------------------------------------------------------ */
160
174typedef bool (*ParserExecuteFn)(LimeParserHandle *parser,
175 const GrammarExtensionMetadata *ext,
176 void *input,
177 void **result,
178 char **error);
179
/* end exec_callback */
181
182/* ------------------------------------------------------------------ */
187/* ------------------------------------------------------------------ */
188
211
/* end exec_config */
213
214/* ------------------------------------------------------------------ */
219/* ------------------------------------------------------------------ */
220
229
249 const ExecutionPolicyConfig *config,
250 const struct StrategyResult *disambiguation,
251 LimeParserHandle **parsers,
252 GrammarExtensionMetadata **extensions,
253 int *nresults_out
254);
255
268void execution_results_free(ExecutionResult *results, int nresults);
269
277
291 ParserExecuteFn execute_fn,
292 const struct StrategyResult *disambiguation,
293 LimeParserHandle **parsers,
294 GrammarExtensionMetadata **extensions,
295 int *nresults_out
296);
297
/* end exec_api */
299
300#ifdef __cplusplus
301}
302#endif
303
304#endif /* EXECUTION_POLICY_H */
ExecutionResult * execute_semantic_actions(const ExecutionPolicyConfig *config, const struct StrategyResult *disambiguation, LimeParserHandle **parsers, GrammarExtensionMetadata **extensions, int *nresults_out)
Execute semantic actions according to the configured policy.
void execution_policy_config_init(ExecutionPolicyConfig *config)
Initialize default execution policy configuration.
const char * execution_policy_name(LimeExecMode policy)
Return a human-readable name for an execution policy.
void execution_results_free(ExecutionResult *results, int nresults)
Free an array of execution results.
ExecutionResult * execute_first_only(ParserExecuteFn execute_fn, const struct StrategyResult *disambiguation, LimeParserHandle **parsers, GrammarExtensionMetadata **extensions, int *nresults_out)
Convenience: execute with EXEC_FIRST_ONLY policy.
bool(* ParserExecuteFn)(LimeParserHandle *parser, const GrammarExtensionMetadata *ext, void *input, void **result, char **error)
Callback type for executing a parser's semantic actions.
struct LimeParserHandle LimeParserHandle
Opaque parser handle for the execution engine.
LimeExecMode
Available execution policies.
@ EXEC_FIRST_ONLY
Only highest-priority winner executes.
@ EXEC_CHAIN
Winners execute in sequence, output chained.
@ EXEC_CONDITIONAL
Extension-provided callback decides.
@ EXEC_ALL
All winners execute independently.
Configuration for the execution policy engine.
ParserExecuteFn execute_fn
Callback to run a parser.
bool stop_on_error
If true, execution stops at the first error.
LimeExecMode policy
Which policy to use.
int max_executions
Maximum number of parsers to execute.
Result of executing a single grammar's semantic actions.
char * error
NULL on success; malloc'd error on failure.
void * result
Semantic action output (owned by caller)
uint32_t extension_id
Which extension produced this result.
Metadata describing a grammar extension participant in the execution pipeline.
const char * name
Extension name (borrowed pointer)
uint32_t extension_id
Extension ID from the registry.
uint32_t priority
Higher = more preferred.
bool(* should_execute)(const struct GrammarExtensionMetadata *self, const struct StrategyResult *strategy_result)
Optional callback for EXEC_CONDITIONAL policy.
void * user_data
Extension-specific data.
A grammar context – one possible interpretation of a token within a particular grammar/extension.
Definition conflict.h:215
The result of a disambiguation resolution.