YSTest: NPL 命名空间参考

YSTest PreAlpha_b900_20201012 The YSLib Test Project

命名空间 | 类 | 类型定义 | 枚举 | 函数 | 变量
NPL 命名空间参考

## 命名空间

| A1
| SContext
| S 表达式上下文：处理 S 表达式。
| SXML
| SXML 表示。

## 类

class | ArityMismatch
| 元数不匹配。 更多...
class | BadIdentifier
| 标识符错误。 更多...
class | BufferedByteParserBase
| 具有字符缓冲的字符解析器基类。 更多...
class | ByteParser
| 字节解析器。 更多...
class | Configuration
| 设置：使用 S 表达式存储外部状态。 更多...
class | ContextNode
| 上下文节点。 更多...
class | DelimitedByteParser
| 保存分隔符中间结果字节解析器。 更多...
class | Environment
| 环境。 更多...
class | EnvironmentReference
| 环境引用计数检查支持。 更多...
struct | EnvironmentSwitcher
| 环境切换器。 更多...
class | InvalidReference
| 无效引用。 更多...
class | InvalidSyntax
| 无效语法。 更多...
class | LexicalAnalyzer
| 词法分析器。 更多...
class | ListReductionFailure
| 列表规约失败。 更多...
class | ListTypeError
| 列表类型错误。 更多...
struct | NPLATag
| NPLA 元标签。 更多...
class | NPLException
| NPL 异常基类。 更多...
struct | NPLTag
| NPL 元标签。 更多...
class | ParameterMismatch
| 参数不匹配。 更多...
class | ReaderState
| 读取器状态：支持解析一个记号或列表的解析器的辅助状态。 更多...
struct | ReferenceTermOp
| 项引用函数对象操作。 更多...
class | Session
| 会话：分析组成 NPL 基本翻译单元的源代码。 更多...
class | SourcedByteParser
| 记录源代码位置的字节解析器。 更多...
struct | SourceLocation
| 源代码位置。 更多...
class | TermReference
| 项引用。 更多...
class | TypeError
| 类型错误。 更多...
class | UnescapeContext
| 反转义上下文。 更多...
class | ValueCategoryMismatch
| 值类别不匹配。 更多...

## 类型定义

using | LexemeList = list< string >
| 词素列表：待被处理为记号短字符串列表。 更多...
using | SourceName = shared_ptr< string >
| 可选的源代码名称。 更多...
using | SourceInformation = pair< SourceName, SourceLocation >
| 源代码信息。 更多...
template<class _tParser >
using | MemberParseResult = typename _tParser::ParseResult
| 成员 ParseResult 类型。 更多...
template<typename _fParse >
using | ParserClassOf = ystdex::remove_reference_t< ystdex::unwrap_ref_decay_t< _fParse > >
| 取参数类型对应的解析器类类型。 更多...
template<typename _fParse >
using | ParseResultOf = ystdex::detected_or_t< LexemeList, MemberParseResult, ParserClassOf< _fParse > >
| 取解析器结果类型。 更多...
template<typename _fParse >
using | GParserResult = const ParseResultOf< _fParse > &
| 泛型解析器结果返回类型。 更多...
using | NodeToString = function< string(const ValueNode &)>
using | IndentGenerator = function< string(size_t)>
| 生成前缀缩进的函数类型。 更多...
using | AnchorPtr = yimpl(shared_ptr< const void >)
| 锚对象指针。 更多...
using | ReducerFunctionType = ReductionStatus(ContextNode &)
| 规约器函数原型。 更多...
using | TNCIter = TermNode::const_iterator

## 枚举

enum | DepsEventType : yimpl(size_t) { DepsEventType::General, DepsEventType::Search, DepsEventType::Build, DepsEventType::Command, DepsEventType::DepsCheck, DepsEventType::Max }
enum | LexemeCategory { LexemeCategory::Symbol, LexemeCategory::Code, LexemeCategory::Data, LexemeCategory::Extended }
| 字面量类别。 更多...

enum

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

| 规约状态：某个项上的一遍规约可能的中间结果。 更多...
enum | TermTagIndices : size_t { UnqualifiedIndex = 0, UniqueIndex, NonmodifyingIndex, TemporaryIndex }
| 项标签索引：指定项标签元数据掩码的位。 更多...

## 函数

