🛰️航天仿真算法库 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
29
AST_NAMESPACE_BEGIN
30
34
class
AST_SCRIPT_API
Scanner
35
{
36
public
:
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
63
class
AST_SCRIPT_API
StringScanner
:
public
Scanner
64
{
65
public
:
66
StringScanner
(
const
std::string& str)
67
: str_(str), current_(0)
68
{}
69
70
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
81
private
:
82
std::string str_;
83
size_t
current_;
84
};
85
88
class
AST_SCRIPT_API
FileScanner
:
public
Scanner
89
{
90
public
:
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
109
private
:
110
FILE* file_;
111
int
current_char_;
112
int
next_char_;
113
bool
at_end_;
114
};
115
118
class
AST_SCRIPT_API
StreamScanner
:
public
Scanner
119
{
120
public
:
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
136
private
:
137
std::fstream& stream_;
138
int
current_char_;
139
int
next_char_;
140
bool
at_end_;
141
};
142
143
AST_NAMESPACE_END
ast::FileScanner
文件扫描器
定义
Scanner.hpp:89
ast::Scanner
扫描器抽象基类
定义
Scanner.hpp:35
ast::Scanner::peek
virtual char peek() const =0
查看当前字符(不移动指针)
ast::Scanner::peekNext
virtual char peekNext() const =0
查看下一个字符(不移动指针)
ast::Scanner::consume
virtual char consume()=0
读取并消耗当前字符
ast::Scanner::atEnd
virtual bool atEnd() const =0
检查是否到达结尾
ast::Scanner::skip
virtual void skip()=0
跳过当前字符
ast::StreamScanner
流扫描器
定义
Scanner.hpp:119
ast::StringScanner
字符串扫描器
定义
Scanner.hpp:64
ast::StringViewBasic< char >
src
AstScript
Parser
Scanner.hpp
制作者
1.12.0