What I call a reader, seems to be called a port. Then it's pure unadulterated C. I thought of reading files to a wide character array for unbounded access, but that makes a REPL impossible. Maybe I'll just read stuff line by line, that could work.
Yeah, the latter should work. I'll mark the start of a lexing operation, and flush up to a certain point in case of success, or rewind otherwise.
Basically, the C code should look like:
token_t* read_token(reader_t* rdr) { if (tok= alt_0(rdr)) return tok; if (tok = alt_1(rdr)) return tok; return null; }
I.e., lexing tries to recognize decreasingly complex alternatives written like this:
token_t* alt_n(reader_t* rdr) { token_t* tok; // start scanning reader_mark(rdr); // try an alternative if (reader_look(rdr) == L'c') { ... // flush all recognized input reader_flush(rdr); // return the recognized token return tok; } else if ( ... ) { ... } else { return null; } }
Could work. Bit of a problem on how to handle EOL exactly, REPL demands that the next line is read lazily, but that's about it.
No comments:
Post a Comment