LMCAS
Lamina Computer Algebra System
Toggle main menu visibility
载入中...
搜索中...
未找到
assumption_parse_properties.cpp
浏览该文件的文档.
1
#include "
internal/assumption_parser.hpp
"
2
3
namespace
LMCAS::assumption_detail
{
4
5
void
AssumptionParser::parse_domain
(
6
std::istringstream& ls,
const
std::string& keyword) {
7
8
std::string
sym
, dom_str;
9
if
(!(ls >>
sym
>> dom_str)) {
10
throw
std::invalid_argument(
11
"Line "
+ std::to_string(
line_num
) +
": DOMAIN requires symbol and domain"
);
12
}
13
require_line_end
(ls,
line_num
, keyword);
14
Domain
dom =
assumption_detail::parse_domain
(dom_str,
line_num
);
15
require_deserialization_update
(
16
ctx
.current_properties().declare_domain_checked(
sym
, dom),
line_num
, keyword);
17
}
18
19
void
AssumptionParser::parse_sign
(
20
std::istringstream& ls,
const
std::string& keyword) {
21
22
std::string
sym
, sign_str;
23
if
(!(ls >>
sym
>> sign_str)) {
24
throw
std::invalid_argument(
25
"Line "
+ std::to_string(
line_num
) +
": SIGN requires symbol and sign"
);
26
}
27
require_line_end
(ls,
line_num
, keyword);
28
Sign
s =
assumption_detail::parse_sign
(sign_str,
line_num
);
29
require_deserialization_update
(
30
ctx
.current_properties().declare_sign_checked(
sym
, s),
line_num
, keyword);
31
}
32
33
void
AssumptionParser::parse_parity
(
34
std::istringstream& ls,
const
std::string& keyword) {
35
36
std::string
sym
, par_str;
37
if
(!(ls >>
sym
>> par_str)) {
38
throw
std::invalid_argument(
39
"Line "
+ std::to_string(
line_num
) +
": PARITY requires symbol and parity"
);
40
}
41
require_line_end
(ls,
line_num
, keyword);
42
Parity
p =
assumption_detail::parse_parity
(par_str,
line_num
);
43
require_deserialization_update
(
44
ctx
.current_properties().declare_parity_checked(
sym
, p),
line_num
, keyword);
45
}
46
47
void
AssumptionParser::parse_bounded
(
48
std::istringstream& ls,
const
std::string& keyword) {
49
std::string symbol;
50
std::string boundedness_text;
51
if
(!(ls >> symbol >> boundedness_text)) {
52
throw
std::invalid_argument(
53
"Line "
+ std::to_string(
line_num
) +
54
": BOUNDED requires symbol and boundedness"
);
55
}
56
const
Boundedness
bounded =
57
parse_boundedness
(boundedness_text,
line_num
);
58
59
std::string payload;
60
std::getline(ls, payload);
61
const
auto
bounds_text =
trim_ascii_whitespace
(payload);
62
std::optional<Interval> bounds;
63
if
(!bounds_text.empty()) {
64
if
(bounded !=
Boundedness::Bounded
) {
65
throw
std::invalid_argument(
66
"Line "
+ std::to_string(
line_num
) +
67
": only Bounded declarations may carry an interval"
);
68
}
69
bounds =
parse_interval
(
70
std::string(bounds_text),
line_num
,
computation
);
71
}
72
require_deserialization_update
(
73
ctx
.current_properties().declare_bounded_checked(
74
symbol, bounded, std::move(bounds),
computation
),
75
line_num
, keyword);
76
}
77
78
void
AssumptionParser::parse_transcendental
(
79
std::istringstream& ls,
const
std::string& keyword) {
80
81
std::string
sym
;
82
if
(!(ls >>
sym
)) {
83
throw
std::invalid_argument(
84
"Line "
+ std::to_string(
line_num
) +
": TRANSCENDENTAL requires symbol"
);
85
}
86
require_line_end
(ls,
line_num
, keyword);
87
require_deserialization_update
(
88
ctx
.current_properties().declare_transcendental_checked(
sym
),
line_num
, keyword);
89
}
90
91
void
AssumptionParser::parse_finiteness
(
92
std::istringstream& ls,
const
std::string& keyword) {
93
94
std::string
sym
, fin_str;
95
if
(!(ls >>
sym
>> fin_str)) {
96
throw
std::invalid_argument(
97
"Line "
+ std::to_string(
line_num
) +
": FINITENESS requires symbol and value"
);
98
}
99
Finiteness
f =
assumption_detail::parse_finiteness
(fin_str,
line_num
);
100
require_line_end
(ls,
line_num
, keyword);
101
require_deserialization_update
(
102
ctx
.current_properties().declare_finiteness_checked(
sym
, f),
line_num
, keyword);
103
}
104
105
void
AssumptionParser::parse_definiteness
(
106
std::istringstream& ls,
const
std::string& keyword) {
107
108
std::string
sym
, def_str;
109
if
(!(ls >>
sym
>> def_str)) {
110
throw
std::invalid_argument(
111
"Line "
+ std::to_string(
line_num
) +
": DEFINITENESS requires symbol and value"
);
112
}
113
Definiteness
d =
assumption_detail::parse_definiteness
(def_str,
line_num
);
114
require_line_end
(ls,
line_num
, keyword);
115
require_deserialization_update
(
116
ctx
.current_properties().declare_definiteness_checked(
sym
, d),
line_num
, keyword);
117
}
118
119
120
}
assumption_parser.hpp
LMCAS::assumption_detail::AssumptionParser::line_num
int line_num
定义
assumption_parser.hpp:42
LMCAS::assumption_detail::AssumptionParser::parse_bounded
void parse_bounded(std::istringstream &ls, const std::string &keyword)
定义
assumption_parse_properties.cpp:47
LMCAS::assumption_detail::AssumptionParser::parse_transcendental
void parse_transcendental(std::istringstream &ls, const std::string &keyword)
定义
assumption_parse_properties.cpp:78
LMCAS::assumption_detail::AssumptionParser::parse_parity
void parse_parity(std::istringstream &ls, const std::string &keyword)
定义
assumption_parse_properties.cpp:33
LMCAS::assumption_detail::AssumptionParser::computation
ComputationContext & computation
定义
assumption_parser.hpp:40
LMCAS::assumption_detail::AssumptionParser::parse_domain
void parse_domain(std::istringstream &ls, const std::string &keyword)
定义
assumption_parse_properties.cpp:5
LMCAS::assumption_detail::AssumptionParser::ctx
AssumptionContext ctx
定义
assumption_parser.hpp:41
LMCAS::assumption_detail::AssumptionParser::parse_sign
void parse_sign(std::istringstream &ls, const std::string &keyword)
定义
assumption_parse_properties.cpp:19
LMCAS::assumption_detail::AssumptionParser::parse_finiteness
void parse_finiteness(std::istringstream &ls, const std::string &keyword)
定义
assumption_parse_properties.cpp:91
LMCAS::assumption_detail::AssumptionParser::parse_definiteness
void parse_definiteness(std::istringstream &ls, const std::string &keyword)
定义
assumption_parse_properties.cpp:105
LMCAS::assumption_detail
定义
assumption_deserialization.cpp:3
LMCAS::assumption_detail::parse_domain
Domain parse_domain(const std::string &s, int line_num)
定义
assumption_parse_values.cpp:19
LMCAS::assumption_detail::require_line_end
void require_line_end(std::istringstream &input, int line_num, const std::string &keyword)
定义
assumption_parse_atoms.cpp:64
LMCAS::assumption_detail::parse_definiteness
Definiteness parse_definiteness(const std::string &s, int line_num)
定义
assumption_parse_values.cpp:68
LMCAS::assumption_detail::parse_sign
Sign parse_sign(const std::string &s, int line_num)
定义
assumption_parse_values.cpp:32
LMCAS::assumption_detail::trim_ascii_whitespace
std::string_view trim_ascii_whitespace(std::string_view text) noexcept
定义
assumption_parse_atoms.cpp:10
LMCAS::assumption_detail::require_deserialization_update
void require_deserialization_update(const Result< void > &result, int line, const std::string &keyword)
定义
assumption_parse_atoms.cpp:51
LMCAS::assumption_detail::parse_boundedness
Boundedness parse_boundedness(const std::string &s, int line_num)
定义
assumption_parse_values.cpp:52
LMCAS::assumption_detail::parse_interval
Interval parse_interval(const std::string &text, int line_num, ComputationContext &context)
定义
assumption_parse_atoms.cpp:266
LMCAS::assumption_detail::parse_finiteness
Finiteness parse_finiteness(const std::string &s, int line_num)
定义
assumption_parse_values.cpp:60
LMCAS::assumption_detail::parse_parity
Parity parse_parity(const std::string &s, int line_num)
定义
assumption_parse_values.cpp:44
LMCAS::Domain
Domain
Mathematical domain hierarchy (least specific → most specific). Complex ⊃ Real ⊃ Algebraic ⊃ Rational...
定义
assumption.hpp:15
LMCAS::Boundedness
Boundedness
Boundedness classification for symbols.
定义
assumption.hpp:43
LMCAS::Boundedness::Bounded
@ Bounded
Symbol has finite bounds
定义
assumption.hpp:44
LMCAS::Definiteness
Definiteness
Matrix definiteness classification.
定义
assumption.hpp:66
LMCAS::sym
ExprResult sym(const std::string &name)
定义
expr_values.cpp:30
LMCAS::Finiteness
Finiteness
Finiteness classification for limits and sequences.
定义
assumption.hpp:76
LMCAS::Parity
Parity
Integer parity classification.
定义
assumption.hpp:36
LMCAS::Sign
Sign
Sign classification for symbols and expressions.
定义
assumption.hpp:26
src
assumption_parse_properties.cpp
生成于
, 为 LMCAS使用
1.18.0