/* Runtime for C-engine (RTC). Declarations. (Engine: Lexer gating) * - - -- --- ----- -------- ------------- --------------------- * (c) 2017-2018 Andreas Kupries */ #ifndef MARPATCL_RTC_GATE_H #define MARPATCL_RTC_GATE_H /* * - - -- --- ----- -------- ------------- --------------------- * Requirements */ #include #include #include /* * - - -- --- ----- -------- ------------- --------------------- * Structures */ typedef struct marpatcl_rtc_gate { int lastchar; /* last character entered into the gate */ int lastloc; /* Location of the `lastchar` (byte offset) */ int lastcloc; /* Same, as char offset */ int flushed; /* Flushing state */ marpatcl_rtc_stack_p history; /* History of the current match attempt */ marpatcl_rtc_stack_p pending; /* Scratch stack for history replay */ marpatcl_rtc_byteset acceptable; /* Set of acceptable byte (symbols) */ } marpatcl_rtc_gate; /* * - - -- --- ----- -------- ------------- --------------------- * API - lifecycle, accessors, mutators * * init - initialize a gate * free - release gate state * enter - push a single byte of input * eof - signal the end of the input * acceptable - information from lexer about acceptable bytes * redo - reset to and replay the last n bytes entered */ void marpatcl_rtc_gate_init (marpatcl_rtc_p p); void marpatcl_rtc_gate_free (marpatcl_rtc_p p); void marpatcl_rtc_gate_enter (marpatcl_rtc_p p, unsigned char ch); /* location implied */ void marpatcl_rtc_gate_eof (marpatcl_rtc_p p); void marpatcl_rtc_gate_acceptable (marpatcl_rtc_p p); void marpatcl_rtc_gate_redo (marpatcl_rtc_p p, int n); /* TODO: get-context, extend-context */ #endif /* * - - -- --- ----- -------- ------------- --------------------- */ /* * Local Variables: * mode: c * c-basic-offset: 4 * fill-column: 78 * End: */