🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
Scanner.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstUtil/StringView.hpp"
25#include <cstdio>
26#include <string>
27#include <fstream>
28
29AST_NAMESPACE_BEGIN
30
34class AST_SCRIPT_API Scanner
35{
36public:
37 virtual ~Scanner() = default;
38
41 virtual char consume() = 0;
42
45 virtual char peek() const = 0;
46
49 virtual char peekNext() const = 0;
50
53 virtual bool atEnd() const = 0;
54
56 virtual void skip() = 0;
57
58
59};
60
63class AST_SCRIPT_API StringScanner : public Scanner
64{
65public:
66 StringScanner(const std::string& str)
67 : str_(str), current_(0)
68 {}
69
71 : str_(str), current_(0)
72 {}
73
74 char consume() override;
75 char peek() const override;
76 char peekNext() const override;
77 bool atEnd() const override;
78 void skip() override;
79
80
81private:
82 std::string str_;
83 size_t current_;
84};
85
88class AST_SCRIPT_API FileScanner : public Scanner
89{
90public:
91 FileScanner(FILE* file)
92 : file_(file), current_char_(0), next_char_(0), at_end_(false)
93 {
94 // 预读取两个字符
95 current_char_ = std::fgetc(file_);
96 next_char_ = std::fgetc(file_);
97 at_end_ = (current_char_ == EOF);
98 }
99
100 ~FileScanner() override;
101
102 char consume() override;
103 char peek() const override;
104 char peekNext() const override;
105 bool atEnd() const override;
106 void skip() override;
107
108
109private:
110 FILE* file_;
111 int current_char_;
112 int next_char_;
113 bool at_end_;
114};
115
118class AST_SCRIPT_API StreamScanner : public Scanner
119{
120public:
121 StreamScanner(std::fstream& stream)
122 : stream_(stream), current_char_(0), next_char_(0), at_end_(false)
123 {
124 // 预读取两个字符
125 current_char_ = stream_.get();
126 next_char_ = stream_.get();
127 at_end_ = (current_char_ == EOF);
128 }
129
130 char consume() override;
131 char peek() const override;
132 char peekNext() const override;
133 bool atEnd() const override;
134 void skip() override;
135
136private:
137 std::fstream& stream_;
138 int current_char_;
139 int next_char_;
140 bool at_end_;
141};
142
143AST_NAMESPACE_END
文件扫描器
定义 Scanner.hpp:89
扫描器抽象基类
定义 Scanner.hpp:35
virtual char peek() const =0
查看当前字符(不移动指针)
virtual char peekNext() const =0
查看下一个字符(不移动指针)
virtual char consume()=0
读取并消耗当前字符
virtual bool atEnd() const =0
检查是否到达结尾
virtual void skip()=0
跳过当前字符
流扫描器
定义 Scanner.hpp:119
字符串扫描器
定义 Scanner.hpp:64