Lime Parser Generator 0.1.0
Runtime-extensible LALR(1) parser with SIMD tokenization and LLVM JIT
Loading...
Searching...
No Matches
parser_fork.h
Go to the documentation of this file.
1
35#ifndef PARSER_FORK_H
36#define PARSER_FORK_H
37
38#include <stdbool.h>
39#include <stdint.h>
40#include <stddef.h>
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46/* Forward declarations */
47struct ParserSnapshot;
48
49/* ================================================================== */
54/* ================================================================== */
55
66
/* end fork_status */
68
69/* ================================================================== */
74/* ================================================================== */
75
94
/* end cloned_state */
96
97/* ================================================================== */
102/* ================================================================== */
103
147
/* end parse_fork */
149
150/* ================================================================== */
155/* ================================================================== */
156
166uint64_t parser_fork_next_id(void);
167
/* end fork_id */
169
170/* ================================================================== */
175/* ================================================================== */
176
200 const void *parser,
201 size_t parser_size,
202 size_t stack_entry_size,
203 size_t inline_stack_offset,
204 uint32_t inline_stack_count,
205 size_t stack_field_offset,
206 size_t tos_field_offset,
207 size_t stack_end_offset,
209);
210
219
/* end clone_api */
221
222/* ================================================================== */
227/* ================================================================== */
228
252 const void *parser,
253 size_t parser_size,
254 size_t stack_entry_size,
255 size_t inline_stack_offset,
256 uint32_t inline_stack_count,
257 size_t stack_field_offset,
258 size_t tos_field_offset,
259 size_t stack_end_offset,
260 struct ParserSnapshot *snapshot,
261 int priority
262);
263
275
/* end fork_lifecycle */
277
278/* ================================================================== */
283/* ================================================================== */
284
295
303
313void parse_fork_complete(ParseFork *fork, void *result,
314 void (*free_fn)(void *));
315
322
329
/* end fork_access */
331
332/* ================================================================== */
337/* ================================================================== */
338
344typedef struct ParseForkSet {
346 uint32_t count;
347 uint32_t capacity;
348 uint32_t max_forks;
350
360
367
379
389
400
410
/* end fork_set */
412
413/* ================================================================== */
418/* ================================================================== */
419
438#define PARSER_FORK_LAYOUT_PARAMS(ParserType, StackEntryType) \
439 sizeof(ParserType), \
440 sizeof(StackEntryType), \
441 offsetof(ParserType, yystk0), \
442 (uint32_t)(sizeof(((ParserType*)0)->yystk0) \
443 / sizeof(StackEntryType)), \
444 offsetof(ParserType, yystack), \
445 offsetof(ParserType, yytos), \
446 offsetof(ParserType, yystackEnd)
447
/* end fork_macro */
449
450#ifdef __cplusplus
451}
452#endif
453
454#endif /* PARSER_FORK_H */
bool clone_parser_state(const void *parser, size_t parser_size, size_t stack_entry_size, size_t inline_stack_offset, uint32_t inline_stack_count, size_t stack_field_offset, size_t tos_field_offset, size_t stack_end_offset, ClonedParserState *out)
Clone the parser state from an opaque parser handle.
void cloned_parser_state_destroy(ClonedParserState *cloned)
Free a cloned parser state.
struct ParserSnapshot * parse_fork_get_snapshot(const ParseFork *fork)
Get the snapshot associated with a fork.
void parse_fork_fail(ParseFork *fork)
Mark a fork as failed.
void parse_fork_abandon(ParseFork *fork)
Mark a fork as abandoned (pruned).
void parse_fork_complete(ParseFork *fork, void *result, void(*free_fn)(void *))
Mark a fork as completed with the given semantic result.
void * parse_fork_get_parser(ParseFork *fork)
Get a mutable pointer to the cloned yyParser inside a fork.
uint64_t parser_fork_next_id(void)
Return a globally unique fork ID.
ParseFork * fork_parser(const void *parser, size_t parser_size, size_t stack_entry_size, size_t inline_stack_offset, uint32_t inline_stack_count, size_t stack_field_offset, size_t tos_field_offset, size_t stack_end_offset, struct ParserSnapshot *snapshot, int priority)
Create a new fork from a base parser state.
void free_parse_fork(ParseFork *fork)
Destroy a fork and release all resources.
bool parse_fork_set_add(ParseForkSet *set, ParseFork *fork)
Add a fork to the set.
uint32_t parse_fork_set_active_count(const ParseForkSet *set)
Return the number of forks still active.
void parse_fork_set_destroy(ParseForkSet *set)
Destroy a fork set and all forks it contains.
ParseForkSet * parse_fork_set_create(uint32_t max_forks)
Create a fork set with the given maximum fork count.
ParseFork * parse_fork_set_best(const ParseForkSet *set)
Find the best completed fork.
uint32_t parse_fork_set_prune(ParseForkSet *set)
Remove and destroy all failed or abandoned forks.
ParseForkStatus
Status of a forked parse attempt.
Definition parser_fork.h:59
@ FORK_RUNNING
Fork is actively consuming tokens.
Definition parser_fork.h:61
@ FORK_FAILED
Fork encountered an unrecoverable error.
Definition parser_fork.h:63
@ FORK_ABANDONED
Fork was pruned (lower priority or timeout)
Definition parser_fork.h:64
@ FORK_COMPLETED
Fork reached accept state.
Definition parser_fork.h:62
@ FORK_PENDING
Fork created, not yet started/completed.
Definition parser_fork.h:60
Deep copy of a grammar-specific parser state.
Definition parser_fork.h:83
size_t state_size
sizeof(yyParser) for this grammar
Definition parser_fork.h:85
size_t stack_size
Number of bytes in the cloned stack.
Definition parser_fork.h:88
uint32_t stack_capacity
Total entry slots in the cloned stack.
Definition parser_fork.h:90
void * state_data
Deep copy of the yyParser struct (malloc'd)
Definition parser_fork.h:84
void * stack_data
Separately allocated stack (if stack was on heap)
Definition parser_fork.h:87
bool stack_is_inline
True if stack lives inside state_data (yystk0)
Definition parser_fork.h:92
uint32_t stack_depth
Number of entries currently on the stack.
Definition parser_fork.h:89
A set of active forks being evaluated in parallel.
uint32_t capacity
Allocated slots.
uint32_t count
Number of forks in the set.
uint32_t max_forks
Upper bound (0 = unlimited)
ParseFork ** forks
Dynamic array of fork pointers.
A forked parser instance.
void(* free_result)(void *)
Optional destructor for semantic_result.
struct ParserSnapshot * snapshot
Grammar snapshot (ref acquired)
uint32_t tokens_consumed
Number of tokens fed to this fork.
uint64_t fork_id
Unique identifier for tracing/debugging.
ClonedParserState cloned_state
Deep copy of parser state.
void * semantic_result
Result produced by semantic actions.
ParseForkStatus status
Current status of this fork.
int priority
Fork priority.
uint32_t error_count
Cumulative error count.
Opaque snapshot handle.
Definition snapshot.h:117