LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
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"
10
11namespace LMCAS {
12
13/**
14 * @brief 打印访问器,遍历 AST 并生成可读的数学表达式字符串。
15 *
16 * 幂表达式为分数指数以及负数、分数和嵌套幂底数保留括号。
17 */
18class LMCAS_API PrintVisitor : public LMCAS::detail::SymbolicVisitor {
19public:
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
55private:
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}
#define LMCAS_API
内部 AST 定义。