🛰️航天仿真算法库 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 explicit StringScanner(const std::string& str)
67 : str_(str), current_(0)
68 {}
69
70 explicit StringScanner(StringView str)
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 explicit 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(const FileScanner&) = delete;
101 FileScanner& operator=(const FileScanner&) = delete;
102
103 ~FileScanner() override;
104
105 char consume() override;
106 char peek() const override;
107 char peekNext() const override;
108 bool atEnd() const override;
109 void skip() override;
110
111
112private:
113 FILE* file_;
114 int current_char_;
115 int next_char_;
116 bool at_end_;
117};
118
121class AST_SCRIPT_API StreamScanner : public Scanner
122{
123public:
124 explicit StreamScanner(std::fstream& stream)
125 : stream_(stream), current_char_(0), next_char_(0), at_end_(false)
126 {
127 // 预读取两个字符
128 current_char_ = stream_.get();
129 next_char_ = stream_.get();
130 at_end_ = (current_char_ == EOF);
131 }
132
133 char consume() override;
134 char peek() const override;
135 char peekNext() const override;
136 bool atEnd() const override;
137 void skip() override;
138
139private:
140 std::fstream& stream_;
141 int current_char_;
142 int next_char_;
143 bool at_end_;
144};
145
146AST_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:122
字符串扫描器
定义 Scanner.hpp:64