35struct GrammarModification;
126 uint32_t mod_index_a,
127 uint32_t mod_index_b,
130 const char *description
168 const struct GrammarModification *mods,
188 const struct GrammarModification *mods,
uint32_t ExtensionID
Opaque ID identifying a registered extension.
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.
@ CONFLICT_DUPLICATE_RULE
Identical production rule.
@ CONFLICT_SHIFT_REDUCE
Shift/reduce in rebuilt automaton.
@ CONFLICT_PRECEDENCE_CLASH
Conflicting precedence assignment.
@ CONFLICT_REDUCE_REDUCE
Reduce/reduce in rebuilt automaton.
@ CONFLICT_TOKEN_COLLISION
Same token name from different extensions.
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.
@ CONFLICT_LEVEL_SEMANTIC
Semantic action ambiguity.
@ CONFLICT_LEVEL_TOKEN
Lexer-level ambiguity.
@ CONFLICT_LEVEL_RULE
Parser-level ambiguity.
struct ExtensionRegistry ExtensionRegistry
Opaque extension registry handle.
A specific ambiguity where multiple grammars can handle the same token in the same parser state.
int ncontexts
Number of entries in contexts[].
uint16_t token
The token that triggers the conflict.
int state
The parser state (-1 if token-level)
ConflictLevel level
Which level of ambiguity.
LimeContext * contexts
Array of valid interpretations.
char * description
Human-readable summary (owned)
int capacity
Allocated slots in contexts[].
Collection of detected conflicts.
uint32_t capacity
Allocated slots.
Conflict * conflicts
Dynamic array of conflicts.
uint32_t count
Number of conflicts in the set.
Description of a single conflict between modifications.
char * description
Human-readable description (malloc'd, owned by ConflictSet)
ConflictType type
What kind of conflict.
ExtensionID ext_id_a
Extension owning modification A.
uint32_t mod_index_a
Index of first conflicting modification.
ExtensionID ext_id_b
Extension owning modification B.
bool resolved
Whether this conflict was resolved.
uint32_t mod_index_b
Index of second conflicting modification.
A grammar context – one possible interpretation of a token within a particular grammar/extension.
ExtensionID ext_id
Extension providing this context.
const char * grammar_name
Human-readable grammar name (not owned)
uint16_t token
Token code in this grammar's space.
int state
Parser state where this applies.
int priority
Higher = preferred (from extension)
Result of a multi-grammar conflict scan.
uint32_t npoints
Number of conflict points.
uint32_t semantic_conflicts
Count of semantic-level conflicts.
uint32_t capacity
Allocated slots in points[].
uint32_t rule_conflicts
Count of rule-level conflicts.
uint32_t token_conflicts
Count of token-level conflicts.
ConflictPoint * points
Array of detected conflict points.