YSTest: NPLA.h 文件参考

YSTest PreAlpha_b900_20201012 The YSLib Test Project

类 | 命名空间 | 宏定义 | 类型定义 | 枚举 | 函数 | 变量
NPLA.h 文件参考
YFramework Library » Naming Protocol Language

NPLA 公共接口。 更多...

`#include "YModules.h"`
`#include <NPL/SContext.h>`
`#include <ystdex/base.h>`
`#include <libdefect/exception.h>`
NPLA.h 的引用(Include)关系图:
此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

## 类

struct | NPL::NPLATag
| NPLA 元标签。 更多...
class | NPL::NPLException
| NPL 异常基类。 更多...
class | NPL::TypeError
| 类型错误。 更多...
class | NPL::ValueCategoryMismatch
| 值类别不匹配。 更多...
class | NPL::ListTypeError
| 列表类型错误。 更多...
class | NPL::ListReductionFailure
| 列表规约失败。 更多...
class | NPL::InvalidSyntax
| 无效语法。 更多...
class | NPL::ParameterMismatch
| 参数不匹配。 更多...
class | NPL::ArityMismatch
| 元数不匹配。 更多...
class | NPL::BadIdentifier
| 标识符错误。 更多...
class | NPL::InvalidReference
| 无效引用。 更多...
class | NPL::EnvironmentReference
| 环境引用计数检查支持。 更多...
class | NPL::TermReference
| 项引用。 更多...
struct | NPL::ReferenceTermOp
| 项引用函数对象操作。 更多...
class | NPL::Environment
| 环境。 更多...
class | NPL::ContextNode
| 上下文节点。 更多...
class | NPL::ContextNode::ReducerSequence
| 动作序列类型：蕴含当前上下文的续延。 更多...
class | NPL::ContextNode::ReductionGuard
| 规约守卫：暂存当前动作序列。 更多...
struct | NPL::EnvironmentSwitcher
| 环境切换器。 更多...

## 命名空间

| NPL
| NPL::SXML
| SXML 表示。

## 宏定义

#define | NPL_NPLA_CheckEnvironmentReferenceCount true
#define | NPL_NPLA_CheckParentEnvironment true
#define | NPL_NPLA_CheckTermReferenceIndirection true

## 类型定义

using | NPL::NodeToString = function< string(const ValueNode &)>
using | NPL::IndentGenerator = function< string(size_t)>
| 生成前缀缩进的函数类型。 更多...
using | NPL::AnchorPtr = yimpl(shared_ptr< const void >)
| 锚对象指针。 更多...
using | NPL::ReducerFunctionType = ReductionStatus(ContextNode &)
| 规约器函数原型。 更多...

## 枚举

enum | NPL::LexemeCategory { NPL::LexemeCategory::Symbol, NPL::LexemeCategory::Code, NPL::LexemeCategory::Data, NPL::LexemeCategory::Extended }
| 字面量类别。 更多...

enum

NPL::ReductionStatus : yimpl(size_t) {
NPL::ReductionStatus::Partial = yimpl(0x00), NPL::ReductionStatus::Neutral = yimpl(0x01), NPL::ReductionStatus::Clean = yimpl(0x02), NPL::ReductionStatus::Retained = yimpl(0x03),
NPL::ReductionStatus::Regular = yimpl(Retained), NPL::ReductionStatus::Retrying = yimpl(0x10)
}

| 规约状态：某个项上的一遍规约可能的中间结果。 更多...

## 函数

