YSTest: NPL::LexicalAnalyzer类 参考

YSTest PreAlpha_b800_20170810 The YSLib Test Project

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

- 类列表
- 类索引
- 类继承关系
- 类成员

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

词法分析器。 更多...

`#include <Lexical.h>`

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

## Public 类型

using | PrefixHandler = std::function< bool(char, string &)>
| 转移序列前缀处理器。 更多...
using | Unescaper = std::function< bool(string &, const UnescapeContext &, char)>
| 指定匹配转义序列的反转义算法：解析转义序列并按需修改指定缓存。 更多...

## Public 成员函数

| LexicalAnalyzer ()
| DefDeCopyMoveCtorAssignment (LexicalAnalyzer) DefGetter(const ynothrow
bool | FilterForParse (char, Unescaper, PrefixHandler)
list< string > | Literalize () const
| 根据中间结果取字符串列表。 更多...
void | ParseByte (char, Unescaper=NPLUnescape, PrefixHandler=HandleBackslashPrefix)
| 解析单个字符并添加至字符解析结果。 更多...
void | ParseQuoted (char, Unescaper=NPLUnescape, PrefixHandler=HandleBackslashPrefix)
| 解析单个字面量字符并添加至字符解析结果：反转义以外无视边界字符。 更多...
| PDefH (void, ParseRaw, char c) ImplExpr(cbuf+
| 直接添加字符。 更多...

## Public 属性

const string | Buffer
const string cbuf DefGetter(const ynothrow, const vector< size_t > &, Quotes, qlist) private bool | CheckLineConcatnater (char, char= '\\', char= '\n')

## Private 属性

char | line_concat = {}
| 指示当前续行符状态。 更多...
UnescapeContext | unescape_context
| 反转移上下文：储存反转义中间结果。 更多...
char | ld
| 字面分隔符状态：表示正在处理字面量中的有效字符。 更多...
string | cbuf
| 字符解析中间结果。 更多...
vector< size_t > | qlist
| 字符解析中间结果中非转义的引号出现的位置的有序列表。 更多...

## 详细描述

词法分析器。

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

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

自从
  build 329

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

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

## 成员类型定义说明

using NPL::LexicalAnalyzer::PrefixHandler = std::function<bool(char, string&)>

转移序列前缀处理器。

注解
  参数为当前处理的字符和反转义上下文的转义序列前缀引用。
  返回值表示是否修改了前缀。

自从
  build 546

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

using NPL::LexicalAnalyzer::Unescaper = std::function<bool(string&, const UnescapeContext&, char)>

指定匹配转义序列的反转义算法：解析转义序列并按需修改指定缓存。

注解
  参数表示输出缓存、反转义上下文和当前正在处理的边界字符（如引号）。
  返回值表示是否修改了输出缓存。

自从
  build 545

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

## 构造及析构函数说明

NPL::LexicalAnalyzer::LexicalAnalyzer | ( |  | ) |

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

## 成员函数说明

NPL::LexicalAnalyzer::DefDeCopyMoveCtorAssignment | ( | LexicalAnalyzer |  | ) | const

自从
  build 546

bool NPL::LexicalAnalyzer::FilterForParse | ( | char | c,
|  | Unescaper | unescape,
|  | PrefixHandler | prefix_handler
| ) |  |

自从
  build 546

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

参考 CheckLineConcatnater, NPL::UnescapeContext::Prefix , 以及 unescape_context.

参考自 ParseByte() , 以及 ParseQuoted().

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

list< string > NPL::LexicalAnalyzer::Literalize | ( |  | ) | const

根据中间结果取字符串列表。

注解
  其中每一项是完整的字面量或非字面量。

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

参考 cbuf, YSLib::i, qlist , 以及 CHRLib::s.

void NPL::LexicalAnalyzer::ParseByte | ( | char | c,
|  | Unescaper | unescape = `NPLUnescape`,
|  | PrefixHandler | prefix_handler = `HandleBackslashPrefix`
| ) |  |

解析单个字符并添加至字符解析结果。

注解
  参数指定反转义算法。

警告
  在同一个分析器对象上混用不等价的多种解析方法或反转义算法的结果未指定。

自从
  build 588

注解
  记录引号并忽略空字符。

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

参考 CHRLib::c, cbuf, FilterForParse(), ld, qlist , 以及 YB_ATTR_fallthrough.

函数调用图:

void NPL::LexicalAnalyzer::ParseQuoted | ( | char | c,
|  | Unescaper | unescape = `NPLUnescape`,
|  | PrefixHandler | prefix_handler = `HandleBackslashPrefix`
| ) |  |

解析单个字面量字符并添加至字符解析结果：反转义以外无视边界字符。

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

参考 CHRLib::c, cbuf , 以及 FilterForParse().

参考自 NPL::Session::DefaultParseQuoted().

函数调用图:

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

NPL::LexicalAnalyzer::PDefH | ( | void | ,
|  | ParseRaw | ,
|  | char | c
| ) |  |

直接添加字符。

自从
  build 763

## 类成员变量说明

const string NPL::LexicalAnalyzer::Buffer

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

string NPL::LexicalAnalyzer::cbuf

private

字符解析中间结果。

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

参考自 Literalize(), ParseByte() , 以及 ParseQuoted().

bool NPL::LexicalAnalyzer::CheckLineConcatnater

自从
  build 545

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

参考自 FilterForParse().

char NPL::LexicalAnalyzer::ld

private

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

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

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

参考自 ParseByte().

char NPL::LexicalAnalyzer::line_concat = {}

private

指示当前续行符状态。

自从
  build 545

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

vector<size_t> NPL::LexicalAnalyzer::qlist

private

字符解析中间结果中非转义的引号出现的位置的有序列表。

自从
  build 545

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

参考自 Literalize() , 以及 ParseByte().

UnescapeContext NPL::LexicalAnalyzer::unescape_context

private

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

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

自从
  build 545

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

参考自 FilterForParse().

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

- Lexical.h
- Lexical.cpp