LMCAS
Lamina Computer Algebra System
Toggle main menu visibility
载入中...
搜索中...
未找到
print_visitor.hpp
浏览该文件的文档.
1
/**
2
* @file print_visitor.hpp
3
* @brief 打印访问器,将 AST 转换为可读字符串。
4
*/
5
#pragma once
6
#include <sstream>
7
#include <string>
8
#include "
lmcas_export.hpp
"
9
#include "
internal/symbolic_ast.hpp
"
10
11
namespace
LMCAS
{
12
13
/**
14
* @brief 打印访问器,遍历 AST 并生成可读的数学表达式字符串。
15
*
16
* 幂表达式为分数指数以及负数、分数和嵌套幂底数保留括号。
17
*/
18
class
LMCAS_API
PrintVisitor :
public
LMCAS::detail::SymbolicVisitor {
19
public
:
20
PrintVisitor() =
default
;
21
22
/**
23
* @brief 获取打印结果。
24
* @return 格式化后的表达式字符串
25
*/
26
std::string get_result()
const
{
27
return
buffer.str();
28
}
29
30
void
visit(
const
NumberNode& node)
override
;
31
void
visit(
const
VariableNode& node)
override
;
32
void
visit(
const
AddNode& node)
override
;
33
void
visit(
const
MultiplyNode& node)
override
;
34
void
visit(
const
PowerNode& node)
override
;
35
void
visit(
const
FunctionNode& node)
override
;
36
void
visit(
const
UninterpretedFunctionNode& node)
override
;
37
void
visit(
const
MatrixNode& node)
override
;
38
void
visit(
const
RelationalNode& node)
override
;
39
void
visit(
const
LogicalNode& node)
override
;
40
void
visit(
const
PiecewiseNode& node)
override
;
41
void
visit(
const
SummationNode& node)
override
;
42
void
visit(
const
ProductNode& node)
override
;
43
void
visit(
const
TransformNode& node)
override
;
44
void
visit(
const
QuantifierNode& node)
override
;
45
void
visit(
const
SetBuilderNode& node)
override
;
46
void
visit(
const
FiniteSetNode& node)
override
;
47
void
visit(
const
IntervalNode& node)
override
;
48
void
visit(
const
MembershipNode& node)
override
;
49
void
visit(
const
QuantityNode& node)
override
;
50
void
visit(
const
ComplexNode& node)
override
;
51
void
visit(
const
IntegralNode& node)
override
;
52
void
visit(
const
LimitNode& node)
override
;
53
void
visit(
const
RootOfNode& node)
override
;
54
55
private
:
56
enum class
Precedence {
57
Or, And, Not, Membership, Equality, Relation, Add, Multiply, Power, Unary, Atom
58
};
59
static
Precedence precedence(
const
SymbolicNode& node);
60
void
print_operand(
const
SymbolicNode& node, Precedence parent,
61
bool
parenthesize_equal =
false
);
62
std::stringstream buffer;
63
};
64
65
}
lmcas_export.hpp
LMCAS_API
#define LMCAS_API
定义
lmcas_export.hpp:13
LMCAS
定义
assumption.hpp:11
symbolic_ast.hpp
内部 AST 定义。
src
internal
visitors
print_visitor.hpp
生成于
, 为 LMCAS使用
1.18.0