diff --git a/include/xo/parser/reader.hpp b/include/xo/parser/reader.hpp new file mode 100644 index 00000000..39dcd6b8 --- /dev/null +++ b/include/xo/parser/reader.hpp @@ -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 */