Lime Parser Generator 0.1.0
Runtime-extensible LALR(1) parser with SIMD tokenization and LLVM JIT
Loading...
Searching...
No Matches
Conflict Detection

Scan modifications for conflicts. More...

Functions

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.
 

Detailed Description

Scan modifications for conflicts.

Function Documentation

◆ detect_conflicts()

bool detect_conflicts ( const struct GrammarModification *  mods,
uint32_t  nmods,
ConflictSet cs 
)

#include <include/conflict.h>

Scan modifications for conflicts.

Checks for:

  • Token name collisions between different extensions
  • Duplicate production rules
  • Conflicting precedence assignments

Automaton-level conflicts (shift/reduce, reduce/reduce) are detected later during rebuild_automaton() and added to the conflict set then.

Parameters
modsArray of grammar modifications to check.
nmodsNumber of modifications.
csConflict set to populate (must be pre-created).
Return values
trueAt least one conflict was detected.
falseNo conflicts found.

◆ resolve_conflicts()

uint32_t resolve_conflicts ( ConflictSet cs,
const struct GrammarModification *  mods,
uint32_t  nmods,
struct ExtensionRegistry registry 
)

#include <include/conflict.h>

Attempt to resolve conflicts via extension callbacks.

Calls each extension's on_conflict callback for the conflicts that involve its modifications. Marks conflicts as resolved when a callback provides a resolution.

Parameters
csConflict set with detected conflicts.
modsThe modifications array (for building ConflictInfo).
nmodsNumber of modifications.
registryExtension registry (for looking up callbacks).
Returns
Number of conflicts that remain unresolved.