Lime Parser Generator 0.1.0
Runtime-extensible LALR(1) parser with SIMD tokenization and LLVM JIT
Loading...
Searching...
No Matches
conflict.h
Go to the documentation of this file.
1
28#ifndef CONFLICT_H
29#define CONFLICT_H
30
31#include <stdint.h>
32#include <stdbool.h>
33
34/* Forward declarations to avoid circular includes */
35struct GrammarModification;
37struct ParserSnapshot;
39typedef uint32_t ExtensionID;
40
41/* ------------------------------------------------------------------ */
46/* ------------------------------------------------------------------ */
47
58
75
/* end conflict_types */
77
78/* ------------------------------------------------------------------ */
83/* ------------------------------------------------------------------ */
84
88typedef struct ConflictSet {
90 uint32_t count;
91 uint32_t capacity;
93
102
109
124 ConflictSet *cs,
125 ConflictType type,
126 uint32_t mod_index_a,
127 uint32_t mod_index_b,
128 ExtensionID ext_id_a,
129 ExtensionID ext_id_b,
130 const char *description
131);
132
140
/* end conflict_set */
142
143/* ------------------------------------------------------------------ */
148/* ------------------------------------------------------------------ */
149
168 const struct GrammarModification *mods,
169 uint32_t nmods,
170 ConflictSet *cs
171);
172
187 ConflictSet *cs,
188 const struct GrammarModification *mods,
189 uint32_t nmods,
190 struct ExtensionRegistry *registry
191);
192
/* end conflict_detect */
194
195/* ------------------------------------------------------------------ */
200/* ------------------------------------------------------------------ */
201
210
215typedef struct LimeContext {
217 uint16_t token;
218 int state;
220 const char *grammar_name;
222
238
251
/* end multi_grammar (types) */
253
254/* ------------------------------------------------------------------ */
259/* ------------------------------------------------------------------ */
260
271void conflict_point_init(ConflictPoint *cp, uint16_t token, int state,
272 ConflictLevel level);
273
283
293
/* end conflict_point_api */
295
296/* ------------------------------------------------------------------ */
301/* ------------------------------------------------------------------ */
302
311
318
/* end multi_conflict_result */
320
321/* ------------------------------------------------------------------ */
326/* ------------------------------------------------------------------ */
327
339 struct ExtensionRegistry *reg,
341);
342
356 struct ExtensionRegistry *reg,
357 uint16_t token,
358 int state,
360);
361
375 struct ExtensionRegistry *reg,
376 uint16_t token,
377 int state,
379);
380
394 struct ExtensionRegistry *reg,
395 uint16_t token,
396 int state
397);
398
411 struct ExtensionRegistry *reg,
413);
414
/* end multi_detect_api */
416
417#endif /* CONFLICT_H */
uint32_t ExtensionID
Opaque ID identifying a registered extension.
Definition conflict.h:39
bool detect_conflicts(const struct GrammarModification *mods, uint32_t nmods, ConflictSet *cs)
Scan modifications for conflicts.
uint32_t resolve_conflicts(ConflictSet *cs, const struct GrammarModification *mods, uint32_t nmods, struct ExtensionRegistry *registry)
Attempt to resolve conflicts via extension callbacks.
void conflict_point_init(ConflictPoint *cp, uint16_t token, int state, ConflictLevel level)
Initialize a ConflictPoint.
void conflict_point_destroy(ConflictPoint *cp)
Free resources owned by a ConflictPoint.
bool conflict_point_add_context(ConflictPoint *cp, const LimeContext *ctx)
Add a grammar context to a conflict point.
void conflict_set_destroy(ConflictSet *cs)
Destroy a conflict set and free all owned memory.
uint32_t conflict_set_unresolved_count(const ConflictSet *cs)
Return the number of unresolved conflicts in the set.
ConflictSet * conflict_set_create(void)
Create an empty conflict set.
bool conflict_set_add(ConflictSet *cs, ConflictType type, uint32_t mod_index_a, uint32_t mod_index_b, ExtensionID ext_id_a, ExtensionID ext_id_b, const char *description)
Add a conflict to the set.
ConflictType
Types of conflicts that can occur between grammar extensions.
Definition conflict.h:51
@ CONFLICT_DUPLICATE_RULE
Identical production rule.
Definition conflict.h:53
@ CONFLICT_SHIFT_REDUCE
Shift/reduce in rebuilt automaton.
Definition conflict.h:55
@ CONFLICT_PRECEDENCE_CLASH
Conflicting precedence assignment.
Definition conflict.h:54
@ CONFLICT_REDUCE_REDUCE
Reduce/reduce in rebuilt automaton.
Definition conflict.h:56
@ CONFLICT_TOKEN_COLLISION
Same token name from different extensions.
Definition conflict.h:52
MultiGrammarConflictResult * multi_conflict_result_create(void)
Create an empty result set.
void multi_conflict_result_destroy(MultiGrammarConflictResult *result)
Destroy a result set and free all owned memory.
uint32_t detect_token_conflicts(struct ExtensionRegistry *reg, MultiGrammarConflictResult *result)
Detect token-level conflicts across all loaded extensions.
uint32_t detect_rule_conflicts(struct ExtensionRegistry *reg, uint16_t token, int state, MultiGrammarConflictResult *result)
Detect rule-level conflicts for a given token and state.
ConflictPoint detect_conflict(struct ExtensionRegistry *reg, uint16_t token, int state)
Detect all levels of conflict for a specific token and state.
bool detect_all_multi_grammar_conflicts(struct ExtensionRegistry *reg, MultiGrammarConflictResult *result)
Run a full multi-grammar conflict scan across all loaded extensions.
uint32_t detect_semantic_conflicts(struct ExtensionRegistry *reg, uint16_t token, int state, MultiGrammarConflictResult *result)
Detect semantic-level conflicts for a given token and state.
ConflictLevel
Conflict detection levels for multi-grammar scenarios.
Definition conflict.h:205
@ CONFLICT_LEVEL_SEMANTIC
Semantic action ambiguity.
Definition conflict.h:208
@ CONFLICT_LEVEL_TOKEN
Lexer-level ambiguity.
Definition conflict.h:206
@ CONFLICT_LEVEL_RULE
Parser-level ambiguity.
Definition conflict.h:207
struct ExtensionRegistry ExtensionRegistry
Opaque extension registry handle.
A specific ambiguity where multiple grammars can handle the same token in the same parser state.
Definition conflict.h:227
int ncontexts
Number of entries in contexts[].
Definition conflict.h:233
uint16_t token
The token that triggers the conflict.
Definition conflict.h:228
int state
The parser state (-1 if token-level)
Definition conflict.h:229
ConflictLevel level
Which level of ambiguity.
Definition conflict.h:230
LimeContext * contexts
Array of valid interpretations.
Definition conflict.h:232
char * description
Human-readable summary (owned)
Definition conflict.h:236
int capacity
Allocated slots in contexts[].
Definition conflict.h:234
Collection of detected conflicts.
Definition conflict.h:88
uint32_t capacity
Allocated slots.
Definition conflict.h:91
Conflict * conflicts
Dynamic array of conflicts.
Definition conflict.h:89
uint32_t count
Number of conflicts in the set.
Definition conflict.h:90
Description of a single conflict between modifications.
Definition conflict.h:62
char * description
Human-readable description (malloc'd, owned by ConflictSet)
Definition conflict.h:71
ConflictType type
What kind of conflict.
Definition conflict.h:63
ExtensionID ext_id_a
Extension owning modification A.
Definition conflict.h:68
uint32_t mod_index_a
Index of first conflicting modification.
Definition conflict.h:65
ExtensionID ext_id_b
Extension owning modification B.
Definition conflict.h:69
bool resolved
Whether this conflict was resolved.
Definition conflict.h:73
uint32_t mod_index_b
Index of second conflicting modification.
Definition conflict.h:66
A grammar context – one possible interpretation of a token within a particular grammar/extension.
Definition conflict.h:215
ExtensionID ext_id
Extension providing this context.
Definition conflict.h:216
const char * grammar_name
Human-readable grammar name (not owned)
Definition conflict.h:220
uint16_t token
Token code in this grammar's space.
Definition conflict.h:217
int state
Parser state where this applies.
Definition conflict.h:218
int priority
Higher = preferred (from extension)
Definition conflict.h:219
Result of a multi-grammar conflict scan.
Definition conflict.h:242
uint32_t npoints
Number of conflict points.
Definition conflict.h:244
uint32_t semantic_conflicts
Count of semantic-level conflicts.
Definition conflict.h:249
uint32_t capacity
Allocated slots in points[].
Definition conflict.h:245
uint32_t rule_conflicts
Count of rule-level conflicts.
Definition conflict.h:248
uint32_t token_conflicts
Count of token-level conflicts.
Definition conflict.h:247
ConflictPoint * points
Array of detected conflict points.
Definition conflict.h:243
Opaque snapshot handle.
Definition snapshot.h:117