LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
expr_parser.hpp
浏览该文件的文档.
1#pragma once
2
3#include "expr.hpp"
5
6#include <string>
7#include <utility>
8#include <vector>
9
10namespace LMCAS::expr_detail {
11
12inline constexpr const char* kParseOperation = "LMCAS.parse_expr";
13
15public:
16 explicit ExprParser(std::string source) : source_(std::move(source)) {}
18
19private:
20 std::string source_;
21 std::size_t pos_ = 0;
22
23 bool eof() const noexcept;
24 char peek() const noexcept;
25 bool match(char c);
26 bool match_text(const char* text);
27 bool match_keyword(const char* text);
28 void skip_space() noexcept;
29 ExprResult fail(std::string message) const;
30 static bool is_ident_start(unsigned char c) noexcept;
31 static bool is_ident_continue(unsigned char c) noexcept;
46 std::string parse_identifier();
48 ExprResult parse_call(const std::string& name);
50
52 ExprResult logical(const ExprPtr& lhs, const ExprPtr& rhs, LogicalNode::Op op);
53 ExprResult finite_set(const std::vector<ExprPtr>& elements);
55 bool lower_closed, bool upper_closed);
57 ExprResult function_node(const std::string& name,
58 const std::vector<ExprPtr>& arguments,
59 FunctionNode::FuncType type);
60 ExprResult apply_function(const std::string& name,
61 const std::vector<ExprPtr>& arguments);
62 ExprResult apply_log(const std::vector<ExprPtr>& arguments);
63 ExprResult apply_atan2(const std::vector<ExprPtr>& arguments);
64 ExprResult apply_integral(const std::vector<ExprPtr>& arguments);
65 ExprResult apply_limit(const std::vector<ExprPtr>& arguments);
66 ExprResult apply_rootof(const std::vector<ExprPtr>& arguments);
67 ExprResult apply_clamp(const std::vector<ExprPtr>& arguments);
68 ExprResult uninterpreted_function(const std::string& name,
69 const std::vector<ExprPtr>& arguments);
70};
71
72}
函数节点,表示数学函数调用(三角函数、对数、特殊函数等)。
static bool is_ident_continue(unsigned char c) noexcept
ExprResult apply_log(const std::vector< ExprPtr > &arguments)
static bool is_ident_start(unsigned char c) noexcept
ExprResult uninterpreted_function(const std::string &name, const std::vector< ExprPtr > &arguments)
ExprResult function_node(const std::string &name, const std::vector< ExprPtr > &arguments, FunctionNode::FuncType type)
ExprResult interval(const ExprPtr &lower, const ExprPtr &upper, bool lower_closed, bool upper_closed)
ExprResult logical(const ExprPtr &lhs, const ExprPtr &rhs, LogicalNode::Op op)
ExprResult apply_function(const std::string &name, const std::vector< ExprPtr > &arguments)
ExprResult apply_clamp(const std::vector< ExprPtr > &arguments)
bool match_keyword(const char *text)
ExprResult apply_atan2(const std::vector< ExprPtr > &arguments)
ExprResult finite_set(const std::vector< ExprPtr > &elements)
ExprResult apply_limit(const std::vector< ExprPtr > &arguments)
ExprResult apply_integral(const std::vector< ExprPtr > &arguments)
ExprResult apply_rootof(const std::vector< ExprPtr > &arguments)
ExprResult relational(const ExprPtr &lhs, const ExprPtr &rhs, RelationOp op)
ExprResult parse_call(const std::string &name)
ExprResult membership(const ExprPtr &element, const ExprPtr &set, bool negated)
ExprResult fail(std::string message) const
ExprResult parse_interval_literal(bool lower_closed)
constexpr const char * kParseOperation
const ExprPtr & element
__attribute__((visibility("default"))) ExprResult function(const std __attribute__((visibility("default"))) ExprResult finite_set(std ExprPtr upper
const ExprPtr & lower
const ExprPtr & set
const VectorField const VectorField & c
Result< ExprPtr > ExprResult
RelationOp
Stable relational operator used by public APIs.
const ExprPtr RelationOp op
__attribute__((visibility("default"))) ExprResult function(const std __attribute__((visibility("default"))) ExprResult finite_set(std ExprPtr bool lower_closed
std::shared_ptr< SymbolicExpr > ExprPtr
const ExprPtr & rhs
__attribute__((visibility("default"))) ExprResult function(const std __attribute__((visibility("default"))) ExprResult finite_set(std ExprPtr bool bool upper_closed
const ExprPtr bool negated
__attribute__((visibility("default"))) Result< EqvProfile > eqv_profile_from_name(const std const std::string & name
内部 AST 定义。