YSTest  PreAlpha_b400_20130424
The YSLib Test Project
 全部  命名空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义  
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.h72 行定义.

构造及析构函数说明

LexicalAnalyzer::LexicalAnalyzer ( )

在文件 Lexical.cpp33 行定义.

成员函数说明

LexicalAnalyzer::DefGetter ( const ynothrow  ,
const string &  ,
Buffer  ,
cbuf   
) const
void LexicalAnalyzer::HandleEscape ( )
private

在文件 Lexical.cpp38 行定义.

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

参考自 ParseByte().

函数调用图:

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

list< string > LexicalAnalyzer::Literalize ( ) const

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

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

在文件 Lexical.cpp154 行定义.

参考 cbuf , 以及 qlist.

void LexicalAnalyzer::ParseByte ( byte  b)

在文件 Lexical.cpp97 行定义.

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

函数调用图:

void LexicalAnalyzer::PushEscape ( )
private

在文件 Lexical.cpp89 行定义.

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

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

函数调用图:

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

类成员变量说明

string LexicalAnalyzer::cbuf
private

字符解析中间结果。

在文件 Lexical.h101 行定义.

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

size_t LexicalAnalyzer::esc
private

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

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

在文件 Lexical.h87 行定义.

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

char LexicalAnalyzer::escs[MaxEscapeLength]
private

有效转义序列。

注解
不包括反斜杠。

在文件 Lexical.h92 行定义.

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

char LexicalAnalyzer::ld
private

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

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

在文件 Lexical.h97 行定义.

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

yconstexpr size_t LexicalAnalyzer::MaxEscapeLength = 8
static

最大转义序列长度。

注解
包括反斜杠。

在文件 Lexical.h79 行定义.

参考自 HandleEscape().

list<size_t> LexicalAnalyzer::qlist
private

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

在文件 Lexical.h105 行定义.

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

const list<size_t> LexicalAnalyzer::Quotes

在文件 Lexical.h111 行定义.


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