LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
assumption_parse_properties.cpp
浏览该文件的文档.
2
4
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);
16 ctx.current_properties().declare_domain_checked(sym, dom), line_num, keyword);
17}
18
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);
30 ctx.current_properties().declare_sign_checked(sym, s), line_num, keyword);
31}
32
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);
44 ctx.current_properties().declare_parity_checked(sym, p), line_num, keyword);
45}
46
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 }
73 ctx.current_properties().declare_bounded_checked(
74 symbol, bounded, std::move(bounds), computation),
75 line_num, keyword);
76}
77
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);
88 ctx.current_properties().declare_transcendental_checked(sym), line_num, keyword);
89}
90
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 }
100 require_line_end(ls, line_num, keyword);
102 ctx.current_properties().declare_finiteness_checked(sym, f), line_num, keyword);
103}
104
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 }
114 require_line_end(ls, line_num, keyword);
116 ctx.current_properties().declare_definiteness_checked(sym, d), line_num, keyword);
117}
118
119
120}
void parse_bounded(std::istringstream &ls, const std::string &keyword)
void parse_transcendental(std::istringstream &ls, const std::string &keyword)
void parse_parity(std::istringstream &ls, const std::string &keyword)
void parse_domain(std::istringstream &ls, const std::string &keyword)
void parse_sign(std::istringstream &ls, const std::string &keyword)
void parse_finiteness(std::istringstream &ls, const std::string &keyword)
void parse_definiteness(std::istringstream &ls, const std::string &keyword)
Domain parse_domain(const std::string &s, int line_num)
void require_line_end(std::istringstream &input, int line_num, const std::string &keyword)
Definiteness parse_definiteness(const std::string &s, int line_num)
Sign parse_sign(const std::string &s, int line_num)
std::string_view trim_ascii_whitespace(std::string_view text) noexcept
void require_deserialization_update(const Result< void > &result, int line, const std::string &keyword)
Boundedness parse_boundedness(const std::string &s, int line_num)
Interval parse_interval(const std::string &text, int line_num, ComputationContext &context)
Finiteness parse_finiteness(const std::string &s, int line_num)
Parity parse_parity(const std::string &s, int line_num)
Domain
Mathematical domain hierarchy (least specific → most specific). Complex ⊃ Real ⊃ Algebraic ⊃ Rational...
Boundedness
Boundedness classification for symbols.
@ Bounded
Symbol has finite bounds
Definiteness
Matrix definiteness classification.
ExprResult sym(const std::string &name)
Finiteness
Finiteness classification for limits and sequences.
Parity
Integer parity classification.
Sign
Sign classification for symbols and expressions.