YB_ATTR_nodiscard YF_API YB_PURE string | NPL::DecodeNodeIndex (const string &)
| 解码索引节点名称。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | NPL::EscapeNodeLiteral (const ValueNode &)
| 转义 NPLA 节点字面量。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | NPL::LiteralizeEscapeNodeLiteral (const ValueNode &)
| 转义 NPLA 节点字面量。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | NPL::ParseNPLANodeString (const ValueNode &)
| 解析 NPLA 节点字符串。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | NPL::DefaultGenerateIndent (size_t)
| 默认生成缩进：生成水平制表符为单位的缩进。 更多...
YF_API void | NPL::PrintIndent (std::ostream &, IndentGenerator=DefaultGenerateIndent, size_t=1)
| 打印缩进。 更多...
template<typename _func , typename _fCallable >
void | NPL::PrintContainedNodes (_func print_bound, _fCallable f)
| 打印容器边界和其中的 NPLA 节点，且在打印边界前调用前置操作。 更多...
YF_API void | NPL::PrintNode (std::ostream &, const ValueNode &, NodeToString=EscapeNodeLiteral, IndentGenerator=DefaultGenerateIndent, size_t=0)
| 打印 NPLA 节点。 更多...
YF_API bool | NPL::PrintNodeString (std::ostream &, const ValueNode &, NodeToString=EscapeNodeLiteral)
| 打印节点字符串。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | NPL::ParseNPLATermString (const TermNode &)
| 解析 NPLA 项节点字符串。 更多...
YB_ATTR_nodiscard YF_API YB_PURE ValueNode | NPL::MapNPLALeafNode (const TermNode &)
| 映射 NPLA 叶节点。 更多...
YB_ATTR_nodiscard YF_API YB_PURE TermNode | NPL::TransformToSyntaxNode (ValueNode &&)
| 变换 NPLA 语法节点为语法分析树的叶节点。 更多...
YB_ATTR_nodiscard YB_PURE | NPL::PDefH (TermNode, TransformToSyntaxNode, NodeLiteral &&nl) ImplRet(TransformToSyntaxNode(std
template<class _tNodeOrCon , typename _type , typename... _tParams>
TNIter | NPL::InsertSyntaxNode (_tNodeOrCon &&node_or_con, _type &&arg, _tParams &&... args)
template<class _tNodeOrCon >
TNIter | NPL::InsertChildSyntaxNode (_tNodeOrCon &&node_or_con, TermNode &child)
| 插入语法子节点。 更多...
template<class _tNodeOrCon >
TNIter | NPL::InsertChildSyntaxNode (_tNodeOrCon &&node_or_con, TermNode &&child)
template<class _tNodeOrCon >
TNIter | NPL::InsertChildSyntaxNode (_tNodeOrCon &&node_or_con, NodeLiteral &&nl)
YB_ATTR_nodiscard YF_API YB_PURE string | NPL::SXML::ConvertAttributeNodeString (const TermNode &)
| 转换 SXML 节点为 XML 属性字符串。 更多...
YB_ATTR_nodiscard YF_API string | NPL::SXML::ConvertDocumentNode (const TermNode &, IndentGenerator=DefaultGenerateIndent, size_t=0, ParseOption=ParseOption::Normal)
| 转换 SXML 文档节点为 XML 字符串。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | NPL::SXML::ConvertStringNode (const TermNode &)
| 转换 SXML 节点为被转义的 XML 字符串。 更多...
YF_API void | NPL::SXML::PrintSyntaxNode (std::ostream &os, const TermNode &, IndentGenerator=DefaultGenerateIndent, size_t=0)
| 打印 SContext::Analyze 分析取得的 SXML 语法树节点并刷新流。 更多...
template<typename _tString , typename _tLiteral = NodeLiteral>
YB_ATTR_nodiscard YB_PURE TermNode | NPL::SXML::NodeLiteralToTerm (_tString &&name, std::initializer_list< _tLiteral > il)
template<typename... _tParams>
YB_ATTR_nodiscard YB_PURE TermNode | NPL::SXML::MakeTop (const string &name, _tParams &&... args)
| 构造 SXML 文档顶级节点。 更多...
YB_ATTR_nodiscard YB_PURE | NPL::SXML::PDefH (TermNode, MakeTop,) ImplRet(MakeTop(
YB_ATTR_nodiscard YF_API YB_PURE TermNode | NPL::SXML::MakeXMLDecl (const string &={}, const string &="1.0", const string &="UTF-8", const string &={})
| 构造 SXML 文档 XML 声明节点。 更多...
YB_ATTR_nodiscard YF_API YB_PURE TermNode | NPL::SXML::MakeXMLDoc (const string &={}, const string &="1.0", const string &="UTF-8", const string &={})
| 构造包含 XML 声明的 SXML 文档节点。 更多...
YB_ATTR_nodiscard YB_PURE | NPL::SXML::PDefH (NodeLiteral, MakeAttributeTagLiteral, std::initializer_list< NodeLiteral > il) ImplRet(
| 构造 SXML 属性标记字面量。 更多...
template<typename... _tParams>
YB_ATTR_nodiscard YB_PURE NodeLiteral | NPL::SXML::MakeAttributeTagLiteral (_tParams &&... args)
YB_ATTR_nodiscard YB_PURE | NPL::SXML::PDefH (NodeLiteral, MakeAttributeLiteral, const string &name, std::initializer_list< NodeLiteral > il) ImplRet(
| 构造 XML 属性字面量。 更多...
template<typename... _tParams>
YB_ATTR_nodiscard YB_PURE NodeLiteral | NPL::SXML::MakeAttributeLiteral (const string &name, _tParams &&... args)
template<class _tNodeOrCon >
void | NPL::SXML::InsertAttributeNode (_tNodeOrCon &&node_or_con, const string &name, std::initializer_list< NodeLiteral > il)
| 插入只有 XML 属性节点到语法节点。 更多...
template<class _tNodeOrCon , typename... _tParams>
void | NPL::SXML::InsertAttributeNode (_tNodeOrCon &&node_or_con, const string &name, _tParams &&... args)
YB_ATTR_nodiscard YF_API YB_PURE LexemeCategory | NPL::CategorizeBasicLexeme (string_view) ynothrowv
| 对排除扩展字面量的词素分类。 更多...
YB_ATTR_nodiscard YF_API YB_PURE LexemeCategory | NPL::CategorizeLexeme (string_view) ynothrowv
| 对词素分类。 更多...
YB_ATTR_nodiscard YF_API YB_PURE bool | NPL::IsNPLAExtendedLiteral (string_view) ynothrowv
| 判断不是非扩展字面量的词素是否为 NPLA 扩展字面量。 更多...
YB_ATTR_nodiscard YB_STATELESS yconstfn | NPL::PDefH (bool, IsNPLAExtendedLiteralNonDigitPrefix, char c) ynothrow ImplRet(c
| 判断字符是否为 NPLA 扩展字面量非数字前缀。 更多...
YB_ATTR_nodiscard YB_PURE observer_ptr< const TokenValue > | NPL::TermToNamePtr (const TermNode &)
| 访问项的值作为记号。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | NPL::TermToString (const TermNode &)
| 访问项的值并转换为字符串形式的外部表示。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | NPL::TermToStringWithReferenceMark (const TermNode &, bool)
| 访问项的值并转换为可选带有引用标记的字符串形式。 更多...
YB_ATTR_nodiscard YF_API YB_PURE TermTags | NPL::TermToTags (TermNode &)
| 访问项初始化标签。 更多...
YB_NORETURN YF_API void | NPL::ThrowListTypeErrorForInvalidType (const ystdex::type_info &, const TermNode &, bool)
| 对列表项抛出指定预期访问值的类型的异常。 更多...
YF_API void | NPL::TokenizeTerm (TermNode &term)
| 标记记号节点：递归变换节点，转换其中的词素为记号值。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< _type > | NPL::TryAccessLeaf (TermNode &term)
| 尝试访问项的指定类型对象指针。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< const _type > | NPL::TryAccessLeaf (const TermNode &term)
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< _type > | NPL::TryAccessTerm (TermNode &term)
| 尝试访问项的指定类型叶节点对象指针。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< const _type > | NPL::TryAccessTerm (const TermNode &term)
YB_ATTR_nodiscard YF_API TermNode | NPL::PrepareCollapse (TermNode &, const shared_ptr< Environment > &)
| 准备折叠项引用。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< _type > | NPL::TryAccessReferencedLeaf (TermNode &term)
| 尝试访问解析 TermReference 后的项的指定类型对象指针。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< const _type > | NPL::TryAccessReferencedLeaf (const TermNode &term)
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< _type > | NPL::TryAccessReferencedTerm (TermNode &term)
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< const _type > | NPL::TryAccessReferencedTerm (const TermNode &term)
YB_ATTR_nodiscard YF_API YB_PURE bool | NPL::IsReferenceTerm (const TermNode &)
| 判断项（的值数据成员）是否为引用项。 更多...
YB_ATTR_nodiscard YF_API YB_PURE bool | NPL::IsBoundLValueTerm (const TermNode &)
| 判断项（的值数据成员）是否表示被绑定的左值引用。 更多...
YB_ATTR_nodiscard YF_API YB_PURE bool | NPL::IsUncollapsedTerm (const TermNode &)
| 判断项（的值数据成员）是否表示未折叠的引用。 更多...
YB_ATTR_nodiscard YF_API YB_PURE bool | NPL::IsUniqueTerm (const TermNode &)
| 判断项（的值数据成员）是否表示非引用项或唯一引用。 更多...
template<typename _func , class _tTerm >
auto | NPL::ResolveTerm (_func do_resolve, _tTerm &&term) -> yimpl(decltype(ystdex::expand_proxy< yimpl(void)(_tTerm &&, ResolvedTermReferencePtr)>::call(do_resolve, yforward(term), ResolvedTermReferencePtr())))
| 解析并间接引用处理可能是引用值的项。 更多...
template<typename _type , class _tTerm >
void | NPL::CheckRegular (_tTerm &term, bool has_ref)
template<typename _type , class _tTerm >
YB_ATTR_nodiscard YB_PURE auto | NPL::AccessRegular (_tTerm &term, bool has_ref) -> yimpl(decltype(NPL::Access< _type >(term)))
| 访问项的指定类型正规值。 更多...
template<typename _type , class _tTerm >
YB_ATTR_nodiscard YB_PURE auto | NPL::ResolveRegular (_tTerm &term) -> yimpl(decltype(NPL::Access< _type >(term)))
| 访问一次解析引用值后的项的指定类型正规值。 更多...
template<typename _func , typename... _tParams>
auto | NPL::CheckedReduceWith (_func f, _tParams &&... args) -> decltype(ystdex::retry_on_cond(CheckReducible, f, yforward(args)...))
YF_API ReductionStatus | NPL::RegularizeTerm (TermNode &, ReductionStatus) ynothrow
| 按规约结果正规化项。 更多...
YF_API void | NPL::LiftTermValueOrCopy (TermNode &, TermNode &, bool)
| 提升项的值数据成员或项的值数据成员的副本。 更多...
YF_API void | NPL::LiftCollapsed (TermNode &, TermNode &, TermReference)
| 提升折叠后的项引用到指定的项。 更多...
YF_API void | NPL::MoveCollapsed (TermNode &, TermNode &)
| 提升折叠后的第二参数指定的项。 更多...
YF_API void | NPL::MoveRValueToForward (TermNode &, TermNode &)
| 提升第二参数指定的右值项作为转发的第一参数指定项中的返回值。 更多...
YF_API void | NPL::MoveRValueToReturn (TermNode &, TermNode &)
| 提升第二参数指定的右值项作为第一参数指定项中的返回值。 更多...
| NPL::PDefH (ReductionStatus, ReduceForLiftedResult, TermNode &term) ImplRet(LiftToReturn(term)
| 规约提升结果。 更多...
ReductionStatus::Retained YF_API ReductionStatus | NPL::ReduceHeadEmptyList (TermNode &) ynothrow
| 规约第一个非结尾空列表子项。 更多...
| NPL::PDefH (ReductionStatus, ReduceToValue, TermNode &term, TermNode &tm) ImplRet(MoveRValueToReturn(term
| 规约转发第二参数指定的项表示的值作为求值结果。 更多...
ReductionStatus::Retained YB_ATTR_nodiscard yconstfn YB_STATELESS | NPL::PDefH (bool, IsOverridableReductionResult, ReductionStatus r) ynothrow ImplRet(yimpl(r
| 判断参数指定的规约结果在合并中是否可被覆盖。 更多...
| NPL::yimpl (using) Reducer
| 规约器：和绑定上下文以外参数的求值遍的处理器具有等价签名的多态函数。 更多...
template<class _tAlloc , typename _tParam , typename... _tParams>
| NPL::yimpl (ystdex::exclude_self_t)< Reducer
Reducer | NPL::ToReducer (const _tAlloc &a, _tParam &&arg, _tParams &&... args)
template<typename... _tParams>
shared_ptr< Environment > | NPL::AllocateEnvironment (ContextNode &ctx, _tParams &&... args)
template<typename... _tParams>
shared_ptr< Environment > | NPL::AllocateEnvironment (TermNode &term, ContextNode &ctx, _tParams &&... args)
template<typename _type , typename... _tParams>
bool | NPL::EmplaceLeaf (Environment::BindingMap &m, string_view name, _tParams &&... args)
| 构造并向绑定目标添加叶节点值。 更多...
template<typename _type , typename... _tParams>
bool | NPL::EmplaceLeaf (Environment &env, string_view name, _tParams &&... args)
template<typename _type , typename... _tParams>
bool | NPL::EmplaceLeaf (ContextNode &ctx, string_view name, _tParams &&... args)
YB_ATTR_nodiscard | NPL::PDefH (Environment::NameResolution, ResolveName, const ContextNode &ctx, string_view id) ImplRet(YAssertNonnull(id.data())
| 解析名称：处理保留名称并查找名称。 更多...
YB_ATTR_nodiscard ctx | NPL::Resolve (ctx.GetRecordPtr(), id)) YB_ATTR_nodiscard YF_API TermNode MoveResolved(const ContextNode &
| 转移解析标识符的对象：解析名称并从环境中转移被绑定的对象。 更多...
YB_ATTR_nodiscard YF_API TermNode | NPL::ResolveIdentifier (const ContextNode &, string_view)
| 解析标识符：解析名称并折叠引用。 更多...
YB_ATTR_nodiscard YF_API pair< shared_ptr< Environment >, bool > | NPL::ResolveEnvironment (const ValueObject &)
| 解析环境。 更多...
YB_ATTR_nodiscard YF_API pair< shared_ptr< Environment >, bool > | NPL::ResolveEnvironment (const TermNode &term)
template<typename _fCurrent >
ReductionStatus | NPL::RelaySwitched (ContextNode &ctx, _fCurrent &&cur)
| 异步规约指定动作和上下文中的当前动作。 更多...

## 变量

YB_ATTR_nodiscard YB_STATELESS yconstfn | NPL::NPLATag
YB_ATTR_nodiscard YB_PURE PDefH(TermNode &, ReferenceTerm, TermNode &term) ynoexcept_spec(std YB_ATTR_nodiscard YB_PURE yconstfn | PDefH (ResolvedTermReferencePtr, ResolveToTermReferencePtr, observer_ptr< const TermReference > p) ynothrow ImplRet(p.get()) YB_ATTR_nodiscard YB_PURE inline PDefH(bool
| 访问项并取解析 TermReference 间接值后的引用。 更多...
YB_ATTR_nodiscard YB_PURE PDefH(TermNode &, ReferenceTerm, TermNode &term) ynoexcept_spec(std YB_ATTR_nodiscard YB_PURE yconstfn | NPL::IsMovable
YB_ATTR_nodiscard YB_PURE PDefH(TermNode &, ReferenceTerm, TermNode &term) ynoexcept_spec(std YB_ATTR_nodiscard YB_PURE yconstfn const TermReference &ref ynothrow | NPL::ImplRet (ref.IsMovable()) template< typename _tPointer > YB_ATTR_nodiscard YB_PURE inline auto IsMovable(_tPointer p) ynothrow -> decltype(!bool(p)||NPL::IsMovable(*p))
PDefH(void, LiftOther, TermNode &term, TermNode &tm) ImplExpr(term.MoveContent(std YF_API void | NPL::LiftTermOrCopy (TermNode &, TermNode &, bool)
| 提升项：设置项的内容为参数指定的项或值。 更多...
PDefH(void, LiftTermRef, TermNode &term, const TermNode &tm) ImplExpr(NPL | NPL::PDefH (void, LiftMoved, TermNode &term, const TermReference &ref, bool move) ImplExpr(LiftTermOrCopy(term
| 提升项引用：使用第二参数指定的项的内容引用替换第一个项的内容。 更多...
PDefH(void, LiftTermRef, TermNode &term, const TermNode &tm) ImplExpr(NPL ref | NPL::get ()
PDefH(void, LiftTermRef, TermNode &term, const TermNode &tm) ImplExpr(NPL ref move ref move YF_API void | NPL::LiftToReturn (TermNode &)
| 提升项作为返回值。 更多...
PDefH(void, LiftSubtermsToReturn, TermNode &term) ImplExpr(std YF_API ReductionStatus | NPL::ReduceBranchToListValue (TermNode &) ynothrowv
| 对每个子项提升项的值数据成员可能包含的引用值。 更多...
PDefH(ReductionStatus, ReduceToList, TermNode &term) ynothrow ImplRet(IsBranchedList(term) ? ReduceBranchToList(term) YF_API ReductionStatus | NPL::ReduceToReferenceAt (TermNode &, TermNode &, ResolvedTermReferencePtr)
| 规约为列表：对分支列表节点移除第一个子项，保留余下的子项作为列表。 更多...
| NPL::tm
| NPL::_tParam
YB_ATTR_nodiscard ctx | NPL::string_view

## 详细描述

NPLA 公共接口。

版本
  r7931

作者
  FrankHB frank.nosp@m.hb19.nosp@m.89@gm.nosp@m.ail..nosp@m.com

自从
  build 663

创建时间:
  2016-01-07 10:32:34 +0800

修改时间:
  2020-09-30 12:03 +0800

文本编码:
  UTF-8

模块名称:
  NPL::NPLA

在文件 NPLA.h 中定义.

## 宏定义说明

## ◆ NPL_NPLA_CheckEnvironmentReferenceCount

#define NPL_NPLA_CheckEnvironmentReferenceCount true

## ◆ NPL_NPLA_CheckParentEnvironment

#define NPL_NPLA_CheckParentEnvironment true

## ◆ NPL_NPLA_CheckTermReferenceIndirection

#define NPL_NPLA_CheckTermReferenceIndirection true

## 变量说明

## ◆ PDefH

YB_ATTR_nodiscard YB_PURE PDefH (TermNode&, ReferenceTerm, TermNode& term) ynoexcept_spec(std YB_ATTR_nodiscard YB_PURE yconstfn PDefH(ResolvedTermReferencePtr, ResolveToTermReferencePtr, observer_ptr< const TermReference > p) ynothrow ImplRet(p.get()) YB_ATTR_nodiscard YB_PURE inline PDefH(bool

inline

访问项并取解析 TermReference 间接值后的引用。

返回
  若项的 Value 数据成员为 TermReference 则为其中的引用，否则为参数。

参见
  TermReference

自从
  build 854

表示解析项后作为访问参数的项引用指针。

用于可选参数访问的指针类型，满足： 满足 ISO C++ [nullablepointer.requirements] NullablePointer 要求； 允许隐式转换为 bool ，结果同显式转换为 bool ； 非空值可使用一元 * 和 -> 取指定项引用的 const 内建引用及成员访问； 不对被访问的项引用具所有权。 注意具体类型不应被依赖。使用内建指针实现以在某些 ABI 上提供高效的二进制实现， 并支持转换为访问参数指针的操作在常量表达式上下文中出现。 这个类型用于解析项时的可选指针参数，其使用详见以下 NPL::ResolveTerm 。

转换项引用指针为项引用的访问参数指针。

判断解析后的项是否指示可转移项。

自从
  build 859

判断参数指定的项是否可通过判断项的元数据确定被转移。 参数是项的引用或指向项的指针（支持包括项引用指针和项引用的访问参数指针）， 通常应表示解析项的结果。

在文件 NPLA.h 第 1279 行定义.