🛰️航天仿真算法库 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
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
81
private
:
82
std::string str_;
83
size_t
current_;
84
};
85
88
class
AST_SCRIPT_API
FileScanner
:
public
Scanner
89
{
90
public
:
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
112
private
:
113
FILE* file_;
114
int
current_char_;
115
int
next_char_;
116
bool
at_end_;
117
};
118
121
class
AST_SCRIPT_API
StreamScanner
:
public
Scanner
122
{
123
public
:
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
139
private
:
140
std::fstream& stream_;
141
int
current_char_;
142
int
next_char_;
143
bool
at_end_;
144
};
145
146
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:122
ast::StringScanner
字符串扫描器
定义
Scanner.hpp:64
ast::StringViewBasic< char >
src
AstScript
Parser
Scanner.hpp
制作者
1.12.0