xo-reader: + reader.hpp
This commit is contained in:
parent
179215e651
commit
99c1ebc7fb
1 changed files with 56 additions and 0 deletions
56
include/xo/parser/reader.hpp
Normal file
56
include/xo/parser/reader.hpp
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
/* file reader.hpp
|
||||
*
|
||||
* author: Roland Conybeare, Aug 2024
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "parser.hpp"
|
||||
#include "xo/tokenizer/tokenizer.hpp"
|
||||
|
||||
namespace xo {
|
||||
namespace scm {
|
||||
/**
|
||||
* Use:
|
||||
* @code
|
||||
* reader rdr;
|
||||
*
|
||||
* bool eof = false;
|
||||
* while (!eof) {
|
||||
* auto input = ins.read_some();
|
||||
* // eof: true if no more input will be forthcoming from this stream
|
||||
* eof = ins.eof();
|
||||
*
|
||||
* for (auto rem = input; ; !rem.empty()) {
|
||||
* // res: (parsed-expr, used)
|
||||
* auto res = rdr.read_expr(rem, eof);
|
||||
*
|
||||
* if (res.first) {
|
||||
* // do something with res.first (parsed expr)
|
||||
* ...
|
||||
* }
|
||||
*
|
||||
* rem = rem.suffix_after(res.second);
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* // expect !rdr.has_prefix()
|
||||
*
|
||||
* @endcode
|
||||
**/
|
||||
class reader {
|
||||
public:
|
||||
reader() = default;
|
||||
|
||||
private:
|
||||
/** tokenizer: text -> tokens **/
|
||||
tokenizer tokenizer_;
|
||||
|
||||
/** parser: tokens -> expressions (TODO: reanme ->reader) **/
|
||||
parser parser_;
|
||||
};
|
||||
} /*namespace scm*/
|
||||
} /*namespace xo*/
|
||||
|
||||
|
||||
/* end Repl.hpp */
|
||||
Loading…
Add table
Add a link
Reference in a new issue