YSTest: LexicalAnalyzer类 参考

YSTest PreAlpha_b400_20130424 The YSLib Test Project

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

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

全部 类 命名空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义 组 页
Public 成员函数 | Public 属性 | 静态 Public 属性 | Private 成员函数 | Private 属性 | 所有成员列表
LexicalAnalyzer类 参考

词法分析器。 更多...

`#include <Lexical.h>`

LexicalAnalyzer 的协作图:
[图例]

## Public 成员函数

| LexicalAnalyzer ()
| DefGetter (const ynothrow, const string &, Buffer, cbuf) DefGetter(const ynothrow
void | ParseByte (byte)
list< string > | Literalize () const
| 根据中间结果取字符串列表。

## Public 属性

const list< size_t > | Quotes

## 静态 Public 属性

static yconstexpr size_t | MaxEscapeLength = 8
| 最大转义序列长度。

## Private 成员函数

void | HandleEscape ()
void | PushEscape ()

## Private 属性

size_t | esc
| 转义状态：表示是否正在处理的有效转义序列的长度。
char | escs [MaxEscapeLength]
| 有效转义序列。
char | ld
| 字面分隔符状态：表示正在处理字面量中的有效字符。
string | cbuf
| 字符解析中间结果。
list< size_t > | qlist
| 字符解析中间结果中非转义的引号出现的位置的有序列表。

## 详细描述

词法分析器。

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

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

自从
  build 329

以字节为基本单位的词法分析器。 接受字节输入迭代器的输入，结果存放于 string 中。 基本字符集的字符的值保证在区间 [0, 0x7F) 内。 可接受的单字符词法分隔符都保证在基本字符集内。 输出规则（按优先顺序）： 断行连接：反斜杠之后紧接换行符的双字符序列视为续行符，会被删除； 转义：转义序列替换为被转义字符； 字面量：分析至未被转义的单引号或双引号后进入字面量分析状态，无视以下规则， 直接逐字节输出原始输入，直至遇到对应的另一个引号。 窄字符空白符替换：单字节空格、水平/垂直制表符、换行符 被替换为单一空格；回车符会被忽略； 原始输出：其它字符序列逐字节输出。 支持转义序列为 "\\" 、 "\a" 、 "\b" 、 "\f" 、 "\n" 、 "\r" 、 "\t" 和 "\v" 。 除以下说明外，转义序列语义参见 ISO C++11 （除 raw-string-literal 外）； 其它转义序列由派生实现定义。 除了反斜杠转义外，其它转义仅适用于字面量。 反斜杠转义：连续两个反斜杠被替换为一个反斜杠； 引号转义：反斜杠之后紧接单引号或双引号时，反斜杠会被删除。

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

## 构造及析构函数说明

LexicalAnalyzer::LexicalAnalyzer | ( |  | ) |

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

## 成员函数说明

LexicalAnalyzer::DefGetter | ( | const ynothrow | ,
|  | const string & | ,
|  | Buffer | ,
|  | cbuf |
| ) |  | const

void LexicalAnalyzer::HandleEscape | ( |  | ) |

private

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

参考 cbuf,esc,escs,ld,MaxEscapeLength,PushEscape() , 以及 YAssert.

参考自 ParseByte().

函数调用图:

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

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

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

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

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

参考 cbuf , 以及 qlist.

void LexicalAnalyzer::ParseByte | ( | byte | b | ) |

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

参考 cbuf,esc,escs,HandleEscape(),ld,PushEscape() , 以及 qlist.

函数调用图:

void LexicalAnalyzer::PushEscape | ( |  | ) |

private

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

参考 cbuf,esc,escs , 以及 yunseq().

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

函数调用图:

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

## 类成员变量说明

string LexicalAnalyzer::cbuf

private

字符解析中间结果。

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

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

size_t LexicalAnalyzer::esc

private

转义状态：表示是否正在处理的有效转义序列的长度。

注解
  不包括反斜杠。
  值为 size_t(-1) 时表示当前不处理转义字符。

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

参考自 HandleEscape(),ParseByte() , 以及 PushEscape().

char LexicalAnalyzer::escs[MaxEscapeLength]

private

有效转义序列。

注解
  不包括反斜杠。

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

参考自 HandleEscape(),ParseByte() , 以及 PushEscape().

char LexicalAnalyzer::ld

private

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

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

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

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

yconstexpr size_t LexicalAnalyzer::MaxEscapeLength = 8

static

最大转义序列长度。

注解
  包括反斜杠。

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

参考自 HandleEscape().

list<size_t> LexicalAnalyzer::qlist

private

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

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

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

const list<size_t> LexicalAnalyzer::Quotes

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

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

- Lexical.h
- Lexical.cpp