YSTest: NPL::A1 命名空间参考

YSTest PreAlpha_b700_20160611 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

- 命名空间列表
- 命名空间成员

类 | 枚举 | 函数 | 变量
NPL::A1 命名空间参考

## 类

class | FormContextHandler
| 形式上下文处理器。 更多...
struct | FunctionContextHandler
| 函数上下文处理器。 更多...
struct | NPLA1Tag
| NPLA1 元标签。 更多...

## 枚举

enum | ValueToken { ValueToken::Null, ValueToken::GroupingAnchor, ValueToken::OrderedAnchor }
| 值记号：节点中的值的占位符。 更多...

## 函数

YF_API ValueNode | TransformNode (const TermNode &, NodeMapper={}, NodeMapper=MapNPLALeafNode, NodeToString=ParseNPLANodeString, NodeInserter=InsertChild)

变换 NPLA1 节点 S 表达式抽象语法树为 NPLA1 语义结构。

异常

  std::bad_function_call | 第三至五参数为空。

更多...

YF_API ValueNode | TransformNodeSequence (const TermNode &, NodeMapper={}, NodeMapper=MapNPLALeafNode, NodeToString=ParseNPLANodeString, NodeSequenceInserter=InsertSequenceChild)

变换 NPLA1 节点 S 表达式抽象语法树为 NPLA1 序列语义结构。

异常

  std::bad_function_call | 第三至五参数为空。

更多...