YF_API vector< string > | DecomposeMakefileDepList (std::streambuf &)
| 从内容为 GCC 兼容编译器 -MMD 选项生成的 Makefile 的流中分解路径。 更多...
YF_API vector< string > | DecomposeMakefileDepList (std::istream &)
YF_API bool | FilterMakefileDependencies (vector< string > &)
| 过滤 GCC 兼容编译器 -MMD 选项生成的 Makefile 项列表并选取依赖项。 更多...
YF_API | YB_NONNULL (1, 2) void InstallFile(const char *
| 安装文件：复制单个文件。 更多...
YF_API const char * | PDefH (void, InstallFile, const string &dst, const string &src) ImplExpr(InstallFile(dst.c_str()
YF_API const char src | c_str ())) YF_API void InstallDirectory(const string &
| 安装目录：复制目录树。 更多...
YF_API const char src const string const char const char *src | ImplExpr (InstallDirectory(string(dst), string(src))) YF_API YB_NONNULL(1
| 安装硬链接：创建硬链接，失败则安装文件。 更多...
YF_API const char src const string const char const char *src void | InstallHardLink (const char *, const char *)
| PDefH (void, InstallHardLink, const string &dst, const string &src) ImplExpr(InstallHardLink(dst.c_str()
src | c_str ())) YF_API YB_NONNULL(1
| 安装符号链接：创建文件符号链接，失败则安装文件。 更多...
src void | InstallSymbolicLink (const char *, const char *)
| PDefH (void, InstallSymbolicLink, const string &dst, const string &src) ImplExpr(InstallSymbolicLink(dst.c_str()
src void | InstallExecutable (const char *, const char *)
| PDefH (void, InstallExecutable, const string &dst, const string &src) ImplExpr(InstallExecutable(dst.c_str()
YB_ATTR_nodiscard YF_API bool | HandleBackslashPrefix (string_view, UnescapeContext &)
| 设置反斜杠转义前缀：当输入 '\' 时设置前缀为 "\\" 。 更多...
YB_ATTR_nodiscard YB_PURE yconstfn | PDefH (bool, IgnorePrefix, string_view buf, UnescapeContext &) ynothrow ImplRet(yunused(buf)
| 忽略前缀。 更多...
YB_ATTR_nodiscard YB_PURE yconstfn | YAssert (!buf.empty(), "Invalid buffer found.")
YB_ATTR_nodiscard YB_PURE yconstfn false YB_ATTR_nodiscard YF_API bool | NPLUnescape (string &, char, UnescapeContext &, char)
| NPL 转义匹配算法。 更多...
YB_ATTR_nodiscard YF_API YB_PURE char | CheckLiteral (string_view) ynothrowv
| 检查指定字符串是否为字面量。 更多...
YB_ATTR_nodiscard YB_PURE | PDefH (string_view, DeliteralizeUnchecked, string_view sv) ynothrowv ImplRet(YAssertNonnull(sv.data())
| 去除字面量边界分隔符。 更多...
YB_ATTR_nodiscard YB_PURE string_view sv ynothrowv | ImplRet (CheckLiteral(sv) !=char() ? DeliteralizeUnchecked(sv) :sv) YB_ATTR_nodiscard YF_API YB_PURE string Escape(string_view)
| 编码转义字符串：替换指定字符串中的可转义字符为转义序列。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | EscapeLiteral (string_view)
| 编码转义字符串字面量。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | EscapeXML (string_view)
| 编码 XML 字符串。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | Literalize (string_view, char='"')
| 修饰字符串为字面量。 更多...
YB_ATTR_nodiscard YB_STATELESS yconstfn | PDefH (bool, IsGraphicalDelimiter, char c) ynothrow ImplRet(c
| 判断参数是否为 NPL 图形分隔符。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | DecodeNodeIndex (const string &)
| 解码索引节点名称。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | EscapeNodeLiteral (const ValueNode &)
| 转义 NPLA 节点字面量。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | LiteralizeEscapeNodeLiteral (const ValueNode &)
| 转义 NPLA 节点字面量。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | ParseNPLANodeString (const ValueNode &)
| 解析 NPLA 节点字符串。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | DefaultGenerateIndent (size_t)
| 默认生成缩进：生成水平制表符为单位的缩进。 更多...
YF_API void | PrintIndent (std::ostream &, IndentGenerator=DefaultGenerateIndent, size_t=1)
| 打印缩进。 更多...
template<typename _func , typename _fCallable >
void | PrintContainedNodes (_func print_bound, _fCallable f)
| 打印容器边界和其中的 NPLA 节点，且在打印边界前调用前置操作。 更多...
YF_API void | PrintNode (std::ostream &, const ValueNode &, NodeToString=EscapeNodeLiteral, IndentGenerator=DefaultGenerateIndent, size_t=0)
| 打印 NPLA 节点。 更多...
YF_API bool | PrintNodeString (std::ostream &, const ValueNode &, NodeToString=EscapeNodeLiteral)
| 打印节点字符串。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | ParseNPLATermString (const TermNode &)
| 解析 NPLA 项节点字符串。 更多...
YB_ATTR_nodiscard YF_API YB_PURE ValueNode | MapNPLALeafNode (const TermNode &)
| 映射 NPLA 叶节点。 更多...
YB_ATTR_nodiscard YF_API YB_PURE TermNode | TransformToSyntaxNode (ValueNode &&)
| 变换 NPLA 语法节点为语法分析树的叶节点。 更多...
YB_ATTR_nodiscard YB_PURE | PDefH (TermNode, TransformToSyntaxNode, NodeLiteral &&nl) ImplRet(TransformToSyntaxNode(std
template<class _tNodeOrCon , typename _type , typename... _tParams>
TNIter | InsertSyntaxNode (_tNodeOrCon &&node_or_con, _type &&arg, _tParams &&... args)
template<class _tNodeOrCon >
TNIter | InsertChildSyntaxNode (_tNodeOrCon &&node_or_con, TermNode &child)
| 插入语法子节点。 更多...
template<class _tNodeOrCon >
TNIter | InsertChildSyntaxNode (_tNodeOrCon &&node_or_con, TermNode &&child)
template<class _tNodeOrCon >
TNIter | InsertChildSyntaxNode (_tNodeOrCon &&node_or_con, NodeLiteral &&nl)
YB_ATTR_nodiscard YF_API YB_PURE LexemeCategory | CategorizeBasicLexeme (string_view) ynothrowv
| 对排除扩展字面量的词素分类。 更多...
YB_ATTR_nodiscard YF_API YB_PURE LexemeCategory | CategorizeLexeme (string_view) ynothrowv
| 对词素分类。 更多...
YB_ATTR_nodiscard YF_API YB_PURE bool | IsNPLAExtendedLiteral (string_view) ynothrowv
| 判断不是非扩展字面量的词素是否为 NPLA 扩展字面量。 更多...
YB_ATTR_nodiscard YB_STATELESS yconstfn | PDefH (bool, IsNPLAExtendedLiteralNonDigitPrefix, char c) ynothrow ImplRet(c
| 判断字符是否为 NPLA 扩展字面量非数字前缀。 更多...
YB_ATTR_nodiscard YB_PURE observer_ptr< const TokenValue > | TermToNamePtr (const TermNode &)
| 访问项的值作为记号。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | TermToString (const TermNode &)
| 访问项的值并转换为字符串形式的外部表示。 更多...
YB_ATTR_nodiscard YF_API YB_PURE string | TermToStringWithReferenceMark (const TermNode &, bool)
| 访问项的值并转换为可选带有引用标记的字符串形式。 更多...
YB_ATTR_nodiscard YF_API YB_PURE TermTags | TermToTags (TermNode &)
| 访问项初始化标签。 更多...
YB_NORETURN YF_API void | ThrowListTypeErrorForInvalidType (const ystdex::type_info &, const TermNode &, bool)
| 对列表项抛出指定预期访问值的类型的异常。 更多...
YF_API void | TokenizeTerm (TermNode &term)
| 标记记号节点：递归变换节点，转换其中的词素为记号值。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< _type > | TryAccessLeaf (TermNode &term)
| 尝试访问项的指定类型对象指针。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< const _type > | TryAccessLeaf (const TermNode &term)
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< _type > | TryAccessTerm (TermNode &term)
| 尝试访问项的指定类型叶节点对象指针。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< const _type > | TryAccessTerm (const TermNode &term)
YB_ATTR_nodiscard YF_API TermNode | PrepareCollapse (TermNode &, const shared_ptr< Environment > &)
| 准备折叠项引用。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< _type > | TryAccessReferencedLeaf (TermNode &term)
| 尝试访问解析 TermReference 后的项的指定类型对象指针。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< const _type > | TryAccessReferencedLeaf (const TermNode &term)
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< _type > | TryAccessReferencedTerm (TermNode &term)
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< const _type > | TryAccessReferencedTerm (const TermNode &term)
YB_ATTR_nodiscard YF_API YB_PURE bool | IsReferenceTerm (const TermNode &)
| 判断项（的值数据成员）是否为引用项。 更多...
YB_ATTR_nodiscard YF_API YB_PURE bool | IsBoundLValueTerm (const TermNode &)
| 判断项（的值数据成员）是否表示被绑定的左值引用。 更多...
YB_ATTR_nodiscard YF_API YB_PURE bool | IsUncollapsedTerm (const TermNode &)
| 判断项（的值数据成员）是否表示未折叠的引用。 更多...
YB_ATTR_nodiscard YF_API YB_PURE bool | IsUniqueTerm (const TermNode &)
| 判断项（的值数据成员）是否表示非引用项或唯一引用。 更多...
template<typename _func , class _tTerm >
auto | 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 | CheckRegular (_tTerm &term, bool has_ref)
template<typename _type , class _tTerm >
YB_ATTR_nodiscard YB_PURE auto | AccessRegular (_tTerm &term, bool has_ref) -> yimpl(decltype(NPL::Access< _type >(term)))
| 访问项的指定类型正规值。 更多...
template<typename _type , class _tTerm >
YB_ATTR_nodiscard YB_PURE auto | ResolveRegular (_tTerm &term) -> yimpl(decltype(NPL::Access< _type >(term)))
| 访问一次解析引用值后的项的指定类型正规值。 更多...
template<typename _func , typename... _tParams>
auto | CheckedReduceWith (_func f, _tParams &&... args) -> decltype(ystdex::retry_on_cond(CheckReducible, f, yforward(args)...))
YF_API ReductionStatus | RegularizeTerm (TermNode &, ReductionStatus) ynothrow
| 按规约结果正规化项。 更多...
YF_API void | LiftTermValueOrCopy (TermNode &, TermNode &, bool)
| 提升项的值数据成员或项的值数据成员的副本。 更多...
YF_API void | LiftCollapsed (TermNode &, TermNode &, TermReference)
| 提升折叠后的项引用到指定的项。 更多...
YF_API void | MoveCollapsed (TermNode &, TermNode &)
| 提升折叠后的第二参数指定的项。 更多...
YF_API void | MoveRValueToForward (TermNode &, TermNode &)
| 提升第二参数指定的右值项作为转发的第一参数指定项中的返回值。 更多...
YF_API void | MoveRValueToReturn (TermNode &, TermNode &)
| 提升第二参数指定的右值项作为第一参数指定项中的返回值。 更多...
| PDefH (ReductionStatus, ReduceForLiftedResult, TermNode &term) ImplRet(LiftToReturn(term)
| 规约提升结果。 更多...
ReductionStatus::Retained YF_API ReductionStatus | ReduceHeadEmptyList (TermNode &) ynothrow
| 规约第一个非结尾空列表子项。 更多...
| PDefH (ReductionStatus, ReduceToValue, TermNode &term, TermNode &tm) ImplRet(MoveRValueToReturn(term
| 规约转发第二参数指定的项表示的值作为求值结果。 更多...
ReductionStatus::Retained YB_ATTR_nodiscard yconstfn YB_STATELESS | PDefH (bool, IsOverridableReductionResult, ReductionStatus r) ynothrow ImplRet(yimpl(r
| 判断参数指定的规约结果在合并中是否可被覆盖。 更多...
| yimpl (using) Reducer
| 规约器：和绑定上下文以外参数的求值遍的处理器具有等价签名的多态函数。 更多...
template<class _tAlloc , typename _tParam , typename... _tParams>
| yimpl (ystdex::exclude_self_t)< Reducer
Reducer | ToReducer (const _tAlloc &a, _tParam &&arg, _tParams &&... args)
template<typename... _tParams>
shared_ptr< Environment > | AllocateEnvironment (ContextNode &ctx, _tParams &&... args)
template<typename... _tParams>
shared_ptr< Environment > | AllocateEnvironment (TermNode &term, ContextNode &ctx, _tParams &&... args)
template<typename _type , typename... _tParams>
bool | EmplaceLeaf (Environment::BindingMap &m, string_view name, _tParams &&... args)
| 构造并向绑定目标添加叶节点值。 更多...
template<typename _type , typename... _tParams>
bool | EmplaceLeaf (Environment &env, string_view name, _tParams &&... args)
template<typename _type , typename... _tParams>
bool | EmplaceLeaf (ContextNode &ctx, string_view name, _tParams &&... args)
YB_ATTR_nodiscard | PDefH (Environment::NameResolution, ResolveName, const ContextNode &ctx, string_view id) ImplRet(YAssertNonnull(id.data())
| 解析名称：处理保留名称并查找名称。 更多...
YB_ATTR_nodiscard ctx | Resolve (ctx.GetRecordPtr(), id)) YB_ATTR_nodiscard YF_API TermNode MoveResolved(const ContextNode &
| 转移解析标识符的对象：解析名称并从环境中转移被绑定的对象。 更多...
YB_ATTR_nodiscard YF_API TermNode | ResolveIdentifier (const ContextNode &, string_view)
| 解析标识符：解析名称并折叠引用。 更多...
YB_ATTR_nodiscard YF_API pair< shared_ptr< Environment >, bool > | ResolveEnvironment (const ValueObject &)
| 解析环境。 更多...
YB_ATTR_nodiscard YF_API pair< shared_ptr< Environment >, bool > | ResolveEnvironment (const TermNode &term)
template<typename _fCurrent >
ReductionStatus | RelaySwitched (ContextNode &ctx, _fCurrent &&cur)
| 异步规约指定动作和上下文中的当前动作。 更多...
const TermTags &tags ynothrow | ImplRet (tags &~TermTags::Temporary) class YF_API TermNode
| 项节点：存储语法分析结果的值类型节点。 更多...
YB_ATTR_nodiscard YB_PURE | PDefH (bool, IsBranch, const TermNode &term) ynothrow ImplRet(!term.empty()) YB_ATTR_nodiscard YB_PURE inline PDefH(bool
| 项节点分类判断操作。 更多...
YB_ATTR_nodiscard YB_PURE const TermNode &term ynothrow | ImplRet (!(term.empty()||term.Value)) YB_ATTR_nodiscard YB_PURE inline PDefH(bool
| 判断项是否为空节点。 更多...
YB_ATTR_nodiscard YB_PURE const TermNode &term ynothrow const TermNode &term ynothrow | ImplRet (!term) YB_ATTR_nodiscard YB_PURE inline PDefH(bool
| 判断项是否为扩展列表节点。 更多...
YB_ATTR_nodiscard YB_PURE const TermNode &term ynothrow const TermNode &term ynothrow const TermNode &term ynothrow | ImplRet (!(term.empty() &&term.Value)) YB_ATTR_nodiscard YB_PURE inline PDefH(bool
| 判断项是否为叶节点。 更多...
YB_ATTR_nodiscard YB_PURE const TermNode &term ynothrow const TermNode &term ynothrow const TermNode &term ynothrow const TermNode &term ynothrow | ImplRet (term.empty()) YB_ATTR_nodiscard YB_PURE inline PDefH(bool
| 判断项是否为列表节点。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE const TermNode &term ynothrow const TermNode &term ynothrow const TermNode &term ynothrow const TermNode &term ynothrow const TermNode &term ynothrow ImplRet(!term.Value) using YSLib YB_ATTR_nodiscard YB_PURE _type & | Access (TermNode &term)
template<typename _type >
YB_ATTR_nodiscard YB_PURE const _type & | Access (const TermNode &term)
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< _type > | AccessPtr (TermNode &term) ynothrow
template<typename _type >
YB_ATTR_nodiscard YB_PURE observer_ptr< const _type > | AccessPtr (const TermNode &term) ynothrow
| PDefH (void, AssertBranch, const TermNode &term, const char *msg="Invalid term found.") ynothrowv ImplExpr(yunused(term)
| 断言枝节点。 更多...
| yunused (msg)
| YAssert (IsBranch(term), msg)) template< typename... _tParam
| 创建项节点。 更多...
typename _tParams YB_ATTR_nodiscard YB_PURE ystdex::enable_if_t< ystdex::not_< ystdex::cond_or_t< ystdex::bool_<(sizeof...(_tParams) >=1)>, ystdex::false_, std::is_convertible, ystdex::decay_t< _tParams >..., TermNode::allocator_type > >::value, TermNode > | AsTermNode (_tParams &&... args)
template<typename... _tParams>
YB_ATTR_nodiscard YB_PURE TermNode | AsTermNode (TermNode::allocator_type a, _tParams &&... args)
YB_ATTR_nodiscard YB_PURE | PDefH (ValueObject, GetValueOf, observer_ptr< const TermNode > p_term) ImplRet(ystdex
| 根据节点和节点容器创建操作设置目标节点的值或子节点。 更多...
template<typename _fCallable , class _tNode >
void | TraverseSubnodes (_fCallable f, const _tNode &node)
| 遍历子节点。 更多...
template<typename _type >
YB_ATTR_nodiscard YB_PURE bool | HasValue (const TermNode &term, const _type &x)
| 检查项节点是否具有指定的值。 更多...
template<class _type , yimpl(typename=ystdex::enable_if_convertible_t< const _type &, const LexemeList::value_type & >) >
YB_ATTR_nodiscard YB_STATELESS const _type & | ToLexeme (const _type &val) ynothrow
| 转换参数为词素。 更多...
YB_ATTR_nodiscard YB_PURE | PDefH (const string &, ToLexeme, const SourcedByteParser::ParseResult::value_type &val) ynothrow ImplRet(val.second) struct LexemeTokenizer
| 词素标记器：转换输入为以词素为作为值数据成员的节点。 更多...
std::ostream & | operator<< (std::ostream &os, const Configuration &conf)
std::istream & | operator>> (std::istream &is, Configuration &conf)
void | InstallFile (const char *dst, const char *src)
void | InstallDirectory (const string &dst, const string &src)
string | Escape (string_view sv)
LexemeList | Decompose (string_view src, LexemeList::allocator_type a)
| ImplDeDtor (NPLException) ImplDeDtor(TypeError) ImplDeDtor(ValueCategoryMismatch) ImplDeDtor(ListTypeError) ImplDeDtor(ListReductionFailure) ImplDeDtor(InvalidSyntax) ImplDeDtor(ParameterMismatch) ArityMismatch
| ImplDeDtor (ArityMismatch) BadIdentifier
| ImplDeDtor (BadIdentifier) ImplDeDtor(InvalidReference) LexemeCategory CategorizeBasicLexeme(string_view id) ynothrowv
pair< TermReference, bool > | Collapse (TermReference ref)
bool | CheckReducible (ReductionStatus status)
void | LiftOtherOrCopy (TermNode &term, TermNode &tm, bool move)
void | LiftTermOrCopy (TermNode &term, TermNode &tm, bool move)
void | LiftToReference (TermNode &term, TermNode &tm)
void | LiftToReturn (TermNode &term)
ReductionStatus | ReduceBranchToList (TermNode &term) ynothrowv
ReductionStatus | ReduceBranchToListValue (TermNode &term) ynothrowv
ReductionStatus | ReduceToReference (TermNode &term, TermNode &tm, ResolvedTermReferencePtr p_ref)
ReductionStatus | ReduceToReferenceAt (TermNode &term, TermNode &tm, ResolvedTermReferencePtr p_ref)
| ImplDeDtor (Environment) void Environment
void | swap (ContextNode &x, ContextNode &y) ynothrow
TermNode | MoveResolved (const ContextNode &ctx, string_view id)
void | swap (TermNode &x, TermNode &y) ynothrowv

## 变量

YF_API const char src const string | InstallDirectory
YF_API const char src const string const char * | dst
YB_ATTR_nodiscard YB_PURE | Deliteralize
YB_ATTR_nodiscard YB_STATELESS yconstfn | NPLATag
YB_ATTR_nodiscard YB_PURE PDefH(TermNode &, ReferenceTerm, TermNode &term) ynoexcept_spec(std YB_ATTR_nodiscard YB_PURE yconstfn | IsMovable
YB_ATTR_nodiscard YB_PURE PDefH(TermNode &, ReferenceTerm, TermNode &term) ynoexcept_spec(std YB_ATTR_nodiscard YB_PURE yconstfn const TermReference &ref ynothrow | 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 | LiftTermOrCopy (TermNode &, TermNode &, bool)
| 提升项：设置项的内容为参数指定的项或值。 更多...
PDefH(void, LiftTermRef, TermNode &term, const TermNode &tm) ImplExpr(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 | get ()
PDefH(void, LiftTermRef, TermNode &term, const TermNode &tm) ImplExpr(NPL ref move ref move YF_API void | LiftToReturn (TermNode &)
| 提升项作为返回值。 更多...
PDefH(void, LiftSubtermsToReturn, TermNode &term) ImplExpr(std YF_API ReductionStatus | ReduceBranchToListValue (TermNode &) ynothrowv
| 对每个子项提升项的值数据成员可能包含的引用值。 更多...
PDefH(ReductionStatus, ReduceToList, TermNode &term) ynothrow ImplRet(IsBranchedList(term) ? ReduceBranchToList(term) YF_API ReductionStatus | ReduceToReferenceAt (TermNode &, TermNode &, ResolvedTermReferencePtr)
| 规约为列表：对分支列表节点移除第一个子项，保留余下的子项作为列表。 更多...
| tm
| _tParam
YB_ATTR_nodiscard ctx | string_view
| GetLValueTagsOf
YB_ATTR_nodiscard YB_PURE | IsBranchedList
YB_ATTR_nodiscard YB_PURE const TermNode &term ynothrow | IsEmpty
YB_ATTR_nodiscard YB_PURE const TermNode &term ynothrow const TermNode &term ynothrow | IsExtendedList
YB_ATTR_nodiscard YB_PURE const TermNode &term ynothrow const TermNode &term ynothrow const TermNode &term ynothrow | IsLeaf
YB_ATTR_nodiscard YB_PURE const TermNode &term ynothrow const TermNode &term ynothrow const TermNode &term ynothrow const TermNode &term ynothrow | IsList

## 类型定义说明

## ◆ AnchorPtr

using NPL::AnchorPtr = typedef yimpl(shared_ptr<const void>)

锚对象指针。

注解
  满足可复制和转移且不抛出异常。

自从
  build 847

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

## ◆ GParserResult

template<typename _fParse >

using NPL::GParserResult = typedef const ParseResultOf<_fParse>&

泛型解析器结果返回类型。

SContext 解析器的成员函数 GetResult 的返回类型。

在文件 Lexical.h 第 457 行定义.

## ◆ IndentGenerator

using NPL::IndentGenerator = typedef function<string(size_t)>

生成前缀缩进的函数类型。

自从
  build 597

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

## ◆ LexemeList

using NPL::LexemeList = typedef list<string>

词素列表：待被处理为记号短字符串列表。

自从
  build 889

词素列表是词素的序列，支持高效的 splice 操作以便分阶段分析。 语法分析可使用其它形式的列表，其元素可以包含词素或其它附加信息。

在文件 Lexical.h 第 75 行定义.

## ◆ NodeToString

using NPL::NodeToString = typedef function<string(const ValueNode&)>

自从
  build 597

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

## ◆ ParserClassOf

template<typename _fParse >

using NPL::ParserClassOf = typedef ystdex::remove_reference_t<ystdex::unwrap_ref_decay_t<_fParse> >

取参数类型对应的解析器类类型。

注解
  结果应为 SContext 解析器。

参见
  Lexical Parsers

在文件 Lexical.h 第 438 行定义.

## ◆ ParseResultOf

template<typename _fParse >

using NPL::ParseResultOf = typedef ystdex::detected_or_t<LexemeList, MemberParseResult, ParserClassOf<_fParse> >

取解析器结果类型。

若参数指定的解析器类型具有 ParseResult 成员类型，则作为结果类型； 否则，使用 LexemeList 作为结果类型。

在文件 Lexical.h 第 448 行定义.

## ◆ ReducerFunctionType

using NPL::ReducerFunctionType = typedef ReductionStatus(ContextNode&)

规约器函数原型。

自从
  build 896

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

## ◆ SourceInformation

using NPL::SourceInformation = typedef pair<SourceName, SourceLocation>

源代码信息。

在文件 Lexical.h 第 109 行定义.

## ◆ SourceName

using NPL::SourceName = typedef shared_ptr<string>

可选的源代码名称。

自从
  build 891

在文件 Lexical.h 第 80 行定义.

## ◆ TNCIter

using NPL::TNCIter = typedef TermNode::const_iterator

自从
  build 674

在文件 SContext.h 第 503 行定义.

## 枚举类型说明

## ◆ DepsEventType

enum NPL::DepsEventType : yimpl(size_t)

strong

自从
  build 624

枚举值
General |
Search |
Build |
Command |
DepsCheck |
Max |

在文件 Dependency.h 第 41 行定义.

## ◆ LexemeCategory

enum NPL::LexemeCategory

strong

字面量类别。

自从
  build 734

枚举值
Symbol | 符号：非字面量。
Code | 代码字面量。
Data | 数据字面量。
Extended | 扩展字面量：由 NPLA 定义的其它字面量类别。

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

## ◆ ReductionStatus

enum NPL::ReductionStatus : yimpl(size_t)

strong

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

注解
  实现的编码未指定，编码和规约时的判断性能相关。

自从
  build 730

枚举值

Partial

部分规约：需要继续进行规约。

注解
  一般仅用于异步规约。

自从
  build 841

Neutral

中立规约：规约成功终止，且未指定是否需要保留子项。

注解
  一般用于不改变被规约项是否为空项的规约遍。

自从
  build 869

Clean

纯值规约：规约成功终止，且要求最终清理子项。

自从
  build 841

Retained

非纯值规约：规约成功终止，且需要保留子项。

自从
  build 757

Regular

已取得正规表示的规约：规约成功且已保证正规化，不指定是否需要保留子项。

自从
  build 865

Retrying

重规约。

自从
  build 757

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

## ◆ TermTagIndices

enum NPL::TermTagIndices : size_t

项标签索引：指定项标签元数据掩码的位。

自从
  build 857

枚举值
UnqualifiedIndex |
UniqueIndex |
NonmodifyingIndex |
TemporaryIndex |

在文件 SContext.h 第 93 行定义.

## 函数说明

## ◆ Access() [1/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE const _type& NPL::Access | ( | const TermNode & | term | ) |

inline

自从
  build 854

在文件 SContext.h 第 562 行定义.

引用了 NPL::A1::Internals::term.

## ◆ Access() [2/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE const TermNode& term ynothrow const TermNode& term ynothrow const TermNode& term ynothrow const TermNode& term ynothrow const TermNode& term ynothrow ImplRet (!term.Value) using YSLib YB_ATTR_nodiscard YB_PURE _type& NPL::Access | ( | TermNode & | term | ) |

inline

自从
  build 853
  build 854

在文件 SContext.h 第 555 行定义.

引用了 NPL::A1::Internals::term.

被这些函数引用 NPL::A1::ReduceCombinedBranch(), NPL::A1::SetupDefaultInterpretation() , 以及 NPL::A1::SetupTailOperatorName().

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

## ◆ AccessPtr() [1/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE observer_ptr<const _type> NPL::AccessPtr | ( | const TermNode & | term | ) |

inline

自从
  build 852

在文件 SContext.h 第 579 行定义.

引用了 NPL::A1::Internals::term.

## ◆ AccessPtr() [2/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE observer_ptr<_type> NPL::AccessPtr | ( | TermNode & | term | ) |

inline

自从
  build 852

在文件 SContext.h 第 572 行定义.

引用了 NPL::A1::Internals::term.

被这些函数引用 NPL::A1::Forms::LoadModule_SHBuild().

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

## ◆ AccessRegular()

template<typename _type , class _tTerm >

YB_ATTR_nodiscard YB_PURE auto NPL::AccessRegular | ( | _tTerm & | term,
|  | bool | has_ref
| ) |  | -> yimpl(decltype(NPL::Access<_type>(term)))

inline

访问项的指定类型正规值。

参见
  ThrowListTypeErrorForInvalidType

以 NPL::Access 访问调用 NPL::CheckRegular 检查后的项。

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

引用了 NPL::A1::Internals::term.

被这些函数引用 NPL::A1::Forms::CallRegularUnaryAs().

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

## ◆ AllocateEnvironment() [1/2]

template<typename... _tParams>

shared_ptr<Environment> NPL::AllocateEnvironment | ( | ContextNode & | ctx,
|  | _tParams &&... | args
| ) |  |

inline

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

引用了 CHRLib::args , 以及 yforward.

被这些函数引用 AllocateEnvironment(), NPL::A1::Forms::Apply(), NPL::A1::Forms::MakeEnvironment() , 以及 NPL::ContextNode::SwitchToFreshEnvironment().

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

## ◆ AllocateEnvironment() [2/2]

template<typename... _tParams>

shared_ptr<Environment> NPL::AllocateEnvironment | ( | TermNode & | term,
|  | ContextNode & | ctx,
|  | _tParams &&... | args
| ) |  |

inline

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

引用了 YSLib::a, AllocateEnvironment(), CHRLib::args, NPL::A1::Internals::term, YAssert(), yforward , 以及 yunused().

函数调用图:

## ◆ AsTermNode() [1/2]

typename _tParams YB_ATTR_nodiscard YB_PURE ystdex::enable_if_t<ystdex::not_<ystdex::cond_or_t<ystdex::bool_< (sizeof...(_tParams) >= 1)>, ystdex::false_, std::is_convertible, ystdex::decay_t<_tParams>..., TermNode::allocator_type> >::value, TermNode> NPL::AsTermNode | ( | _tParams &&... | args | ) |

inline

在文件 SContext.h 第 601 行定义.

引用了 CHRLib::args, YSLib::NoContainer , 以及 yforward.

被这些函数引用 NPL::A1::SeparatorTransformer::AddRange(), EmplaceLeaf(), NPL::A1::Forms::MakeEncapsulationType(), NPL::A1::SeparatorTransformer::operator()(), NPL::A1::ParseLeaf(), NPL::A1::ParseLeafWithSourceInformation(), PDefH(), PrepareCollapse(), NPL::SContext::Reduce(), NPL::A1::Internals::ReduceForCombinerRef() , 以及 TransformToSyntaxNode().

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

## ◆ AsTermNode() [2/2]

template<typename... _tParams>

YB_ATTR_nodiscard YB_PURE TermNode NPL::AsTermNode | ( | TermNode::allocator_type | a,
|  | _tParams &&... | args
| ) |  |

inline

自从
  build 891

在文件 SContext.h 第 608 行定义.

引用了 YSLib::a, CHRLib::args, YSLib::NoContainer , 以及 yforward.

## ◆ c_str() [1/2]

src NPL::c_str | ( |  | ) | const &

安装目录：复制目录树。

安装可执行文件：安装文件并按需设置可执行权限。

自从
  build 659

待办事项:
  设置 chmod +x 或 NTFS 可执行权限。

自从
  build 659
  build 758

打开指定路径的文件作为 NPL 输入流。

注解
  编码假定为 UTF-8 。允许可选的 BOM 。以共享只读方式打开。

自从
  build 839
  build 899

打开指定路径的文件作为 NPL 输入流并在上下文设置名称。

在 REPL 上下文中加载指定名称的外部翻译单元。

注解
  使用跳板，不直接改变上下文中的续延。

参见
  Reduce

自从
  build 899

注解
  以参数指定的项的第一个子项作为 string 类型的名称指定翻译单元。

规约加载外部翻译单元。

参见
  OpenUnique

异步规约加载外部翻译单元。

参见
  ReduceToLoadExternal

加载代码调用。

自从
  build 889

加载代码作为模块。

返回
  作为环境模块的环境对象强引用。

后置条件
  返回值非空，指定冻结的环境。

自从
  build 838

前置条件
  间接断言：模块名称字符串的数据指针非空。

加载模块为变量，若已存在则忽略。

自从
  build 871

加载模块为变量，若已存在抛出异常。

异常

  BadIdentifier | 变量绑定已存在。

自从
  build 867

注解
  支持的具体语法形式参考 Documentation::NPL 。

自从
  build 839

加载 NPLA1 基础上下文。

加载序列中缀分隔符和 NPLA1 基础环境使用的公共语法形式。 支持的语法形式包括预定义对象、基本操作和定义在基础环境中的派生操作。 其中，派生操作包括基本派生操作和核心库函数。 加载的基础环境被冻结。

前置条件
  已加载基础 NPLA1 上下文或等价方式初始化。

异常

  NPLException | 异常中立：初始化失败。

警告
  若不满足加载的前置条件，可能调用失败，抛出异常。

参见
  LoadGroundContext

加载环境模块。

前置条件
  当前实现：求值合并子调用前已加载初始化字符串模块 std.strings 。

参见
  LoadModule_std_strings

加载扩展的环境库操作。

加载代理求值模块。

注解
  当前实现：加载时占用当前环境的实现保留变量 __ 。

自从
  build 856

加载 promise 等类型和延迟求值等操作。

加载字符串模块。

加载字符串库操作。

加载输入/输出模块。

加载输入/输出库操作。

加载系统模块。

前置条件
  当前实现：求值合并子调用前已加载字符串模块或等价方式初始化为模块 std.strings 。

参见
  LoadModule_std_strings

加载系统库操作。

加载 SHBuild 使用的内部模块。

加载 SHBuild 自举使用的其它公共语法形式。 用于内部使用。加载的环境的具体内容未指定。

加载 NPLA1 基础上下文和标准模块。

参见
  LoadGroundContext
  LoadModule_std_environments
  LoadModule_std_io
  LoadModule_std_promises
  LoadModule_std_strings
  LoadModule_std_system

自从
  build 898

调用 LoadGroundContext 并加载标准库模块。 加载的标准库模块名称符合 NPLA1 参考实现扩展环境约定。 模块初始化调用的顺序未指定，但满足必要的内部逻辑顺序。 加载的标准库模块被冻结。

在文件 Dependency.h 第 140 行定义.

被这些函数引用 YSLib::Drawing::ImagePages::AdjustOffset(), NPL::A1::Forms::CallSystem(), YSLib::IO::ClassifyNode(), YSLib::IO::ClearTree(), YSLib::IO::CopyTree(), platform::CreateHardLink(), platform::CreateSymbolicLink(), YSLib::FetchMIMEBiMapping(), YSLib::Drawing::FontCache::FontCache(), platform::HaveSameContents(), InstallDirectory(), platform::IsDirectory(), YSLib::LoadConfiguration(), YReader::ShlTextReader::LoadFile(), YSLib::Drawing::MultiBitmapData::LockPage(), YSLib::UI::ParseRect(), platform::ReadLink(), NPL::A1::ReduceCombinedBranch(), NPL::A1::ReduceCombinedReferent(), YSLib::Drawing::ImagePages::Resize(), ResolveEnvironment(), YSLib::SaveConfiguration(), platform::SetEnvironmentVariable(), ThrowListTypeErrorForInvalidType(), NPL::A1::ThrowValueCategoryErrorForFirstArgument(), platform::uaccess(), platform::ufopen(), platform::uopen(), platform::upopen(), platform::usystem(), YSLib::UI::BorderResizer::Wrap(), YSLib::IO::YB_NONNULL(), YSLib::Drawing::Zoom() , 以及 YSLib::Drawing::ImagePages::ZoomTo().

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

## ◆ c_str() [2/2]

src NPL::c_str | ( |  | ) |

安装符号链接：创建文件符号链接，失败则安装文件。

安装可执行文件：安装文件并按需设置可执行权限。

自从
  build 659

待办事项:
  设置 chmod +x 或 NTFS 可执行权限。

自从
  build 659
  build 758

打开指定路径的文件作为 NPL 输入流。

注解
  编码假定为 UTF-8 。允许可选的 BOM 。以共享只读方式打开。

自从
  build 839
  build 899

打开指定路径的文件作为 NPL 输入流并在上下文设置名称。

在 REPL 上下文中加载指定名称的外部翻译单元。

注解
  使用跳板，不直接改变上下文中的续延。

参见
  Reduce

自从
  build 899

注解
  以参数指定的项的第一个子项作为 string 类型的名称指定翻译单元。

规约加载外部翻译单元。

参见
  OpenUnique

异步规约加载外部翻译单元。

参见
  ReduceToLoadExternal

加载代码调用。

自从
  build 889

加载代码作为模块。

返回
  作为环境模块的环境对象强引用。

后置条件
  返回值非空，指定冻结的环境。

自从
  build 838

前置条件
  间接断言：模块名称字符串的数据指针非空。

加载模块为变量，若已存在则忽略。

自从
  build 871

加载模块为变量，若已存在抛出异常。

异常

  BadIdentifier | 变量绑定已存在。

自从
  build 867

注解
  支持的具体语法形式参考 Documentation::NPL 。

自从
  build 839

加载 NPLA1 基础上下文。

加载序列中缀分隔符和 NPLA1 基础环境使用的公共语法形式。 支持的语法形式包括预定义对象、基本操作和定义在基础环境中的派生操作。 其中，派生操作包括基本派生操作和核心库函数。 加载的基础环境被冻结。

前置条件
  已加载基础 NPLA1 上下文或等价方式初始化。

异常

  NPLException | 异常中立：初始化失败。

警告
  若不满足加载的前置条件，可能调用失败，抛出异常。

参见
  LoadGroundContext

加载环境模块。

前置条件
  当前实现：求值合并子调用前已加载初始化字符串模块 std.strings 。

参见
  LoadModule_std_strings

加载扩展的环境库操作。

加载代理求值模块。

注解
  当前实现：加载时占用当前环境的实现保留变量 __ 。

自从
  build 856

加载 promise 等类型和延迟求值等操作。

加载字符串模块。

加载字符串库操作。

加载输入/输出模块。

加载输入/输出库操作。

加载系统模块。

前置条件
  当前实现：求值合并子调用前已加载字符串模块或等价方式初始化为模块 std.strings 。

参见
  LoadModule_std_strings

加载系统库操作。

加载 SHBuild 使用的内部模块。

加载 SHBuild 自举使用的其它公共语法形式。 用于内部使用。加载的环境的具体内容未指定。

加载 NPLA1 基础上下文和标准模块。

参见
  LoadGroundContext
  LoadModule_std_environments
  LoadModule_std_io
  LoadModule_std_promises
  LoadModule_std_strings
  LoadModule_std_system

自从
  build 898

调用 LoadGroundContext 并加载标准库模块。 加载的标准库模块名称符合 NPLA1 参考实现扩展环境约定。 模块初始化调用的顺序未指定，但满足必要的内部逻辑顺序。 加载的标准库模块被冻结。

在文件 Dependency.h 第 140 行定义.

引用了 CHRLib::f(), NPL::ContextNode::GetRecordRef(), ystdex::invoke(), NPL::A1::Forms::LoadGroundContext(), NPL::A1::Forms::LoadModule_SHBuild(), NPL::A1::Forms::LoadModule_std_environments(), NPL::A1::Forms::LoadModule_std_io(), NPL::A1::Forms::LoadModule_std_promises(), NPL::A1::Forms::LoadModule_std_strings(), NPL::A1::Forms::LoadModule_std_system(), NPL::A1::Forms::LoadStandardContext(), NPL::A1::OpenFile(), NPL::A1::OpenUnique(), NPL::A1::PreloadExternal(), NPL::A1::ReduceToLoadExternal(), NPL::A1::RelayToLoadExternal(), NPL::ContextNode::ShareRecord, string_view, NPL::ContextNode::WeakenRecord, YB_ATTR_nodiscard, YB_NONNULL(), YF_API , 以及 yforward.

函数调用图:

## ◆ CategorizeBasicLexeme()

YB_ATTR_nodiscard YF_API YB_PURE LexemeCategory NPL::CategorizeBasicLexeme | ( | string_view |  | ) |

对排除扩展字面量的词素分类。

自从
  build 770

参见
  LexemeCategory

前置条件
  断言：字符串参数的数据指针非空。

返回
  判断的非扩展字面量分类。

注解
  空字符串和扩展字面量视为非字面量。

被这些函数引用 CategorizeLexeme(), NPL::A1::ParseLeaf() , 以及 NPL::A1::ParseLeafWithSourceInformation().

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

## ◆ CategorizeLexeme()

LexemeCategory NPL::CategorizeLexeme | ( | string_view | id | ) |

对词素分类。

参见
  CategorizeBasicLexeme

在文件 NPLA.cpp 第 532 行定义.

引用了 CategorizeBasicLexeme(), Extended, IsNPLAExtendedLiteral() , 以及 Symbol.

函数调用图:

## ◆ CheckedReduceWith()

template<typename _func , typename... _tParams>

auto NPL::CheckedReduceWith | ( | _func | f,
|  | _tParams &&... | args
| ) |  | -> decltype(ystdex::retry_on_cond(CheckReducible, f, yforward(args)...))

参见
  CheckReducible

自从
  build 841

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

引用了 CHRLib::args, CheckReducible(), CHRLib::f(), ystdex::retry_on_cond() , 以及 yforward.

函数调用图:

## ◆ CheckLiteral()

char NPL::CheckLiteral | ( | string_view | sv | ) |

检查指定字符串是否为字面量。

前置条件
  断言：字符串参数的数据指针非空。

自从
  build 659

返回
  若为字面量（首尾字符都为 '\'' 或 '"' 之一），则为首字符，否则为 char() 。

在文件 Lexical.cpp 第 147 行定义.

引用了 CHRLib::c, ystdex::get_quote_mark_nonstrict() , 以及 YAssertNonnull.

被这些函数引用 EscapeLiteral(), ImplDeDtor(), Literalize() , 以及 NPL::A1::Forms::LoadModule_std_system().

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

## ◆ CheckReducible()

bool NPL::CheckReducible | ( | ReductionStatus | status | ) |

在文件 NPLA.cpp 第 665 行定义.

引用了 Clean, Neutral, Partial, Retained, Retrying, platform::Descriptions::Warning, YB_UNLIKELY , 以及 YTraceDe.

被这些函数引用 CheckedReduceWith(), NPL::A1::EvaluateLeafToken(), NPL::A1::ParseLeaf(), NPL::A1::ParseLeafWithSourceInformation() , 以及 NPL::A1::ReduceLeafToken().

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

## ◆ CheckRegular()

template<typename _type , class _tTerm >

void NPL::CheckRegular | ( | _tTerm & | term,
|  | bool | has_ref
| ) |  |

异常

  ListTypeError | 异常中立：项为列表项。
  bad_any_cast | 异常中立：非列表项类型检查失败。

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

引用了 IsList, NPL::A1::Internals::term, ThrowListTypeErrorForInvalidType() , 以及 YB_UNLIKELY.

函数调用图:

## ◆ Collapse()

pair<TermReference, bool> NPL::Collapse | ( | TermReference | ref | ) |

related

在文件 NPLA.cpp 第 614 行定义.

引用了 platform::p , 以及 ystdex::ref().

被这些函数引用 LiftCollapsed() , 以及 MoveCollapsed().

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

## ◆ DecodeNodeIndex()

string NPL::DecodeNodeIndex | ( | const string & | name | ) |

解码索引节点名称。

返回
  解码后的名称。

自从
  build 852

参见
  YSLib::DecodeIndex
  std::to_string

若存在解码成功的索引，则结果为其十进制表示；否则，结果同未解码的节点名称。

在文件 NPLA.cpp 第 54 行定义.

引用了 CatchIgnore, YSLib::DecodeIndex(), ystdex::make_string_view(), NPL::A1::name, ystdex::to_string() , 以及 TryRet.

被这些函数引用 PrintNode().

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

## ◆ Decompose()

LexemeList NPL::Decompose | ( | string_view | src,
|  | LexemeList::allocator_type | a
| ) |  |

在文件 Lexical.cpp 第 299 行定义.

引用了 YSLib::a, dst, CHRLib::e, ystdex::split_l(), YSLib::Drawing::src, ystdex::trim() , 以及 YAssertNonnull.

被这些函数引用 NPL::DelimitedByteParser::DecomposeString().

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

## ◆ DecomposeMakefileDepList() [1/2]

vector< string > NPL::DecomposeMakefileDepList | ( | std::istream & | is | ) |

自从
  build 623

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

引用了 ystdex::call_value_or() , 以及 DecomposeMakefileDepList().

函数调用图:

## ◆ DecomposeMakefileDepList() [2/2]

vector< string > NPL::DecomposeMakefileDepList | ( | std::streambuf & | sb | ) |

从内容为 GCC 兼容编译器 -MMD 选项生成的 Makefile 的流中分解路径。

自从
  build 742

在文件 Dependency.cpp 第 71 行定义.

引用了 YSLib::Text::buf, CHRLib::c, YSLib::i, NPL::UnescapeContext::Length, YSLib::YAssert(), yunseq , 以及 yunused.

被这些函数引用 DecomposeMakefileDepList().

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

## ◆ DefaultGenerateIndent()

string NPL::DefaultGenerateIndent | ( | size_t | n | ) |

默认生成缩进：生成水平制表符为单位的缩进。

在文件 NPLA.cpp 第 83 行定义.

## ◆ EmplaceLeaf() [1/3]

template<typename _type , typename... _tParams>

bool NPL::EmplaceLeaf | ( | ContextNode & | ctx,
|  | string_view | name,
|  | _tParams &&... | args
| ) |  |

inline

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

引用了 CHRLib::args, NPL::ContextNode::GetRecordRef(), NPL::A1::name , 以及 yforward.

函数调用图:

## ◆ EmplaceLeaf() [2/3]

template<typename _type , typename... _tParams>

bool NPL::EmplaceLeaf | ( | Environment & | env,
|  | string_view | name,
|  | _tParams &&... | args
| ) |  |

inline

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

引用了 CHRLib::args, NPL::Environment::Bindings, NPL::A1::name , 以及 yforward.

## ◆ EmplaceLeaf() [3/3]

template<typename _type , typename... _tParams>

bool NPL::EmplaceLeaf | ( | Environment::BindingMap & | m,
|  | string_view | name,
|  | _tParams &&... | args
| ) |  |

inline

构造并向绑定目标添加叶节点值。

返回
  对应的值在构造前不存在。

前置条件
  断言：第二参数的数据指针非空。

自从
  build 838

设置被绑定对象的值数据成员并清空子项。 可访问 Environment::Bindings 、Environment 或 ContextNode 类型中指定名称的绑定。 因为直接替换被绑定对象，不需要检查目标是否和 TermNode 的正规表示一致。

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

引用了 CHRLib::args, AsTermNode(), ystdex::map< _tKey, _tMapped, _fComp, _tAlloc >::get_allocator(), ystdex::insert_or_assign(), NPL::A1::name, YAssertNonnull , 以及 yforward.

函数调用图:

## ◆ Escape()

string NPL::Escape | ( | string_view | sv | ) |

在文件 Lexical.cpp 第 160 行定义.

引用了 CHRLib::c, YAssertNonnull , 以及 yunseq.

被这些函数引用 EscapeLiteral().

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

## ◆ EscapeLiteral()

string NPL::EscapeLiteral | ( | string_view | sv | ) |

编码转义字符串字面量。

返回
  若参数是字符串字面量时转义其中的内容，否则为原串。

注解
  使用 Escape 转义。
  若转义后最后一个字符为 '\' 则添加一个 '\' 以避免转义末尾分隔符。

参见
  LexicalAnalyzer

在文件 Lexical.cpp 第 234 行定义.

引用了 CHRLib::c, CheckLiteral(), Escape(), ystdex::get_mid() , 以及 ystdex::quote().

被这些函数引用 EscapeNodeLiteral() , 以及 PrintNode().

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

## ◆ EscapeNodeLiteral()

string NPL::EscapeNodeLiteral | ( | const ValueNode & | node | ) |

转义 NPLA 节点字面量。

返回
  调用 EscapeLiteral 转义访问字符串的结果。

异常

  bad_any_cast | 异常中立：由 NPL::Access 抛出。

自从
  build 597

在文件 NPLA.cpp 第 64 行定义.

引用了 EscapeLiteral().

被这些函数引用 LiteralizeEscapeNodeLiteral().

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

## ◆ EscapeXML()

string NPL::EscapeXML | ( | string_view | sv | ) |

编码 XML 字符串。

参见
  http://www.w3.org/TR/2006/REC-xml11-20060816/#charsets 。

允许 XML 1.1 字符，仅对空字符使用 YTraceDe 进行警告。 仅对 XML 1.0 和 XML 1.1 规定的有条件使用字符 `&` 、 `<` 和 `>` 生成转义序列。

在文件 Lexical.cpp 第 246 行定义.

引用了 CHRLib::c, platform::Descriptions::Warning, YAssertNonnull , 以及 YTraceDe.

被这些函数引用 NPL::SXML::ConvertStringNode().

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

## ◆ FilterMakefileDependencies()

bool NPL::FilterMakefileDependencies | ( | vector< string > & | lst | ) |

过滤 GCC 兼容编译器 -MMD 选项生成的 Makefile 项列表并选取依赖项。

返回
  是否具有冒号项且移除被依赖项和冒号项后非空。

自从
  build 623

在文件 Dependency.cpp 第 153 行定义.

## ◆ HandleBackslashPrefix()

bool NPL::HandleBackslashPrefix | ( | string_view | buf,
|  | UnescapeContext & | uctx
| ) |  |

设置反斜杠转义前缀：当输入 '\' 时设置前缀为 "\\" 。

自从
  build 886

前置条件
  断言：第一参数的数据指针非空。

参见
  LexicalAnalyzer

在文件 Lexical.cpp 第 36 行定义.

引用了 YSLib::Text::buf, NPL::UnescapeContext::Length, NPL::UnescapeContext::Start, YAssert() , 以及 yunseq.

函数调用图:

## ◆ HasValue()

template<typename _type >

YB_ATTR_nodiscard YB_PURE bool NPL::HasValue | ( | const TermNode & | term,
|  | const _type & | x
| ) |  |

inline

检查项节点是否具有指定的值。

自从
  build 753

在文件 SContext.h 第 708 行定义.

引用了 NPL::A1::Internals::term , 以及 x.

## ◆ ImplDeDtor() [1/4]

NPL::ImplDeDtor | ( | ArityMismatch |  | ) |

在文件 NPLA.cpp 第 500 行定义.

## ◆ ImplDeDtor() [2/4]

NPL::ImplDeDtor | ( | BadIdentifier |  | ) |

在文件 NPLA.cpp 第 511 行定义.

引用了 CHRLib::c, CheckLiteral(), Code, ystdex::cpp2017::data(), Data, Symbol , 以及 YAssertNonnull.

函数调用图:

## ◆ ImplDeDtor() [3/4]

NPL::ImplDeDtor | ( | Environment |  | ) |

在文件 NPLA.cpp 第 907 行定义.

引用了 NPL::Environment::CheckParent(), NPL::Environment::ThrowForInvalidType(), ystdex::type_id(), YSLib::vo , 以及 YB_UNLIKELY.

函数调用图:

## ◆ ImplDeDtor() [4/4]

NPL::ImplDeDtor | ( | NPLException |  | ) |

在文件 NPLA.cpp 第 474 行定义.

## ◆ ImplExpr()

YF_API const char src const string const char const char* src NPL::ImplExpr | ( | InstallDirectory(string(dst), string(src)) |  | ) |

安装硬链接：创建硬链接，失败则安装文件。

注解
  在创建链接前首先删除文件。

异常

  std::system_error | 由 IO::Remove 抛出的除文件不存在外的错误。

注解
  非强异常安全：删除文件成功但创建链接失败时，不重新创建原有的链接。

参见
  IO::Remove

异常

  std::invalid_argument | 安装前发现源是有效的目录。

自从
  build 659

## ◆ ImplRet() [1/6]

YB_ATTR_nodiscard YB_PURE const TermNode& term ynothrow const TermNode& term ynothrow const TermNode& term ynothrow NPL::ImplRet | ( | ! | term.empty() &&term.Value | ) |

判断项是否为叶节点。

## ◆ ImplRet() [2/6]

YB_ATTR_nodiscard YB_PURE const TermNode& term ynothrow NPL::ImplRet | ( | ! | term.empty()||term.Value | ) |

判断项是否为空节点。

## ◆ ImplRet() [3/6]

YB_ATTR_nodiscard YB_PURE const TermNode& term ynothrow const TermNode& term ynothrow NPL::ImplRet | ( | ! | term | ) |

判断项是否为扩展列表节点。

自从
  build 858

## ◆ ImplRet() [4/6]

YB_ATTR_nodiscard YB_PURE string_view sv ynothrowv NPL::ImplRet | ( | CheckLiteral(sv) ! | = `char() ? DeliteralizeUnchecked(sv) :sv` | ) |

编码转义字符串：替换指定字符串中的可转义字符为转义序列。

参见
  LexicalAnalyzer

## ◆ ImplRet() [5/6]

const TermTags& tags ynothrow NPL::ImplRet | ( | tags &~TermTags::Temporary |  | ) |

项节点：存储语法分析结果的值类型节点。

自从
  build 852

类似 ValueNode 的节点类型，但没有名称数据成员、按键比较和按键访问， 且使用 list 而不是 ystdex::mapped_set 作为容器。

自从
  build 853

子项的容器。

值数据成员。

项的标签。

自从
  build 857

注解
  部分构造函数和 ValueNode 类似。

自从
  build 853
  build 853

复制构造：使用参数和参数指定的分配器。

自从
  build 879

复制赋值：使用以参数的分配器构造的副本和交换操作。

自从
  build 879

前置条件
  被转移的参数不是被子节点容器直接或间接所有的其它节点。

警告
  违反前置条件的转移可能引起循环引用。

自从
  build 853
  build 853
  build 853
  build 853
  build 853

转移参数内容。

前置条件
  断言：参数不是 *this 。

自从
  build 853

转移参数指定的节点的内容到对象。转移后的节点内容是转移前的参数内容。 允许被转移的参数直接或间接地被容器引用。

自从
  build 853
  build 853
  buid 853
  build 853

在文件 SContext.h 第 163 行定义.

引用了 YSLib::_tParams, YSLib::a, CHRLib::args, DefDeCtor, DefDeMoveCtor, tm, YSLib::ValueNode::Value, yforward , 以及 yimpl().

函数调用图:

## ◆ ImplRet() [6/6]

YB_ATTR_nodiscard YB_PURE const TermNode& term ynothrow const TermNode& term ynothrow const TermNode& term ynothrow const TermNode& term ynothrow NPL::ImplRet | ( | term. | empty() | ) |

判断项是否为列表节点。

自从
  build 774

## ◆ InsertChildSyntaxNode() [1/3]

template<class _tNodeOrCon >

TNIter NPL::InsertChildSyntaxNode | ( | _tNodeOrCon && | node_or_con,
|  | NodeLiteral && | nl
| ) |  |

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

引用了 InsertChildSyntaxNode(), TransformToSyntaxNode() , 以及 yforward.

函数调用图:

## ◆ InsertChildSyntaxNode() [2/3]

template<class _tNodeOrCon >

TNIter NPL::InsertChildSyntaxNode | ( | _tNodeOrCon && | node_or_con,
|  | TermNode && | child
| ) |  |

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

引用了 InsertSyntaxNode() , 以及 yforward.

函数调用图:

## ◆ InsertChildSyntaxNode() [3/3]

template<class _tNodeOrCon >

TNIter NPL::InsertChildSyntaxNode | ( | _tNodeOrCon && | node_or_con,
|  | TermNode & | child
| ) |  |

插入语法子节点。

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

引用了 InsertSyntaxNode() , 以及 yforward.

被这些函数引用 NPL::SXML::InsertAttributeNode() , 以及 InsertChildSyntaxNode().

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

## ◆ InsertSyntaxNode()

template<class _tNodeOrCon , typename _type , typename... _tParams>

TNIter NPL::InsertSyntaxNode | ( | _tNodeOrCon && | node_or_con,
|  | _type && | arg,
|  | _tParams &&... | args
| ) |  |

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

引用了 CHRLib::args , 以及 yforward.

被这些函数引用 InsertChildSyntaxNode().

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

## ◆ InstallDirectory()

void NPL::InstallDirectory | ( | const string & | dst,
|  | const string & | src
| ) |  |

在文件 Dependency.cpp 第 182 行定义.

引用了 c_str(), dst, InstallFile(), Path, YSLib::Drawing::src , 以及 YSLib::IO::TraverseTree().

函数调用图:

## ◆ InstallExecutable()

void NPL::InstallExecutable | ( | const char * | dst,
|  | const char * | src
| ) |  |

在文件 Dependency.cpp 第 215 行定义.

引用了 dst, InstallFile() , 以及 YSLib::Drawing::src.

函数调用图:

## ◆ InstallFile()

void NPL::InstallFile | ( | const char * | dst,
|  | const char * | src
| ) |  |

在文件 Dependency.cpp 第 166 行定义.

引用了 CatchExpr, YSLib::IO::CopyFile(), dst, CHRLib::e, platform::Descriptions::Err, YSLib::ExtractAndTrace(), platform::HaveSameContents(), YSLib::IO::PreserveModificationTime(), YSLib::Drawing::src , 以及 YTraceDe.

被这些函数引用 InstallDirectory(), InstallExecutable(), InstallHardLink() , 以及 InstallSymbolicLink().

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

## ◆ InstallHardLink()

void NPL::InstallHardLink | ( | const char * | dst,
|  | const char * | src
| ) |  |

在文件 Dependency.cpp 第 192 行定义.

引用了 CatchExpr, platform::CreateHardLink(), dst, InstallFile(), YSLib::Drawing::src, TryExpr , 以及 YSLib::IO::VerifyDirectory.

被这些函数引用 NPL::A1::Forms::LoadModule_SHBuild().

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

## ◆ InstallSymbolicLink()

void NPL::InstallSymbolicLink | ( | const char * | dst,
|  | const char * | src
| ) |  |

在文件 Dependency.cpp 第 205 行定义.

引用了 CatchExpr, platform::CreateSymbolicLink(), dst, InstallFile(), YSLib::Drawing::src , 以及 TryExpr.

函数调用图:

## ◆ IsBoundLValueTerm()

bool NPL::IsBoundLValueTerm | ( | const TermNode & | term | ) |

判断项（的值数据成员）是否表示被绑定的左值引用。

参见
  TermReference::IsReferencedLValue

自从
  build 871

判断项是否表示引用且 TermReference::IsReferencedLValue 的结果为 true 。

在文件 NPLA.cpp 第 642 行定义.

引用了 ystdex::invoke_value_or() , 以及 NPL::A1::Internals::term.

被这些函数引用 MoveRValueToForward() , 以及 MoveRValueToReturn().

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

## ◆ IsNPLAExtendedLiteral()

bool NPL::IsNPLAExtendedLiteral | ( | string_view | id | ) |

判断不是非扩展字面量的词素是否为 NPLA 扩展字面量。

前置条件
  断言：字符串参数的数据指针非空且字符串非空。
  词素不是代码字面量或数据字面量。

自从
  build 771

在文件 NPLA.cpp 第 541 行定义.

引用了 ystdex::cpp2017::data(), CHRLib::f(), ystdex::fseq::front, ystdex::isdigit(), size , 以及 YAssertNonnull.

被这些函数引用 CategorizeLexeme() , 以及 NPL::A1::EvaluateLeafToken().

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

## ◆ IsReferenceTerm()

bool NPL::IsReferenceTerm | ( | const TermNode & | term | ) |

判断项（的值数据成员）是否为引用项。

注解
  使用 NPL::TryAccessLeaf 访问。

自从
  build 854

在文件 NPLA.cpp 第 636 行定义.

引用了 platform::bool , 以及 NPL::A1::Internals::term.

被这些函数引用 IsUncollapsedTerm() , 以及 LiftToReference().

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

## ◆ IsUncollapsedTerm()

bool NPL::IsUncollapsedTerm | ( | const TermNode & | term | ) |

判断项（的值数据成员）是否表示未折叠的引用。

自从
  build 869

在文件 NPLA.cpp 第 649 行定义.

引用了 ystdex::call_value_or(), ystdex::compose(), get, IsReferenceTerm() , 以及 NPL::A1::Internals::term.

函数调用图:

## ◆ IsUniqueTerm()

bool NPL::IsUniqueTerm | ( | const TermNode & | term | ) |

判断项（的值数据成员）是否表示非引用项或唯一引用。

参见
  TermReference::IsUnique

自从
  build 859

在文件 NPLA.cpp 第 657 行定义.

引用了 ystdex::invoke_value_or() , 以及 NPL::A1::Internals::term.

函数调用图:

## ◆ LiftCollapsed()

void NPL::LiftCollapsed | ( | TermNode & | term,
|  | TermNode & | tm,
|  | TermReference | ref
| ) |  |

提升折叠后的项引用到指定的项。

注解
  不复制项的标签。这适合不保留标签的赋值操作。

参见
  Collapse
  LiftTerm

自从
  build 858

按参数指定的项提升引用。参数分别为目标、源和项引用。 使用第二参数以支持非正规表示。 假定第三参数引用的项是第二参数； 否则，若目标和源项不相同且引用值具有非正规表示，行为未定义。

在文件 NPLA.cpp 第 729 行定义.

引用了 Collapse(), ystdex::ref(), NPL::A1::Internals::term , 以及 tm.

被这些函数引用 NPL::A1::Forms::SetFirstRef().

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

## ◆ LiftOtherOrCopy()

void NPL::LiftOtherOrCopy | ( | TermNode & | term,
|  | TermNode & | tm,
|  | bool | move
| ) |  |

在文件 NPLA.cpp 第 696 行定义.

引用了 NPL::A1::Internals::term , 以及 tm.

被这些函数引用 NPL::A1::Forms::First(), NPL::A1::Forms::FirstVal() , 以及 ReduceToReference().

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

## ◆ LiftTermOrCopy()

void NPL::LiftTermOrCopy | ( | TermNode & | term,
|  | TermNode & | tm,
|  | bool | move
| ) |  |

在文件 NPLA.cpp 第 706 行定义.

引用了 NPL::A1::Internals::term , 以及 tm.

## ◆ LiftTermValueOrCopy()

void NPL::LiftTermValueOrCopy | ( | TermNode & | term,
|  | TermNode & | tm,
|  | bool | move
| ) |  |

提升项的值数据成员或项的值数据成员的副本。

注解
  复制引用项引用的对象，复制或转移非引用项的对象。
  第三参数指定转移是否被转移。

提升引用的项的值。

参见
  NPL::SetContentWith

自从
  build 872

提升第二参数引用的项使其中可能包含的引用值以满足返回值的内存安全要求。 提升参数指定的项或设置项。第三参数指定是否直接提升。 若直接提升，同 LiftTerm ，否则同 TermNode::SetContent 。

在文件 NPLA.cpp 第 716 行定义.

引用了 YSLib::SetContentWith(), NPL::A1::Internals::term , 以及 tm.

函数调用图:

## ◆ LiftToReference()

void NPL::LiftToReference | ( | TermNode & | term,
|  | TermNode & | tm
| ) |  |

在文件 NPLA.cpp 第 751 行定义.

引用了 IsReferenceTerm(), NPL::A1::Internals::term, ystdex::throw_invalid_construction() , 以及 tm.

函数调用图:

## ◆ LiftToReturn()

void NPL::LiftToReturn | ( | TermNode & | term | ) |

在文件 NPLA.cpp 第 773 行定义.

引用了 platform::p , 以及 NPL::A1::Internals::term.

## ◆ Literalize()

string NPL::Literalize | ( | string_view | sv,
|  | char | c = `'"'`
| ) |  |

修饰字符串为字面量。

返回
  若首尾字符都为 '\'' 或 '"' 之一或第二参数为空字符则为原串， 否则为首尾加上第二参数字符的串。

自从
  build 597

在文件 Lexical.cpp 第 291 行定义.

引用了 CHRLib::c, CheckLiteral() , 以及 ystdex::quote().

被这些函数引用 LiteralizeEscapeNodeLiteral() , 以及 TransformToSyntaxNode().

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

## ◆ LiteralizeEscapeNodeLiteral()

string NPL::LiteralizeEscapeNodeLiteral | ( | const ValueNode & | node | ) |

转义 NPLA 节点字面量。

返回
  参数为控节点则空串，否则调用 Literalize 字面量化 EscapeNodeLiteral 的结果。

异常

  bad_any_cast | 异常中立：由 EscapeNodeLiteral 抛出。

参见
  EscapeNodeLiteral

自从
  build 598

在文件 NPLA.cpp 第 70 行定义.

引用了 EscapeNodeLiteral() , 以及 Literalize().

被这些函数引用 operator<<().

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

## ◆ MapNPLALeafNode()

ValueNode NPL::MapNPLALeafNode | ( | const TermNode & | term | ) |

映射 NPLA 叶节点。

返回
  创建的新节点。

参见
  ParseNPLANodeString

自从
  build 674

创建新节点。若参数为空则返回值为空串的新节点；否则值以 ParseNPLANodeString 取得。

在文件 NPLA.cpp 第 139 行定义.

引用了 YSLib::AsNode(), Deliteralize, ParseNPLATermString() , 以及 NPL::A1::Internals::term.

被这些函数引用 NPL::A1::TransformNode().

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

## ◆ MoveCollapsed()

void NPL::MoveCollapsed | ( | TermNode & | term,
|  | TermNode & | tm
| ) |  |

提升折叠后的第二参数指定的项。

前置条件
  间接断言：第一和第二参数指定不相同的项。

参见
  Collapse
  LiftCollapsed
  LiftOther

自从
  build 871

按参数指定的项提升折叠的项。参数分别为目标和源。 当源是引用项时，提升源表示的引用，否则同 LiftOther 。 其中提升操作等效调用 LiftCollapsed 。

在文件 NPLA.cpp 第 741 行定义.

引用了 Collapse(), platform::p, NPL::A1::Internals::term , 以及 tm.

函数调用图:

## ◆ MoveResolved()

TermNode NPL::MoveResolved | ( | const ContextNode & | ctx,
|  | string_view | id
| ) |  |

在文件 NPLA.cpp 第 1200 行定义.

引用了 platform::Deref() , 以及 platform::p.

函数调用图:

## ◆ MoveRValueToForward()

void NPL::MoveRValueToForward | ( | TermNode & | term,
|  | TermNode & | tm
| ) |  |

提升第二参数指定的右值项作为转发的第一参数指定项中的返回值。

前置条件
  间接断言：参数指定不相同的项。

注解
  等价使用 TermReference::IsReferencedLValue 区分左值。

参见
  TermNode::MoveContent
  TermReference::IsReferencedLValue

前置条件
  间接断言：第一和第二参数指定不相同的项。

自从
  build 872

效果同先提升第二参数到第一参数，然后对结果进行处理以转发： 提升表示右值的项的值数据成员可能包含的引用值以满足返回值的内存安全要求； 转发提升后的值。 转发操作由被转发表达式的值确定可转移： 对左值不进行修改； 否则同 LiftToReturn ，但临时对象的引用值被视为可转移。 同 MoveRValueToReturn ，但转移而非复制临时对象。 可在对象语言中实现类似 C++ 的 std::forward 的转发操作， 但转移非左值为非引用类型的值。

在文件 NPLA.cpp 第 784 行定义.

引用了 IsBoundLValueTerm(), platform::p, NPL::A1::Internals::term , 以及 tm.

函数调用图:

## ◆ MoveRValueToReturn()

void NPL::MoveRValueToReturn | ( | TermNode & | term,
|  | TermNode & | tm
| ) |  |

提升第二参数指定的右值项作为第一参数指定项中的返回值。

参见
  LiftToReturn

自从
  build 871

效果同先提升第二参数到第一参数，然后对结果进行处理以传递返回值： 提升表示右值的项的值数据成员可能包含的引用值以满足返回值的内存安全要求； 传递提升后的值。 传递操作由被传递表达式的值确定可转移： 对左值不进行修改，否则同 LiftToReturn 。 因允许减少提升，实现可较无条件转移参数指定的项后转换返回值高效。 可在对象语言中实现类似 C++ 的 std::forward 的转发操作， 但复制非左值为非引用类型的值。

在文件 NPLA.cpp 第 801 行定义.

引用了 IsBoundLValueTerm(), IsMovable, LiftToReturn, NPL::A1::Internals::term , 以及 tm.

被这些函数引用 NPL::A1::Forms::CheckEnvironment().

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

## ◆ NPLUnescape()

bool NPL::NPLUnescape | ( | string & | buf,
|  | char | c,
|  | UnescapeContext & | uctx,
|  | char | ld
| ) |  |

NPL 转义匹配算法。

前置条件
  断言：第一参数非空。

参见
  LexicalAnalyzer

假定转义序列前缀为反斜杠，但不检查内容。 支持转义序列为 "\\" 、 "\a" 、 "\b" 、 "\f" 、 "\n" 、 "\r" 、 "\t" 和 "\v" ， 以及断行连接。 除以下说明外，转义序列语义参见 ISO C++11 （排除 raw-string-literal ）； 其它转义序列由派生实现定义。 反斜杠转义：连续两个反斜杠被替换为一个反斜杠； 引号转义：反斜杠之后紧接单引号或双引号时，反斜杠被删除。 断行连接：反斜杠之后紧接换行符的双字符序列视为续行符，被删除使分隔的行组成逻辑行。 注意断行连接和 ISO C++ 单独先行处理不同，不支持连接在不同行的转义序列。

在文件 Lexical.cpp 第 48 行定义.

引用了 YSLib::Text::buf, CHRLib::c, YSLib::i, NPL::UnescapeContext::Length, NPL::UnescapeContext::Start, YAssert() , 以及 YB_ATTR_fallthrough.

函数调用图:

## ◆ operator<<()

std::ostream& NPL::operator<< | ( | std::ostream & | os,
|  | const Configuration & | conf
| ) |  |

related

在文件 Configuration.cpp 第 37 行定义.

引用了 LiteralizeEscapeNodeLiteral() , 以及 PrintNode().

函数调用图:

## ◆ operator>>()

std::istream& NPL::operator>> | ( | std::istream & | is,
|  | Configuration & | conf
| ) |  |

异常

  GeneralEvent | 文件无效。
  LoggedEvent | 文件内容读取失败。

自从
  build 619

在文件 Configuration.cpp 第 45 行定义.

引用了 NPL::SContext::Analyze(), CatchExpr, NPL::A1::LoadNode(), ystdex::rethrow_badstate(), NPL::Configuration::root , 以及 TryExpr.

函数调用图:

## ◆ ParseNPLANodeString()

string NPL::ParseNPLANodeString | ( | const ValueNode & | node | ) |

解析 NPLA 节点字符串。

自从
  build 508

以 string 类型访问节点，若失败则结果为空串。

在文件 NPLA.cpp 第 76 行定义.

引用了 ystdex::value_or().

被这些函数引用 TransformToSyntaxNode().

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

## ◆ ParseNPLATermString()

string NPL::ParseNPLATermString | ( | const TermNode & | term | ) |

解析 NPLA 项节点字符串。

自从
  build 852

以 string 类型访问节点，若失败则结果为空串。

在文件 NPLA.cpp 第 133 行定义.

引用了 NPL::A1::Internals::term , 以及 ystdex::value_or().

被这些函数引用 MapNPLALeafNode() , 以及 NPL::A1::TransformNode().

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

## ◆ PDefH() [1/16]

YB_ATTR_nodiscard YB_PURE yconstfn NPL::PDefH | ( | bool | ,
|  | IgnorePrefix | ,
|  | string_view | buf,
|  | UnescapeContext & |
| ) |  |

忽略前缀。

## ◆ PDefH() [2/16]

YB_ATTR_nodiscard YB_PURE NPL::PDefH | ( | bool | ,
|  | IsBranch | ,
|  | const TermNode & | term
| ) |  |

inline

项节点分类判断操作。

自从
  build 733

判断项是否为枝节点。

判断项是否为分支列表节点。

自从
  build 858

## ◆ PDefH() [3/16]

YB_ATTR_nodiscard YB_STATELESS yconstfn NPL::PDefH | ( | bool | ,
|  | IsGraphicalDelimiter | ,
|  | char | c
| ) |  |

判断参数是否为 NPL 图形分隔符。

自从
  build 825

## ◆ PDefH() [4/16]

YB_ATTR_nodiscard YB_STATELESS yconstfn NPL::PDefH | ( | bool | ,
|  | IsNPLAExtendedLiteralNonDigitPrefix | ,
|  | char | c
| ) |  |

判断字符是否为 NPLA 扩展字面量非数字前缀。

自从
  build 771

## ◆ PDefH() [5/16]

ReductionStatus::Retained YB_ATTR_nodiscard yconstfn YB_STATELESS NPL::PDefH | ( | bool | ,
|  | IsOverridableReductionResult | ,
|  | ReductionStatus | r
| ) |  |

判断参数指定的规约结果在合并中是否可被覆盖。

警告
  具体支持的值未指定，结果的稳定性不应被依赖。

自从
  build 869

## ◆ PDefH() [6/16]

YB_ATTR_nodiscard NPL::PDefH | ( | Environment::NameResolution | ,
|  | ResolveName | ,
|  | const ContextNode & | ctx,
|  | string_view | id
| ) |  |

inline

解析名称：处理保留名称并查找名称。

异常

  NPLException | 访问共享重定向上下文失败。

前置条件
  断言：第二参数的数据指针非空。

参见
  ContextNode::Resolve

自从
  build 821

解析指定上下文的当前环境中的名称。 解析名称以当前当前环境作为参数调用上下文的 ContextNode::Resolve 实现。

## ◆ PDefH() [7/16]

NPL::PDefH | ( | ReductionStatus | ,
|  | ReduceForLiftedResult | ,
|  | TermNode & | term
| ) |  |

inline

规约提升结果。

返回
  ReductionStatus::Retained 。

参见
  LiftToReturn

自从
  build 855

调用 LiftToReturn 提升结果，再返回规约状态。

## ◆ PDefH() [8/16]

NPL::PDefH | ( | ReductionStatus | ,
|  | ReduceToValue | ,
|  | TermNode & | term,
|  | TermNode & | tm
| ) |  |

inline

规约转发第二参数指定的项表示的值作为求值结果。

返回
  ReductionStatus::Retained 。

参见
  MoveRValueToReturn

## ◆ PDefH() [9/16]

YB_ATTR_nodiscard YB_PURE NPL::PDefH | ( | string_view | ,
|  | DeliteralizeUnchecked | ,
|  | string_view | sv
| ) |  |

inline

去除字面量边界分隔符。

前置条件
  断言：参数的数据指针非空。

返回
  若标识符是字面量，则为去除首尾字符之后的副本；否则为原串。

自从
  build 731

## ◆ PDefH() [10/16]

YB_ATTR_nodiscard YB_PURE NPL::PDefH | ( | TermNode | ,
|  | TransformToSyntaxNode | ,
|  | NodeLiteral && | nl
| ) |  |

inline

注解
  在指定的节点插入节点，可用于语法分析树的输入。

参见
  MakeIndex
  TransformToSyntaxNode

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

引用了 CHRLib::args , 以及 yforward.

## ◆ PDefH() [11/16]

YB_ATTR_nodiscard YB_PURE NPL::PDefH | ( | ValueObject | ,
|  | GetValueOf | ,
|  | observer_ptr< const TermNode > | p_term
| ) |  |

inline

根据节点和节点容器创建操作设置目标节点的值或子节点。

自从
  build 852

注解
  可用于创建副本。

警告
  不检查嵌套深度，不支持嵌套调用安全。

在文件 SContext.h 第 618 行定义.

引用了 NPL::A1::Internals::term.

## ◆ PDefH() [12/16]

NPL::PDefH | ( | void | ,
|  | AssertBranch | ,
|  | const TermNode & | term,
|  | const char * | msg = `"Invalid term found."`
| ) |  |

inline

断言枝节点。

前置条件
  断言：参数指定的项是枝节点。

自从
  build 761

## ◆ PDefH() [13/16]

NPL::PDefH | ( | void | ,
|  | InstallExecutable | ,
|  | const string & | dst,
|  | const string & | src
| ) |  |

inline

## ◆ PDefH() [14/16]

YF_API const char* NPL::PDefH | ( | void | ,
|  | InstallFile | ,
|  | const string & | dst,
|  | const string & | src
| ) |  |

inline

## ◆ PDefH() [15/16]

NPL::PDefH | ( | void | ,
|  | InstallHardLink | ,
|  | const string & | dst,
|  | const string & | src
| ) |  |

inline

## ◆ PDefH() [16/16]

NPL::PDefH | ( | void | ,
|  | InstallSymbolicLink | ,
|  | const string & | dst,
|  | const string & | src
| ) |  |

inline

## ◆ PrepareCollapse()

TermNode NPL::PrepareCollapse | ( | TermNode & | term,
|  | const shared_ptr< Environment > & | p_env
| ) |  |

准备折叠项引用。

前置条件
  间接断言：第一参数不指定引用值时第二参数非空。

参见
  Environment::MakeTermTags

自从
  build 894

返回由以下方式确定的引用项： 当第一参数表示项引用时，返回这个引用项； 否则为通过参数初始化的项引用构成的正规表示的项。 初始化项引用时，使用指定环境创建的标签。 这种方式避免初始化引用的引用，除非第一参数已具有未折叠的引用。 使用引用值初始化时保留标签，否则使用项中的标签。 第二参数指定通过参数初始化项引用时关联的环境。

在文件 NPLA.cpp 第 626 行定义.

引用了 AsTermNode(), platform::Nonnull(), platform::p , 以及 NPL::A1::Internals::term.

被这些函数引用 ResolveIdentifier().

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

## ◆ PrintContainedNodes()

template<typename _func , typename _fCallable >

void NPL::PrintContainedNodes | ( | _func | print_bound,
|  | _fCallable | f
| ) |  |

打印容器边界和其中的 NPLA 节点，且在打印边界前调用前置操作。

自从
  build 896

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

引用了 CatchIgnore, CHRLib::f(), ystdex::invoke() , 以及 TryExpr.

被这些函数引用 PrintNode().

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

## ◆ PrintIndent()

void NPL::PrintIndent | ( | std::ostream & | os,
|  | IndentGenerator | igen = `DefaultGenerateIndent`,
|  | size_t | n = `1`
| ) |  |

打印缩进。

异常

  std::bad_function | 异常中立：参数指定的处理器为空。

注解
  若最后一个参数等于零则无副作用。

在文件 NPLA.cpp 第 89 行定义.

引用了 ystdex::write() , 以及 YB_LIKELY.

被这些函数引用 PrintNode().

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

## ◆ PrintNode()

void NPL::PrintNode | ( | std::ostream & | os,
|  | const ValueNode & | node,
|  | NodeToString | node_to_str = `EscapeNodeLiteral`,
|  | IndentGenerator | igen = `DefaultGenerateIndent`,
|  | size_t | depth = `0`
| ) |  |

打印 NPLA 节点。

参见
  DecodeNodeIndex
  PrintIdent
  PrintNodeString
  TraverseNodeChildAndPrint

调用第四参数输出最后一个参数决定的缩进作为前缀和一个空格，然后打印节点内容： 先尝试调用 PrintNodeString 打印节点字符串，若成功直接返回； 否则打印换行，并调用 PrintContainedNodes 逐个打印子节点内容。 其中，对满足 IsPrefixedIndex 的子节点调用第四参数作为节点字符串打印； 否则，递归打印子节点，忽略此过程中的 std::out_of_range 异常。 打印节点内容中的节点名称时，首先尝试使用 YSLib::DecodeIndex 解码索引。 输出的节点名称使用 DecodeNodeIndex 解码。

在文件 NPLA.cpp 第 96 行定义.

引用了 DecodeNodeIndex(), EscapeLiteral(), YSLib::IsPrefixedIndex(), PrintContainedNodes(), PrintIndent(), PrintNodeString(), ystdex::ref() , 以及 TraverseSubnodes().

被这些函数引用 operator<<().

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

## ◆ PrintNodeString()

bool NPL::PrintNodeString | ( | std::ostream & | os,
|  | const ValueNode & | node,
|  | NodeToString | node_to_str = `EscapeNodeLiteral`
| ) |  |

打印节点字符串。

返回
  是否成功访问节点字符串并输出。

注解
  bad_any_cast 外异常中立。

参见
  PrintNode

使用最后一个参数指定的访问节点，打印得到的字符串。 忽略 bad_any_cast ，视为失败。 无论是否成功都在最后打印换行符。

在文件 NPLA.cpp 第 123 行定义.

引用了 CatchExpr , 以及 TryRet.

被这些函数引用 PrintNode().

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

## ◆ ReduceBranchToList()

ReductionStatus NPL::ReduceBranchToList | ( | TermNode & | term | ) |

在文件 NPLA.cpp 第 816 行定义.

引用了 YSLib::RemoveHead(), Retained , 以及 NPL::A1::Internals::term.

函数调用图:

## ◆ ReduceBranchToListValue()

ReductionStatus NPL::ReduceBranchToListValue | ( | TermNode & | term | ) |

在文件 NPLA.cpp 第 823 行定义.

引用了 YSLib::RemoveHead(), Retained , 以及 NPL::A1::Internals::term.

函数调用图:

## ◆ ReduceHeadEmptyList()

ReductionStatus NPL::ReduceHeadEmptyList | ( | TermNode & | term | ) |

规约第一个非结尾空列表子项。

返回
  ReductionStatus::Neutral 。

参见
  RemoveHead

自从
  build 774

若项具有不少于一个子项且第一个子项是空列表则移除。 允许空列表作为第一个子项以标记没有操作数的函数应用。

在文件 NPLA.cpp 第 831 行定义.

引用了 IsEmpty, Neutral, YSLib::RemoveHead() , 以及 NPL::A1::Internals::term.

被这些函数引用 NPL::A1::SetupDefaultInterpretation().

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

## ◆ ReduceToReference()

ReductionStatus NPL::ReduceToReference | ( | TermNode & | term,
|  | TermNode & | tm,
|  | ResolvedTermReferencePtr | p_ref
| ) |  |

在文件 NPLA.cpp 第 839 行定义.

引用了 LiftOtherOrCopy(), platform::p, ReduceToReferenceAt, Retained, NPL::A1::Internals::term , 以及 tm.

被这些函数引用 NPL::A1::Forms::First() , 以及 NPL::A1::Forms::FirstRef().

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

## ◆ ReduceToReferenceAt()

ReductionStatus NPL::ReduceToReferenceAt | ( | TermNode & | term,
|  | TermNode & | tm,
|  | ResolvedTermReferencePtr | p_ref
| ) |  |

在文件 NPLA.cpp 第 852 行定义.

引用了 Clean, platform::Deref(), NPL::A1::Internals::term , 以及 tm.

函数调用图:

## ◆ RegularizeTerm()

ReductionStatus NPL::RegularizeTerm | ( | TermNode & | term,
|  | ReductionStatus | status
| ) |  |

按规约结果正规化项。

返回
  第二参数。

自从
  build 841

在文件 NPLA.cpp 第 686 行定义.

引用了 Clean , 以及 NPL::A1::Internals::term.

被这些函数引用 NPL::A1::PDefH().

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

## ◆ RelaySwitched()

template<typename _fCurrent >

ReductionStatus NPL::RelaySwitched | ( | ContextNode & | ctx,
|  | _fCurrent && | cur
| ) |  |

inline

异步规约指定动作和上下文中的当前动作。

返回
  ReductionStatus::Partial 。

自从
  build 841

异步规约参数指定的动作作为当前动作序列的前缀。 第一和第二参数分别为上下文和捕获的当前动作。 以参数声明的相反顺序捕获参数作为动作，结果以参数声明的顺序析构捕获的动作。

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

引用了 NPL::A1::Internals::cur, Partial, NPL::ContextNode::SetupFront() , 以及 yforward.

被这些函数引用 NPL::A1::Internals::RelayCurrentNext(), NPL::A1::Internals::RelayForEvalOrDirect() , 以及 NPL::A1::RelayToLoadExternal().

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

## ◆ Resolve()

YB_ATTR_nodiscard ctx NPL::Resolve | ( | ctx. | GetRecordPtr(),
|  | id |
| ) |  | const &

转移解析标识符的对象：解析名称并从环境中转移被绑定的对象。

前置条件
  间接断言：第二参数的数据指针非空。

异常

  BadIdentifier | 标识符未在环境中找到。

参见
  ResolveName

返回
  标识符指称的对象。

自从
  build 897

同 ResolveIdentifier ，但结果是被转移的直接指称的对象，不引入新的引用值。 若被绑定的对象不可修改或环境被冻结，则复制所在的项；否则直接转移项。 不区分和折叠对象引用。

## ◆ ResolveEnvironment() [1/2]

pair< shared_ptr< Environment >, bool > NPL::ResolveEnvironment | ( | const TermNode & | term | ) |

异常

  ListTypeError | 参数是列表节点。

注解
  当前使用和 TermToStringWithReferenceMark 相同的方式在异常消息中表示引用项。

参见
  TermToStringWithReferenceMark

自从
  build 840

在文件 NPLA.cpp 第 1235 行定义.

引用了 c_str(), IsExtendedList, ResolveEnvironment(), ResolveTerm(), ystdex::sfmt(), NPL::A1::Internals::term , 以及 TermToStringWithReferenceMark().

函数调用图:

## ◆ ResolveEnvironment() [2/2]

pair< shared_ptr< Environment >, bool > NPL::ResolveEnvironment | ( | const ValueObject & | vo | ) |

解析环境。

返回
  取得所有权的环境指针及是否具有所有权。

注解
  只支持宿主值类型 `shared_ptr<Environment>` 或 `weak_ptr<Environment>` 。

自从
  build 830

在文件 NPLA.cpp 第 1224 行定义.

引用了 platform::p, NPL::Environment::ThrowForInvalidType() , 以及 YSLib::vo.

被这些函数引用 NPL::A1::Forms::Apply(), NPL::A1::Forms::CheckEnvironment() , 以及 ResolveEnvironment().

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

## ◆ ResolveIdentifier()

TermNode NPL::ResolveIdentifier | ( | const ContextNode & | ctx,
|  | string_view | id
| ) |  |

解析标识符：解析名称并折叠引用。

返回
  标识符指称的对象的引用。

参见
  PrepareCollapse

自从
  build 876

解析指定上下文的当前环境中的标识符，若不存在绑定则抛出异常。 调用 ResolveName ，并调用 PrepareCollapse 进行引用折叠。 若无法在指定的环境中找到标识符的绑定，则抛出异常。 解析的结果中的对象以引用在项中表达，以避免使用对象副本。

在文件 NPLA.cpp 第 1214 行定义.

引用了 PrepareCollapse().

函数调用图:

## ◆ ResolveRegular()

template<typename _type , class _tTerm >

YB_ATTR_nodiscard YB_PURE auto NPL::ResolveRegular | ( | _tTerm & | term | ) | -> yimpl(decltype(NPL::Access<_type>(term)))

inline

访问一次解析引用值后的项的指定类型正规值。

参见
  NPL::AccessRegular
  NPL::ResolveTerm

以 NPL::AccessRegular 访问调用 NPL::ResolveTerm 解析引用值得到的项。 若遇到正规值为引用值，则进行解引用后继续访问。解引用至多一次。 和 YSLib::Access 访问 ValueNode 类似，但调用 NPL::ResolveTerm 解析引用重定向到目标，且首先对检查项，若项为列表项使用 NPL::ThrowListTypeErrorForInvalidType 抛出异常。

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

引用了 ResolveTerm(), NPL::A1::Internals::term , 以及 yimpl().

函数调用图:

## ◆ ResolveTerm()

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())))

解析并间接引用处理可能是引用值的项。

自从
  build 859

注解
  假定项不使用平凡正规表示，不需要对间接值检查 IsBranch 或 IsLeaf 。

参见
  NPL::ResolveToTermReferencePtr
  ResolveTermHandler
  ResolvedTermReferencePtr
  TermReference

接受指定解析实现的函数和被解析的项作为参数，尝试访问其中是否具有引用值。 若确定是引用值，则被引用的项是被引用值引用的项；否则，被引用的项是第二参数指定的项。 确定被引用的项后，调用解析函数继续处理。 参数指定解析函数和被解析的项。 解析函数应具有第一参数取被解析的项的引用，还可以具有第二可选参数。后者是 NPL::ResolvedTermReferencePtr 或 NPL::ResolvedTermReferencePtr 保证支持的 可隐式转换的目的类型（如 bool ）。 调用解析函数时，指向被解析的项的 NPL::ResolvedTermReferencePtr 类型的值 被作为实际参数。 和 observer_ptr<const TermReference> 不同，因为这个类型允许隐式转换为 bool ， 所以解析函数的实现中可直接以 bool 作为第二形式参数。

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

引用了 ystdex::expand_proxy< _fCallable, _vLen >::call(), platform::p, NPL::A1::Internals::term, yforward , 以及 yimpl().

被这些函数引用 NPL::A1::Forms::CallResolvedUnary(), NPL::A1::Forms::ForwardListFirst(), NPL::A1::Forms::LoadModule_std_strings(), NPL::A1::ReduceCombinedBranch(), ResolveEnvironment() , 以及 ResolveRegular().

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

## ◆ swap() [1/2]

void NPL::swap | ( | ContextNode & | x,
|  | ContextNode & | y
| ) |  |

在文件 NPLA.cpp 第 1188 行定义.

引用了 x , 以及 YSLib::UI::y.

被这些函数引用 NPL::ContextNode::ContextNode().

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

## ◆ swap() [2/2]

void NPL::swap | ( | TermNode & | x,
|  | TermNode & | y
| ) |  |

在文件 SContext.cpp 第 96 行定义.

引用了 x , 以及 YSLib::UI::y.

## ◆ TermToNamePtr()

YB_ATTR_nodiscard YB_PURE observer_ptr<const TokenValue> NPL::TermToNamePtr | ( | const TermNode & |  | ) |

inline

访问项的值作为记号。

自从
  build 858

返回
  通过访问项的值取得的记号的指针，或空指针表示无法取得名称。

自从
  build 782

被这些函数引用 NPL::A1::ReduceLeafToken() , 以及 TermToString().

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

## ◆ TermToString()

string NPL::TermToString | ( | const TermNode & | term | ) |

访问项的值并转换为字符串形式的外部表示。

返回
  转换得到的字符串。

参见
  TermToString

访问项的值作为名称转换为字符串，若失败则提取值的类型和子项数作为构成值的表示。 除名称外的外部表示方法未指定；结果可能随实现变化。

自从
  build 801

在文件 NPLA.cpp 第 558 行定义.

引用了 platform::p, ystdex::sfmt< string >(), NPL::A1::Internals::term , 以及 TermToNamePtr().

被这些函数引用 TermToStringWithReferenceMark() , 以及 NPL::A1::ThrowValueCategoryErrorForFirstArgument().

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

## ◆ TermToStringWithReferenceMark()

string NPL::TermToStringWithReferenceMark | ( | const TermNode & | term,
|  | bool | has_ref
| ) |  |

访问项的值并转换为可选带有引用标记的字符串形式。

注解
  当前使用前缀 [*] 和空格表示引用项。直接附加字符串，因此通常表示已解析的引用。

参见
  TermToString

自从
  build 840

在文件 NPLA.cpp 第 567 行定义.

引用了 NPL::A1::Internals::term , 以及 TermToString().

被这些函数引用 NPL::A1::ReduceCombinedBranch(), NPL::A1::ReduceCombinedReferent(), ResolveEnvironment() , 以及 ThrowListTypeErrorForInvalidType().

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

## ◆ TermToTags()

TermTags NPL::TermToTags | ( | TermNode & | term | ) |

访问项初始化标签。

自从
  build 857

参见
  GetLValueTagsOf
  TermTags

若项表示引用值，使用引用值排除 TermTags::Temporary 后的标签； 否则，使用项的标签。

在文件 NPLA.cpp 第 575 行定义.

引用了 ystdex::call_value_or(), ystdex::compose(), GetLValueTagsOf , 以及 NPL::A1::Internals::term.

函数调用图:

## ◆ ThrowListTypeErrorForInvalidType()

void NPL::ThrowListTypeErrorForInvalidType | ( | const ystdex::type_info & | tp,
|  | const TermNode & | term,
|  | bool | is_ref
| ) |  |

对列表项抛出指定预期访问值的类型的异常。

异常

  ListTypeError | 消息中包含由参数指定的预期访问值的类型的异常。

注解
  后两个参数传递给 TermToStringWithReferenceMark ，预期用法通常相同。

参见
  TermToStringWithReferenceMark

自从
  build 855

在文件 NPLA.cpp 第 583 行定义.

引用了 c_str(), ystdex::sfmt(), NPL::A1::Internals::term , 以及 TermToStringWithReferenceMark().

被这些函数引用 CheckRegular().

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

## ◆ TokenizeTerm()

void NPL::TokenizeTerm | ( | TermNode & | term | ) |

标记记号节点：递归变换节点，转换其中的词素为记号值。

注解
  先变换子节点。

自从
  build 753

在文件 NPLA.cpp 第 592 行定义.

引用了 platform::p , 以及 NPL::A1::Internals::term.

## ◆ ToLexeme()

template<class _type , yimpl(typename=ystdex::enable_if_convertible_t< const _type &, const LexemeList::value_type & >) >

YB_ATTR_nodiscard YB_STATELESS const _type& NPL::ToLexeme | ( | const _type & | val | ) |

转换参数为词素。

自从
  build 891

注解
  可配合其它不能直接转换为词素的参数类型的 ADL 重载使用。

在文件 SContext.h 第 724 行定义.

被这些函数引用 PDefH(), NPL::SContext::Reduce() , 以及 NPL::SContext::Validate().

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

## ◆ ToReducer()

Reducer NPL::ToReducer | ( | const _tAlloc & | a,
|  | _tParam && | arg,
|  | _tParams &&... | args
| ) |  |

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

引用了 YSLib::a, CHRLib::args , 以及 yforward.

被这些函数引用 NPL::A1::ContextState::RewriteTerm(), NPL::A1::ContextState::RewriteTermGuarded() , 以及 NPL::ContextNode::SetupFront().

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

## ◆ TransformToSyntaxNode()

TermNode NPL::TransformToSyntaxNode | ( | ValueNode && | node | ) |

变换 NPLA 语法节点为语法分析树的叶节点。

返回
  变换得到的节点。

注解
  可选参数指定结果名称。

自从
  build 853

参见
  Literalize
  ParseNPLANodeString

输入是 NPLA 语法节点可能和其它节点的混合，可能是未完全解析的中间数据。 变换输入为符合 NPLA 语法分析结果表示的项节点。 插入的子节点以 YSLib::NodeSequence 的形式作为变换节点的值而不是子节点，可保持顺序。 对其它叶节点，调用 ParseNPLANodeString 和 Literalize 解析和处理内容， 作为待插入的子节点。

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

引用了 YSLib::a, AsTermNode(), Literalize(), YSLib::NoContainer, platform::p , 以及 ParseNPLANodeString().

被这些函数引用 InsertChildSyntaxNode().

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

## ◆ TraverseSubnodes()

template<typename _fCallable , class _tNode >

void NPL::TraverseSubnodes | ( | _fCallable | f,
|  | const _tNode & | node
| ) |  |

遍历子节点。

注解
  使用 ADL AccessPtr 。

自从
  build 803

使用第一参数指定的遍历函数访问第二参数指定的节点容器中的子节点。 兼容 TermNode 和 ValueNode ，主要用于语法变换。

在文件 SContext.h 第 690 行定义.

引用了 CHRLib::f(), ystdex::invoke() , 以及 platform::p.

被这些函数引用 PrintNode().

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

## ◆ TryAccessLeaf() [1/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE observer_ptr<const _type> NPL::TryAccessLeaf | ( | const TermNode & | term | ) |

inline

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

引用了 ystdex::addressof(), ystdex::make_observer() , 以及 NPL::A1::Internals::term.

函数调用图:

## ◆ TryAccessLeaf() [2/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE observer_ptr<_type> NPL::TryAccessLeaf | ( | TermNode & | term | ) |

inline

尝试访问项的指定类型对象指针。

异常

  异常中立：由项的值数据成员的持有者抛出。 |

尝试访问作为叶节点的 TermNode 。 和 YSLib::AccessPtr 访问 ValueNode 的 Value 数据成员类似， 但先解析引用重定向到目标，且对持有者异常中立。

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

引用了 ystdex::addressof(), ystdex::make_observer() , 以及 NPL::A1::Internals::term.

函数调用图:

## ◆ TryAccessReferencedLeaf() [1/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE observer_ptr<const _type> NPL::TryAccessReferencedLeaf | ( | const TermNode & | term | ) |

inline

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

引用了 NPL::A1::Internals::term.

## ◆ TryAccessReferencedLeaf() [2/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE observer_ptr<_type> NPL::TryAccessReferencedLeaf | ( | TermNode & | term | ) |

inline

尝试访问解析 TermReference 后的项的指定类型对象指针。

异常

  异常中立：由项的值数据成员的持有者抛出。 |

参见
  NPL::TryAccessLeaf

自从
  build 854

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

引用了 NPL::A1::Internals::term.

## ◆ TryAccessReferencedTerm() [1/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE observer_ptr<const _type> NPL::TryAccessReferencedTerm | ( | const TermNode & | term | ) |

inline

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

引用了 NPL::A1::Internals::term.

## ◆ TryAccessReferencedTerm() [2/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE observer_ptr<_type> NPL::TryAccessReferencedTerm | ( | TermNode & | term | ) |

inline

参见
  NPL::TryAccessTerm

自从
  build 858

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

引用了 NPL::A1::Internals::term.

## ◆ TryAccessTerm() [1/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE observer_ptr<const _type> NPL::TryAccessTerm | ( | const TermNode & | term | ) |

inline

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

引用了 IsLeaf , 以及 NPL::A1::Internals::term.

## ◆ TryAccessTerm() [2/2]

template<typename _type >

YB_ATTR_nodiscard YB_PURE observer_ptr<_type> NPL::TryAccessTerm | ( | TermNode & | term | ) |

inline

尝试访问项的指定类型叶节点对象指针。

尝试访问 TermNode 。 类似 NPL::TryAccessLeaf ，但先使用 NPL::IsLeaf 判断叶节点， 对非叶节点直接返回空指针。

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

引用了 IsLeaf , 以及 NPL::A1::Internals::term.

## ◆ YAssert() [1/2]

YB_ATTR_nodiscard YB_PURE yconstfn NPL::YAssert | ( | !buf. | empty(),
|  | "Invalid buffer found." |
| ) |  |

被这些函数引用 AllocateEnvironment(), NPL::ContextNode::ApplyTail(), NPL::A1::BindParameter(), NPL::ContextNode::DefaultResolve(), HandleBackslashPrefix(), NPL::A1::InitializeTypeNameTableEntry(), NPLUnescape(), NPL::SContext::Reduce() , 以及 NPL::A1::ReduceCombinedBranch().

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

## ◆ YAssert() [2/2]

NPL::YAssert | ( | IsBranch(term) | ,
|  | msg |
| ) |  |

创建项节点。

自从
  build 853

## ◆ YB_NONNULL()

YF_API const char src const string & NPL::YB_NONNULL | ( | 1 | ,
|  | 2 |
| ) |  | const

安装文件：复制单个文件。

注解
  第一参数和第二参数分别为目标和源路径。

参见
  工具脚本 `SHBuild-common.sh` 。

自从
  build 651

待办事项:
  检查可能存在于目标路径的旧项的权限；设置权限。

注解
  复制前检查内容，若相同则不进行冗余复制（类似 rsync -a ）。

自从
  build 659

被这些函数引用 c_str().

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

## ◆ yimpl() [1/2]

NPL::yimpl | ( | using |  | ) |

规约器：和绑定上下文以外参数的求值遍的处理器具有等价签名的多态函数。

警告
  假定转移不抛出异常。

自从
  build 841

对应遍处理器的调用包装类型，保存规约动作。 动作有效当前仅当 NPL::Reducer 类型的值能上下文转换为 bool 类型后为真。

引用了 CHRLib::f() , 以及 yforward.

被这些函数引用 NPL::A1::Forms::CallRawUnary(), NPL::A1::Forms::CallRegularUnaryAs(), NPL::A1::Forms::CallResolvedUnary(), NPL::A1::Forms::CallResolvedUnaryAs(), ImplRet(), ResolveRegular() , 以及 ResolveTerm().

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

## ◆ yimpl() [2/2]

template<class _tAlloc , typename _tParam , typename... _tParams>

NPL::yimpl | ( | ystdex::exclude_self_t |  | ) |

inline

## ◆ yunused()

NPL::yunused | ( | msg |  | ) |

被这些函数引用 AllocateEnvironment(), NPL::A1::InitializeTypeNameTableEntry(), NPL::Session::ProcessSequence(), NPL::A1::QueryTailOperatorName(), NPL::A1::Internals::RelayForEvalOrDirect() , 以及 NPL::A1::SetupTailContext().

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

## 变量说明

## ◆ _tParam

NPL::_tParam

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

## ◆ Deliteralize

YB_ATTR_nodiscard YB_PURE NPL::Deliteralize

在文件 Lexical.h 第 338 行定义.

被这些函数引用 NPL::SXML::ConvertDocumentNode(), MapNPLALeafNode(), NPL::A1::ParseLeaf() , 以及 NPL::A1::ParseLeafWithSourceInformation().

## ◆ dst

YF_API const char src const string const char* NPL::dst

在文件 Dependency.h 第 96 行定义.

被这些函数引用 YSLib::Drawing::ImagePages::AdjustOffset(), YSLib::Drawing::BlendRectRaw(), YSLib::Drawing::Blit(), YSLib::Drawing::BlitGlyphLines(), YSLib::Drawing::BlitGlyphPixels(), YSLib::Drawing::BlitLines(), YSLib::Drawing::BlitPixels(), YSLib::Drawing::BlitRect(), YSLib::Drawing::BlitRectLines(), YSLib::Drawing::BlitRectPixels(), YSLib::Drawing::BlitScan(), YSLib::Drawing::BlitTo(), YSLib::Drawing::ClearPixels(), YSLib::ClearSequence(), YSLib::Drawing::CompositeRectRaw(), YSLib::Drawing::CopyBuffer(), YSLib::IO::CopyFile(), YSLib::Drawing::CopyTo(), YSLib::IO::CopyTree(), platform::CreateHardLink(), platform::CreateSymbolicLink(), Decompose(), NPL::Environment::Deduplicate(), platform::EnsureUniqueFile(), YSLib::Drawing::FillRectRaw(), YSLib::Drawing::FillVerticalLine(), InstallDirectory(), InstallExecutable(), InstallFile(), InstallHardLink(), InstallSymbolicLink(), NPL::A1::Forms::LoadModule_SHBuild(), YSLib::UI::LocateMenu(), YSLib::Drawing::PlotHLineSeg(), YSLib::Drawing::PlotLineSeg(), YSLib::Drawing::PlotVLineSeg(), ystdex::block_buffer::read(), YSLib::UI::ReleaseFocusFrom(), YSLib::Drawing::RenderChar(), YSLib::Drawing::RenderCharAlpha(), YSLib::UI::RequestFocusFrom(), YSLib::SetContentWith(), NPL::A1::Forms::SetFirst(), NPL::A1::Forms::SetFirstAt(), NPL::A1::Forms::SetFirstRef(), YSLib::IO::TraverseTree(), YSLib::UI::BufferedRenderer::Validate(), platform::FAT::EntryData::WriteDateTime() , 以及 CHRLib::YB_NONNULL().

## ◆ get

PDefH (void, LiftTermRef, TermNode& term, const TermNode& tm) ImplExpr(NPL ref move ref NPL::get()

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

被这些函数引用 YSLib::UI::ActOnHover(), YSLib::GHEvent< _tRet(_tParams...)>::GEqualityExpanded< _fCallable >::AreEqual(), YSLib::IO::CopyFile(), YSLib::PointerHolder< _type, _tTraits >::Create(), YSLib::DS::UI::DualScreenReader::Detach(), ystdex::cpp2017::optional< _tNodeAlloc >::emplace(), NPL::A1::REPLContext::FetchContextParameter(), ystdex::block_buffer::fill(), ystdex::details::any_base::get_object_ptr(), YSLib::IsNullPointer(), IsUncollapsedTerm(), main(), ystdex::any_ops::holder_handler< _tHolder >::manage(), ystdex::any_ops::allocator_holder_handler< _tByteAlloc, _tHolder >::manage(), ystdex::any_ops::details::memory_thunk< _tValue >::operator value_type &(), ystdex::cpp2017::optional< _tNodeAlloc >::operator*(), YSLib::UI::Window::operator-=(), ystdex::cpp2017::optional< _tNodeAlloc >::operator->(), ystdex::cpp2017::optional< _tNodeAlloc >::operator=(), ystdex::block_buffer::read(), YSLib::UI::RemoveFrom(), YSLib::UI::RequestToFront(), ystdex::cpp2017::optional< _tNodeAlloc >::swap(), ystdex::details::any_base::try_get(), ystdex::any::unchecked_get(), ystdex::cpp2017::optional< _tNodeAlloc >::value(), ystdex::cpp2017::optional< _tNodeAlloc >::value_or() , 以及 ystdex::block_buffer::write().

## ◆ GetLValueTagsOf

NPL::GetLValueTagsOf

在文件 SContext.h 第 162 行定义.

被这些函数引用 TermToTags().

## ◆ ImplRet

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))

注解
  空指针指定解析结果中不存在引用值，被解析的项总是视为可转移的右值项。

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

## ◆ InstallDirectory

YF_API const char src const string NPL::InstallDirectory

在文件 Dependency.h 第 96 行定义.

## ◆ IsBranchedList

YB_ATTR_nodiscard YB_PURE NPL::IsBranchedList

在文件 SContext.h 第 519 行定义.

被这些函数引用 NPL::A1::Forms::ForwardListFirst(), NPL::A1::ReduceFirst() , 以及 NPL::A1::SetupDefaultInterpretation().

## ◆ IsEmpty

YB_ATTR_nodiscard YB_PURE const TermNode& term ynothrow NPL::IsEmpty

在文件 SContext.h 第 524 行定义.

被这些函数引用 ReduceHeadEmptyList().

## ◆ IsExtendedList

YB_ATTR_nodiscard YB_PURE const TermNode& term ynothrow const TermNode& term ynothrow NPL::IsExtendedList

在文件 SContext.h 第 532 行定义.

被这些函数引用 ResolveEnvironment().

## ◆ IsLeaf

YB_ATTR_nodiscard YB_PURE const TermNode& term ynothrow const TermNode& term ynothrow const TermNode& term ynothrow NPL::IsLeaf

在文件 SContext.h 第 537 行定义.

被这些函数引用 NPL::A1::Forms::Not(), NPL::A1::ReduceCombinedBranch() , 以及 TryAccessTerm().

## ◆ IsList

YB_ATTR_nodiscard YB_PURE const TermNode& term ynothrow const TermNode& term ynothrow const TermNode& term ynothrow const TermNode& term ynothrow NPL::IsList

在文件 SContext.h 第 545 行定义.

被这些函数引用 CheckRegular().

## ◆ IsMovable

YB_ATTR_nodiscard YB_PURE PDefH (TermNode&, ReferenceTerm, TermNode& term) ynoexcept_spec(std YB_ATTR_nodiscard YB_PURE yconstfn NPL::IsMovable

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

被这些函数引用 MoveRValueToReturn().

## ◆ LiftTermOrCopy

PDefH (void, LiftOther, TermNode& term, TermNode& tm) ImplExpr(term.MoveContent(std YF_API void NPL::LiftTermOrCopy(TermNode &, TermNode &, bool)

inline

提升项：设置项的内容为参数指定的项或值。

自从
  build 805

使用第二参数指定的项的内容替换第一个项的内容。 不修改项的子项和值数据成员以外的的内容。

前置条件
  间接断言：第一和第二参数指定不相同的项。

自从
  build 876

注解
  参数相同时作用为空，但可能有额外开销。

自从
  build 844

提升项或项的副本。

提升参数指定的项或设置项。第三参数指定是否直接提升。

前置条件
  间接断言：非直接提升或第一和第二参数指定不相同的项。
  直接提升或第二参数指定的项不共享第一参数的项的子项。

注解
  若直接提升，同 LiftOther ，否则同 TermNode::SetContent 。

自从
  build 876

注解
  若直接提升，同 LiftTerm ，否则同创建对象副本调用 TermNode::MoveContent 。

自从
  build 859

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

## ◆ LiftToReturn

PDefH (void, LiftTermRef, TermNode& term, const TermNode& tm) ImplExpr(NPL ref move ref move YF_API void NPL::LiftToReturn(TermNode &)

提升项作为返回值。

参见
  LiftMoved

自从
  build 828

提升项的值数据成员可能包含的引用值以满足返回值的内存安全要求。 提升可能转移或复制对象作为返回值，由一般表达式的值确定可转移： 转移条件等价可转移项，即按 NPL::IsMovable 判断。 若参数是引用项，以项引用作为第二参数调用 NPL::LiftMoved 。

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

被这些函数引用 MoveRValueToReturn().

## ◆ NPLATag

YB_ATTR_nodiscard YB_STATELESS yconstfn NPL::NPLATag

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

## ◆ PDefH

NPL::PDefH

inline

提升项引用：使用第二参数指定的项的内容引用替换第一个项的内容。

警告
  引入的间接值无所有权，应注意在生存期内使用以保证内存安全。

待办事项:
  支持消亡值和复制。

参见
  ValueObject::MakeIndirect

自从
  build 747
  build 799

提升项对象为引用。

异常

  InvalidReference | 被提升的值非引用。
  ystdex::invalid_construction | 参数不持有值。

参见
  LiftTerm

自从
  build 800

待办事项:
  使用具体的语义错误异常类型。

若项对象表示引用值则提升项， 否则对 ValueObject 进行基于所有权的生存期检查并取引用这个项的引用值。

提升引用的项作为转移的项。

注解
  复制引用项引用的对象，复制或转移非引用项的对象。
  第三参数指定转移是否被转移。

提升第二参数引用的项使其中可能包含的引用值以满足返回值的内存安全要求。

参见
  LiftTermOrCopy

自从
  build 873

前置条件
  间接断言：非直接提升或第一和第二参数指定不相同的项。
  直接提升或第二参数指定的项不共享第一参数的项的子项。

参见
  LiftOtherOrCopy

自从
  build 876

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

## ◆ ReduceBranchToListValue

PDefH (void, LiftSubtermsToReturn, TermNode& term) ImplExpr(std YF_API ReductionStatus NPL::ReduceBranchToListValue(TermNode &) ynothrowv

inline

对每个子项提升项的值数据成员可能包含的引用值。

参见
  LiftToReturn

自从
  build 830

提升首项：使用第一个子项替换项的内容。

自从
  build 685

提升末项：使用最后一个子项替换项的内容。

自从
  build 696

前置条件
  间接断言：参数为枝节点。

返回
  ReductionStatus::Retained 。

自从
  build 823

规约为列表值：对枝节点移除第一个子项，保留余下的子项提升后作为列表的值。

参见
  LiftSubtermsToReturn

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

## ◆ ReduceToReferenceAt

PDefH (ReductionStatus, ReduceToList, TermNode& term) ynothrow ImplRet(IsBranchedList(term) ? ReduceBranchToList(term) YF_API ReductionStatus NPL::ReduceToReferenceAt(TermNode &, TermNode &, ResolvedTermReferencePtr)

inline

规约为列表：对分支列表节点移除第一个子项，保留余下的子项作为列表。

返回
  移除项时 ReductionStatus::Retained ，否则 ReductionStatus::Regular 。

注解
  返回值总是指示范式。

参见
  RemoveHead
  ReduceBranchToList

自从
  build 774

对分支列表节点移除项，同 NPL::ReduceBranchToList ；否则直接返回规约结果。

规约为列表值：对分支列表节点移除第一个子项，保留余下的子项提升后作为列表的值。

参见
  ReduceBranchToListValue

自从
  build 821

对分支列表节点移除项，同 NPL::ReduceBranchToListValue ；否则直接返回规约结果。

前置条件
  间接断言：第一和第二参数指定不相同的项。

自从
  build 871

规约转发第二参数指定的项表示的引用值作为求值结果。

前置条件
  间接断言：第二参数指定的项是引用项或第三参数非空。
  间接断言：第三参数空或第一和第二参数指定不相同的项。
  第三参数非空或第二参数指定的项不共享第一参数的项的子项。

若第二参数指定引用项，复制或转移到第一参数，返回 ReductionStatus::Retained ； 否则，以相同参数调用 ReduceToReferenceAt 。 使用引用项复制或转移时，非空的第三参数指定复制，否则指定转移。

规约转发第二参数指定的项表示的未折叠引用值作为求值结果。

返回
  ReductionStatus::Clean 。

前置条件
  间接断言：第三参数非空。

以第二参数指定的项中的对象作为被引用对象，设置第一参数表示的值为其引用值。

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

被这些函数引用 NPL::A1::Forms::First(), NPL::A1::Forms::FirstAt() , 以及 ReduceToReference().

## ◆ string_view

YB_ATTR_nodiscard ctx NPL::string_view

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

被这些函数引用 c_str().

## ◆ tm

NPL::tm

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

被这些函数引用 NPL::Environment::Bind(), NPL::A1::Forms::CheckEnvironment(), platform::FAT::ConvertFileTime(), YSLib::ValueNode::CreateRecursively(), platform::FAT::FetchDateTime(), NPL::A1::Forms::First(), NPL::A1::Forms::FirstVal(), ImplRet(), LiftCollapsed(), LiftOtherOrCopy(), LiftTermOrCopy(), LiftTermValueOrCopy(), LiftToReference(), MoveCollapsed(), MoveRValueToForward(), MoveRValueToReturn(), NPL::A1::Forms::Not(), NPL::SContext::Reduce(), NPL::A1::Internals::ReduceForCombinerRef(), ReduceToReference(), ReduceToReferenceAt() , 以及 YSLib::TranslateTime().