12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #include <cstdio>
- #include "parser.h"
- const char *str = "Hello_var\n"
- "10 20.32 100var\n"
- "|10 20.32|int->num\n"
- "|10||20.32|int->num\n"
- "{if true 10}\n"
- "of(HelloWorld)\n"
- "!(!) @(@) #(#)\n"
- "() [] {}\n"
- "Hello ;comment\n"
- "Hello ;;comment\n"
- "commment2;=\n"
- "var-200 ;; comment\n"
- ";; comment\n"
- ";= comment\n"
- ";= var-300\n";
- class ReaderString : public aFuncore::Reader {
- std::string str;
- size_t index;
- size_t len;
- public:
- ReaderString(std::string str_, const aFuntool::FilePath &path_) : Reader{path_, 0}, str{std::move(str_)} {
- index = 0;
- len = str.size();
- }
- size_t readText(char *dest, size_t read_len, ReadMode &mode) override {
- if (index == len) // 读取到末尾
- return 0;
- if (index + read_len > len) { // 超出长度范围
- read_len = len - index;
- mode = read_mode_finished;
- }
- memcpy(dest, str.c_str() + index, read_len);
- index += read_len;
- return read_len;
- }
- };
- int main() {
- auto reader = ReaderString(str, "str");
- auto parser = aFuncore::Parser(reader);
- aFuncore::Parser::TokenType tt;
- std::string text;
- do {
- tt = parser.getTokenFromLexical(text);
- printf("tt = %d, text = %s\n", tt, text.c_str());
- } while (tt != aFuncore::Parser::TK_EOF && tt != aFuncore::Parser::TK_ERROR);
- return 0;
- }
|