YSTest: NPL::LexicalAnalyzer类 参考

YSTest PreAlpha_b900_20201012 The YSLib Test Project

Public 成员函数 | Public 属性 | Private 属性 | 所有成员列表
NPL::LexicalAnalyzer类 参考

词法分析器。 更多...

`#include <Lexical.h>`

NPL::LexicalAnalyzer 的协作图:
[图例]

## Public 成员函数

| DefDeCtor (LexicalAnalyzer) DefDeCopyMoveCtorAssignment(LexicalAnalyzer) DefGetter(const ynothrow
ld | DefGetter (const ynothrow, const UnescapeContext &, UnescapeContext, unescape_context) template< class _tCharBuffer
| 过滤解析的字符。 更多...

## Public 属性

| char
| Delimiter
ld | _fUnescape = decltype(NPLUnescape)
ld | _fPrefixHandler

## Private 属性

UnescapeContext | unescape_context {}
| 反转义上下文：储存反转义中间结果。 更多...
char | ld = {}
| 字面分隔符状态：表示正在处理字面量中的有效字符。 更多...

## 详细描述

词法分析器。

前置条件
  输入兼容单字节的基本字符集的编码，如基本字符集为 ASCII 时分析 UTF-8 文本。

后置条件
  解析中间结果除了字面量外不存在空格以外的空白符，但可能有连续的空格。

自从
  build 329

以字节为基本单位的词法分析器。 接受字节输入迭代器的输入，结果存放于字符串中。 基本字符集的字符的值保证在区间 [0, 0x7F) 内。 可接受的单字符词法分隔符都保证在基本字符集内。 输出规则（按优先顺序）： 转义：转义序列替换为被转义字符； 字面量：分析至未被转义的单引号或双引号后进入字面量分析状态，无视以下规则， 直接逐字节输出原始输入，直至遇到对应的另一个引号。 窄字符空白符替换：单字节空格、水平/垂直制表符、换行符 被替换为单一空格；回车符会被忽略； 原始输出：其它字符序列逐字节输出。 支持配置转义算法。默认实现参见 NPLUnescape 。

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

## 成员函数说明

## ◆ DefDeCtor()

NPL::LexicalAnalyzer::DefDeCtor | ( | LexicalAnalyzer |  | ) | const

自从
  build 889
  build 546
  build 886

## ◆ DefGetter()

ld NPL::LexicalAnalyzer::DefGetter | ( | const | ynothrow,
|  | const UnescapeContext & | ,
|  | UnescapeContext | ,
|  | unescape_context |
| ) |  |

过滤解析的字符。

自从
  build 890

前置条件
  参数满足以下签名和行为的要求的可调用对象。

返回
  字符未被转义处理。

自从
  build 890

检查转义序列并处理转义序列前缀。 第二和第三参数分别指定反转义算法和转义序列前缀处理器； 省略时，默认分别对应 NPLUnescape 和 HandleBackslashPrefix 。 第二参数指定匹配转义序列的反转义算法：解析转义序列并按需修改指定缓存。 第二参数满足调用签名 bool(string&, char, UnescapeContext&, char) ，其中： 参数表示输出缓存、当前字符、反转义上下文和当前正在处理的边界字符（如引号）； 返回值表示是否匹配转义序列。 反转义算法按反转义上下文指定的转义序列前缀长度确定是否需要匹配转义序列， 进行反转义。 若需要反转义，使用第二参数指定的字符作为结尾构成新的转义序列： 若新的转义序列完整匹配，则替换反转义结果到缓冲区， 并清除反转义上下文中的转义序列状态； 否则，向缓冲区结尾追加字符， 并在新的转义序列完全不匹配时清除反转义上下文中的转义序列状态； 否则，直接向缓冲区结尾追加字符。 清除反转义上下文中的转义序列状态允许重新匹配新的转义序列。 第三参数指定转义序列前缀处理器。 第三参数满足调用签名 bool(string_view, UnescapeContext&) ，其中： 参数为当前处理的缓冲区和反转义上下文； 返回值表示缓冲区结尾是否更新了前缀。 序列前缀处理器处理缓冲区的序列前缀，以反转义上下文中的前缀长度确定是否存在前缀： 若不存在前缀，则判断缓冲区结尾是否是否构成前缀； 若发现前缀，则更新反转义上下文中的前缀起始位置和长度。 序列前缀处理器的参数指定的缓冲区满足： 数据指针非空； 数据指定空串，或其结尾应已经添加前缀字符。

## 类成员变量说明

## ◆ _fPrefixHandler

ld NPL::LexicalAnalyzer::_fPrefixHandler

初始值:
= decltype(HandleBackslashPrefix)>
YB_ATTR_nodiscard bool
FilterChar(char c, _tCharBuffer& cbuf, _fUnescape unescape = NPLUnescape,
_fPrefixHandler handle_prefix = HandleBackslashPrefix)
{
if(!unescape_context.IsHandling())
{
cbuf += c;
return !handle_prefix(cbuf, unescape_context);
}
unescape(cbuf, c, unescape_context, ld);
return {};
}
template<typename... _tParams>
inline void
ParseQuoted(char c, _tParams&&... args)
{
yunused(FilterChar(c, yforward(args)...));
}
bool
UpdateBack(char&, char)

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

## ◆ _fUnescape

ld NPL::LexicalAnalyzer::_fUnescape = decltype(NPLUnescape)

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

## ◆ char

NPL::LexicalAnalyzer::char

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

## ◆ Delimiter

NPL::LexicalAnalyzer::Delimiter

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

## ◆ ld

char NPL::LexicalAnalyzer::ld = {}

private

字面分隔符状态：表示正在处理字面量中的有效字符。

注解
  值为空字符时表示当前不处理字面量。

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

## ◆ unescape_context

UnescapeContext NPL::LexicalAnalyzer::unescape_context {}

private

反转义上下文：储存反转义中间结果。

注解
  若前缀非空表示正在处理反转义。

自从
  build 545

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

该类的文档由以下文件生成:

- Lexical.h

YB_ATTR_nodiscard
#define YB_ATTR_nodiscard
标记返回值不被忽略的属性。
Definition: ydef.h:715
CHRLib::c
c
Definition: CharacterProcessing.h:84
NPL::LexicalAnalyzer::ld
char ld
字面分隔符状态：表示正在处理字面量中的有效字符。
Definition: Lexical.h:222
NPL::HandleBackslashPrefix
YB_ATTR_nodiscard YF_API bool HandleBackslashPrefix(string_view, UnescapeContext &)
设置反斜杠转义前缀：当输入 '\' 时设置前缀为 "\\" 。
Definition: Lexical.cpp:36
NPL::LexicalAnalyzer::_fUnescape
ld _fUnescape
Definition: Lexical.h:270
NPL::yunused
yunused(msg)
CHRLib::args
YB_ATTR_nodiscard _tParams && args
Definition: CharacterProcessing.h:649
NPL::NPLUnescape
YB_ATTR_nodiscard YB_PURE yconstfn false YB_ATTR_nodiscard YF_API bool NPLUnescape(string &, char, UnescapeContext &, char)
NPL 转义匹配算法。
Definition: Lexical.cpp:48
yforward
#define yforward(_expr)
根据参数类型使用 std::forward 转发对应参数。
Definition: ydef.h:1508
NPL::LexicalAnalyzer::_fPrefixHandler
ld _fPrefixHandler
Definition: Lexical.h:271
YSLib::_tParams
YB_ATTR_nodiscard YB_PURE typename _tParams
Definition: ValueNode.h:1294
NPL::LexicalAnalyzer::unescape_context
UnescapeContext unescape_context
反转义上下文：储存反转义中间结果。
Definition: Lexical.h:217