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
199bool clone_parser_state(const void *parser, size_t parser_size, size_t stack_entry_size,
200 size_t inline_stack_offset, uint32_t inline_stack_count,
201 size_t stack_field_offset, size_t tos_field_offset, size_t stack_end_offset,
202 ClonedParserState *out);
203
212
/* end clone_api */
214
215/* ================================================================== */
220/* ================================================================== */
221
244ParseFork *fork_parser(const void *parser, size_t parser_size, size_t stack_entry_size,
245 size_t inline_stack_offset, uint32_t inline_stack_count,
246 size_t stack_field_offset, size_t tos_field_offset, size_t stack_end_offset,
247 struct ParserSnapshot *snapshot, int priority);
248
260
/* end fork_lifecycle */
262
263/* ================================================================== */
268/* ================================================================== */
269
280
288
298void parse_fork_complete(ParseFork *fork, void *result, void (*free_fn)(void *));
299
306
313
/* end fork_access */
315
316/* ================================================================== */
321/* ================================================================== */
322
328typedef struct ParseForkSet {
330 uint32_t count;
331 uint32_t capacity;
332 uint32_t max_forks;
334
344
351
363
373
384
394
/* end fork_set */
396
397/* ================================================================== */
402/* ================================================================== */
403
422#define PARSER_FORK_LAYOUT_PARAMS(ParserType, StackEntryType) \
423 sizeof(ParserType), sizeof(StackEntryType), offsetof(ParserType, yystk0), \
424 (uint32_t)(sizeof(((ParserType *)0)->yystk0) / sizeof(StackEntryType)), \
425 offsetof(ParserType, yystack), offsetof(ParserType, yytos), \
426 offsetof(ParserType, yystackEnd)
427
/* end fork_macro */
429
430#ifdef __cplusplus
431}
432#endif
433
434#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:177