con ctx ctx YF_API void | ReduceArguments (TermNode::Container &, ContextNode &)
| 对容器中的第二项开始逐项规约。 更多...
| PDefH (bool, ReduceFirst, TermNode &term, ContextNode &ctx) ImplRet(!term.empty()?Reduce(Deref(term.begin())
| 规约首项。 更多...
YF_API bool | ReplaceSeparatedChildren (TermNode &, const ValueObject &, const ValueObject &)
| 查找项中的指定分隔符，若找到则替换项为去除分隔符并添加替换前缀的形式。 更多...
YF_API bool | EvaluateContextFirst (TermNode &, ContextNode &)
| 检查非空项的首项并尝试按上下文列表求值。 更多...
void | SetupTraceDepth (ContextNode &root, const string &name)
YF_API void | InsertChild (TermNode &&, TermNode::Container &)
| 插入 NPLA1 子节点。 更多...
YF_API void | InsertSequenceChild (TermNode &&, NodeSequence &)
template<typename _type , typename... _tParams>
ValueNode | LoadNode (_type &&tree, _tParams &&...args)
| 加载 NPLA1 翻译单元。 更多...
template<typename _type , typename... _tParams>
ValueNode | LoadNodeSequence (_type &&tree, _tParams &&...args)
YF_API GuardPasses & | AccessGuardPassesRef (ContextNode &)
| 访问守护遍。 更多...
YF_API EvaluationPasses & | AccessLeafPassesRef (ContextNode &)
| 访问叶节点遍。 更多...
YF_API EvaluationPasses & | AccessListPassesRef (ContextNode &)
| 访问列表节点遍。 更多...
YF_API Guard | EvaluateGuard (TermNode &term, ContextNode &)
| 求值守护。 更多...
YF_API bool | EvaluateLeafPasses (TermNode &term, ContextNode &)
| 求值叶节点遍。 更多...
YF_API bool | EvaluateListPasses (TermNode &term, ContextNode &)
| 求值列表节点遍。 更多...
YF_API bool | Reduce (TermNode &, ContextNode &)
| NPLA1 节点规约。 更多...
YF_API void | ReduceChildren (TermNode::iterator, TermNode::iterator, ContextNode &)
| 规约子项。 更多...
| PDefH (void, ReduceChildren, TermNode::Container &con, ContextNode &ctx) ImplExpr(ReduceChildren(con.begin()
con | end ()
con ctx | PDefH (void, ReduceChildren, TermNode &term, ContextNode &ctx) ImplExpr(ReduceChildren(term.GetContainerRef()
YF_API TermNode | TransformForSeparator (const TermNode &, const ValueObject &, const ValueObject &, const string &={})
| 变换分隔符中缀表达式为前缀表达式。 更多...
YF_API TermNode | TransformForSeparatorRecursive (const TermNode &, const ValueObject &, const ValueObject &, const string &={})
| 递归变换分隔符中缀表达式为前缀表达式。 更多...
template<typename _func >
ContextHandler | ToContextHandler (_func &&f)
| 转换上下文处理器。 更多...
template<typename _func >
void | RegisterFunction (ContextNode &node, const string &name, _func &&f)
| 注册函数上下文处理器。 更多...

## 变量

ctx | __pad0__
ctx const string & | name = yimpl("$__depth"))

## 详细描述

自从
  build 665

## 枚举类型说明

enum NPL::A1::ValueToken

strong

值记号：节点中的值的占位符。

枚举值
Null |
GroupingAnchor |
OrderedAnchor |

在文件 NPLA1.h 第 51 行定义.

## 函数说明

GuardPasses & NPL::A1::AccessGuardPassesRef | ( | ContextNode & | ctx | ) |

访问守护遍。

自从
  build 685

在文件 NPLA1.cpp 第 140 行定义.

参考 YSLib::ValueNode::Place().

参考自 LoadNodeSequence() , 以及 SetupTraceDepth().

函数调用图:

这是这个函数的调用关系图:

EvaluationPasses & NPL::A1::AccessLeafPassesRef | ( | ContextNode & | ctx | ) |

访问叶节点遍。

在文件 NPLA1.cpp 第 146 行定义.

参考 YSLib::ValueNode::Place().

参考自 LoadNodeSequence().

函数调用图:

这是这个函数的调用关系图:

EvaluationPasses & NPL::A1::AccessListPassesRef | ( | ContextNode & | ctx | ) |

访问列表节点遍。

在文件 NPLA1.cpp 第 152 行定义.

参考 YSLib::ValueNode::Place().

参考自 LoadNodeSequence().

函数调用图:

这是这个函数的调用关系图:

con NPL::A1::end | ( |  | ) |

bool NPL::A1::EvaluateContextFirst | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

检查非空项的首项并尝试按上下文列表求值。

返回
  `false` 表示总是不需要重规约。

异常

  ListReductionFailure | 规约失败：找不到可规约项。

参见
  ContextHandler
  Reduce

自从
  build 697

在文件 NPLA1.cpp 第 366 行定义.

参考 ystdex::as_const(), ystdex::cpp2011::begin(), platform::Deref(), YSLib::ValueNode::empty, platform::p, ystdex::sfmt() , 以及 NPL::term.

函数调用图:

Guard NPL::A1::EvaluateGuard | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

求值守护。

在文件 NPLA1.cpp 第 158 行定义.

参考 NPL::term.

参考自 LoadNodeSequence() , 以及 Reduce().

这是这个函数的调用关系图:

bool NPL::A1::EvaluateLeafPasses | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

求值叶节点遍。

在文件 NPLA1.cpp 第 164 行定义.

参考 NPL::term.

参考自 LoadNodeSequence() , 以及 Reduce().

这是这个函数的调用关系图:

bool NPL::A1::EvaluateListPasses | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

求值列表节点遍。

在文件 NPLA1.cpp 第 170 行定义.

参考 NPL::term.

参考自 LoadNodeSequence() , 以及 Reduce().

这是这个函数的调用关系图:

void NPL::A1::InsertChild | ( | TermNode && | term,
|  | TermNode::Container & | con
| ) |  |

插入 NPLA1 子节点。

自从
  build 674

注解
  插入后按名称排序顺序。

第一参数指定的变换结果插入第二参数指定的容器。 若映射操作返回节点名称为空则根据当前容器内子节点数量加前缀 $ 命名以避免重复。

在文件 NPLA1.cpp 第 43 行定义.

参考 YSLib::ValueNode::empty, ystdex::mapped_set< _type, _fComp, _tAlloc >::insert(), YSLib::MakeIndex, NPL::MapToValueNode, NPL::term , 以及 YSLib::ValueNode::Value.

函数调用图:

void NPL::A1::InsertSequenceChild | ( | TermNode && | term,
|  | NodeSequence & | con
| ) |  |

注解
  保持顺序。

直接插入 NPLA1 子节点到序列容器末尾。

在文件 NPLA1.cpp 第 50 行定义.

参考 NPL::MapToValueNode , 以及 NPL::term.

template<typename _type , typename... _tParams>

ValueNode NPL::A1::LoadNode | ( | _type && | tree,
|  | _tParams &&... | args
| ) |  |

加载 NPLA1 翻译单元。

异常

  LoggedEvent | 警告：被加载配置中的实体转换失败。

在文件 NPLA1.h 第 126 行定义.

参考 CHRLib::args, CatchThrow, CHRLib::e, ystdex::bad_any_cast::from(), ystdex::sfmt(), ystdex::bad_any_cast::to(), TransformNode(), TryRet, platform::Descriptions::Warning , 以及 yforward.

参考自 YSLib::FetchMIMEBiMapping(), YSLib::UI::WidgetLoader::LoadUILayout() , 以及 NPL::operator>>().

函数调用图:

这是这个函数的调用关系图:
template<typename _type , typename... _tParams>

ValueNode NPL::A1::LoadNodeSequence | ( | _type && | tree,
|  | _tParams &&... | args
| ) |  |

在文件 NPLA1.h 第 137 行定义.

参考 AccessGuardPassesRef(), AccessLeafPassesRef(), AccessListPassesRef(), CHRLib::args, ystdex::mapped_set< _type, _fComp, _tAlloc >::begin(), YSLib::ValueNode::begin, CatchThrow, platform::Deref(), YSLib::ValueNode::empty, ystdex::mapped_set< _type, _fComp, _tAlloc >::end(), EvaluateGuard(), EvaluateLeafPasses(), EvaluateListPasses(), ystdex::bad_any_cast::from(), NPL::ImplExpr(), NPL::ImplRet(), PDefH(), Reduce(), ReduceArguments(), ReduceChildren(), ystdex::sfmt(), NPL::term, ystdex::bad_any_cast::to(), TransformNodeSequence(), TryRet, platform::Descriptions::Warning, YF_API , 以及 yforward.

函数调用图:

NPL::A1::PDefH | ( | void | ,
|  | ReduceChildren | ,
|  | TermNode::Container & | con,
|  | ContextNode & | ctx
| ) |  |

inline

参考自 LoadNodeSequence().

这是这个函数的调用关系图:

con ctx NPL::A1::PDefH | ( | void | ,
|  | ReduceChildren | ,
|  | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

inline

NPL::A1::PDefH | ( | bool | ,
|  | ReduceFirst | ,
|  | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

inline

规约首项。

返回
  需要重规约。

注解
  快速严格性分析：无条件求值第一项以避免非确定性推断子表达式是否需要求值的复杂度。

参见
  Reduce
  https://en.wikipedia.org/wiki/Fexpr 。

自从
  build 686

bool NPL::A1::Reduce | ( | TermNode & | term,
|  | ContextNode & | ctx
| ) |  |

NPLA1 节点规约。

返回
  需要重规约。

注解
  可能使参数中容器的迭代器失效。
  递归规约子项，子项需要重规约时在调用内循环。
  默认不需要重规约。这可被求值遍改变。

参见
  DetectReducible
  EvaluateGuard
  EvaluateLeafPasses
  EvaluateListPasses
  ValueToken

待办事项:
  实现 ValueToken 保留处理。

规约表达式节点：调用至少一次求值例程递归规约子表达式。 调用 EvaluateGuard 进行必要的上下文重置。 对非空列表节点调用 EvaluateListPasses 求值。 对空表节点替换为 ValueToken::Null 。 对已替换为 ValueToken 的叶节点保留处理。 对其它叶节点调用 EvaluateLeafPasses 求值。 单一求值的结果作为 DetectReducible 的第二参数，根据结果判断是否重规约。

在文件 NPLA1.cpp 第 177 行定义.

参考 NPL::DetectReducible(), YSLib::ValueNode::empty, EvaluateGuard(), EvaluateLeafPasses(), EvaluateListPasses(), CHRLib::CharSet::Null, ystdex::ref(), ystdex::retry_on_cond(), YSLib::ValueNode::size, YSLib::ValueNode::Value , 以及 YSLib::YAssert().

参考自 NPL::SContext::Analyze(), LoadNodeSequence(), NPL::SContext::Reduce() , 以及 ReduceChildren().

函数调用图:

这是这个函数的调用关系图:

void NPL::A1::ReduceArguments | ( | TermNode::Container & | con,
|  | ContextNode & | ctx
| ) |  |

对容器中的第二项开始逐项规约。

异常

  LoggedEvent | 错误：容器内的子项数不大于 1 。

自从
  build 685

在文件 NPLA1.cpp 第 221 行定义.

参考 ystdex::mapped_set< _type, _fComp, _tAlloc >::begin(), ystdex::mapped_set< _type, _fComp, _tAlloc >::end(), platform::Descriptions::Err, ReduceChildren() , 以及 ystdex::mapped_set< _type, _fComp, _tAlloc >::size().

参考自 LoadNodeSequence() , 以及 NPL::A1::FunctionContextHandler::operator()().

函数调用图:

这是这个函数的调用关系图:

void NPL::A1::ReduceChildren | ( | TermNode::iterator | first,
|  | TermNode::iterator | last,
|  | ContextNode & | ctx
| ) |  |

规约子项。

注解
  按语言规范，子项规约顺序未指定。
  可能使参数中容器的迭代器失效。
  忽略子项重规约要求。

参见
  Reduce

自从
  build 697

在文件 NPLA1.cpp 第 211 行定义.

参考 Reduce() , 以及 ystdex::ref().

参考自 LoadNodeSequence() , 以及 ReduceArguments().

函数调用图:

这是这个函数的调用关系图:
template<typename _func >

void NPL::A1::RegisterFunction | ( | ContextNode & | node,
|  | const string & | name,
|  | _func && | f
| ) |  |

注册函数上下文处理器。

注解
  使用 ADL ToContextHandler 。

在文件 NPLA1.h 第 360 行定义.

参考 YSLib::IO::f, ToContextHandler() , 以及 yforward.

函数调用图:

bool NPL::A1::ReplaceSeparatedChildren | ( | TermNode & | term,
|  | const ValueObject & | pfx,
|  | const ValueObject & | delim
| ) |  |

查找项中的指定分隔符，若找到则替换项为去除分隔符并添加替换前缀的形式。

返回
  是否找到并替换了项。

参见
  EvaluationPasses
  TransformForSeparator

在文件 NPLA1.cpp 第 296 行定义.

参考 YSLib::ValueNode::begin, YSLib::ValueNode::end, NPL::HasValue, ystdex::ref() , 以及 TransformForSeparator().

函数调用图:

void NPL::A1::SetupTraceDepth | ( | ContextNode & | root,
|  | const string & | name
| ) |  |

在文件 NPLA1.cpp 第 233 行定义.

参考 AccessGuardPassesRef(), platform::Descriptions::Informative, YSLib::ValueNode::Place(), ystdex::pvoid(), NPL::term, ystdex::unique_guard(), YSLib::ynothrow, YTraceDe , 以及 yunseq.

函数调用图:
template<typename _func >

ContextHandler NPL::A1::ToContextHandler | ( | _func && | f | ) |

转换上下文处理器。

自从
  build 697

在文件 NPLA1.h 第 349 行定义.

参考 YSLib::IO::f , 以及 yforward.

参考自 RegisterFunction().

这是这个函数的调用关系图:

TermNode NPL::A1::TransformForSeparator | ( | const TermNode & | term,
|  | const ValueObject & | pfx,
|  | const ValueObject & | delim,
|  | const string & | name = `{}`
| ) |  |

变换分隔符中缀表达式为前缀表达式。

注解
  ValueObject 参数分别指定替换添加的前缀和被替换的分隔符的值。

自从
  build 697

注解
  移除子项中值和指定分隔符指定的项，并以 AsIndexNode 添加指定前缀值作为子项。
  最后一个参数指定返回值的名称。

参见
  AsIndexNode

在文件 NPLA1.cpp 第 253 行定义.

参考 YSLib::AsIndexNode(), YSLib::ValueNode::begin, CHRLib::e, YSLib::ValueNode::empty, YSLib::ValueNode::end, NPL::HasValue, YSLib::MakeIndex, ystdex::ref(), ystdex::split() , 以及 YSLib::ValueNode::Value.

参考自 ReplaceSeparatedChildren().

函数调用图:

这是这个函数的调用关系图:

TermNode NPL::A1::TransformForSeparatorRecursive | ( | const TermNode & | term,
|  | const ValueObject & | pfx,
|  | const ValueObject & | delim,
|  | const string & | name = `{}`
| ) |  |

递归变换分隔符中缀表达式为前缀表达式。

在文件 NPLA1.cpp 第 277 行定义.

参考 YSLib::AsIndexNode(), YSLib::ValueNode::begin, CHRLib::e, YSLib::ValueNode::empty, YSLib::ValueNode::end, NPL::HasValue, YSLib::MakeIndex, ystdex::ref(), ystdex::split() , 以及 YSLib::ValueNode::Value.

函数调用图:

ValueNode NPL::A1::TransformNode | ( | const TermNode & | term,
|  | NodeMapper | mapper = `{}`,
|  | NodeMapper | map_leaf_node = `MapNPLALeafNode`,
|  | NodeToString | node_to_str = `ParseNPLANodeString`,
|  | NodeInserter | insert_child = `InsertChild`
| ) |  |

变换 NPLA1 节点 S 表达式抽象语法树为 NPLA1 语义结构。

异常

  std::bad_function_call | 第三至五参数为空。

返回
  变换后的新节点（及子节点）。

第一参数指定源节点，其余参数指定部分变换规则。 当被调用的第二至第四参数不修改传入的节点参数时变换不修改源节点。 过程如下： 若源节点为叶节点，直接返回使用第三参数创建映射的节点。 若源节点只有一个子节点，直接返回这个子节点的变换结果。 否则，使用第四参数从第一个子节点取作为变换结果名称的字符串。 若名称非空则忽略第一个子节点，只变换剩余子节点。 当剩余一个子节点（即源节点有两个子节点）时，直接递归变换这个节点并返回。 若变换后的结果名称非空，则作为结果的值；否则，结果作为容器内单一的值。 否则，新建节点容器，遍历并变换剩余的节点插入这个容器，返回以这个容器构造的节点。 第二参数指定此时的映射操作，若为空则默认使用递归 TransformNode 调用。 调用第五参数插入映射的结果到容器。

在文件 NPLA1.cpp 第 56 行定义.

参考 YSLib::ValueNode::begin, ystdex::bind1(), YSLib::ValueNode::end, YSLib::i, name, CHRLib::s, YSLib::ValueNode::size , 以及 yunseq.

参考自 LoadNode().

函数调用图:

这是这个函数的调用关系图:

ValueNode NPL::A1::TransformNodeSequence | ( | const TermNode & | term,
|  | NodeMapper | mapper = `{}`,
|  | NodeMapper | map_leaf_node = `MapNPLALeafNode`,
|  | NodeToString | node_to_str = `ParseNPLANodeString`,
|  | NodeSequenceInserter | insert_child = `InsertSequenceChild`
| ) |  |

变换 NPLA1 节点 S 表达式抽象语法树为 NPLA1 序列语义结构。

异常

  std::bad_function_call | 第三至五参数为空。

返回
  变换后的新节点（及子节点）。

参见
  TransformNode

和 TransformNode 变换规则相同， 但插入的子节点以 NodeSequence 的形式作为变换节点的值而不是子节点，可保持顺序。

在文件 NPLA1.cpp 第 93 行定义.

参考 YSLib::ValueNode::begin, ystdex::bind1(), YSLib::ValueNode::end, YSLib::i, platform::n, name, CHRLib::s, YSLib::ValueNode::size , 以及 yunseq.

参考自 LoadNodeSequence().

函数调用图:

这是这个函数的调用关系图:

## 变量说明

ctx NPL::A1::__pad0__

在文件 NPLA1.h 第 248 行定义.

ctx const string& NPL::A1::name = yimpl("$__depth"))

在文件 NPLA1.h 第 248 行定义.

参考自 YSLib::AccessNodePtr(), YSLib::IO::EnsureDirectory(), platform::HDirectory::GetNodeCategory(), YReader::ShlReader::LoadBookmarks(), YReader::ShlReader::LoadGlobalConfiguration(), NPL::SXML::MakeAttributeLiteral(), YSLib::PackNodes(), NPL::SXML::PDefH(), NPL::PDefH(), YReader::ShlReader::SaveBookmarks(), YReader::ShlReader::SaveGlobalConfiguration(), TransformNode(), TransformNodeSequence(), YSLib::IO::TraverseTree() , 以及 platform::FAT::LFN::ValidateName().