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
175 void *input, void **result, char **error);
176
/* end exec_callback */
178
179/* ------------------------------------------------------------------ */
184/* ------------------------------------------------------------------ */
185
208
/* end exec_config */
210
211/* ------------------------------------------------------------------ */
216/* ------------------------------------------------------------------ */
217
226
246 const struct StrategyResult *disambiguation,
247 LimeParserHandle **parsers,
248 GrammarExtensionMetadata **extensions, int *nresults_out);
249
262void execution_results_free(ExecutionResult *results, int nresults);
263
271
285 const struct StrategyResult *disambiguation,
286 LimeParserHandle **parsers,
287 GrammarExtensionMetadata **extensions, int *nresults_out);
288
/* end exec_api */
290
291#ifdef __cplusplus
292}
293#endif
294
295#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:201
The result of a disambiguation resolution.