29 #include YFM_NPL_Lexical
36 : esc(-1), ld(), cbuf(), qlist()
103 if(
esc !=
size_t(-1))
107 else if(
esc !=
size_t(-1))
112 else if(b ==
'\\' &&
ld !=
char())
160 std::for_each(
qlist.cbegin(),
qlist.cend(), [&](
const size_t&
s){
163 result.push_back(
cbuf.substr(i,
s - i));
167 result.push_back(
cbuf.substr(i));
177 if(str.front() ==
'\'' && str.back() ==
'\'')
179 if(str.front() ==
'"' && str.back() ==
'"')
222 if(!str.empty() && str.back() ==
'\\')
234 string::const_iterator b, string::const_iterator e){
237 YAssert(!str.empty(),
"Null token found.");
240 dst.push_back(str.substr(0, 1));
246 dst.push_back(std::move(str));
256 for(
const auto& str : src)
259 if(str[0] !=
'\'' && str[0] !=
'"')
YF_API string MakeEscape(const string &)
转义字符串:替换指定字符串中的可转义字符。
list< string > Literalize() const
根据中间结果取字符串列表。
YF_API list< string > Tokenize(const list< string > &)
记号化:提取字符串列表中的记号。
YF_API string Deliteralize(const string &)
去除字面量边界分隔符。
_tString get_mid(const _tString &str, typename _tString::size_type l=1)
取删除前缀和后缀的子字符串。
static yconstexpr size_t MaxEscapeLength
最大转义序列长度。
_tString && trim(_tString &&str, typename string_traits< _tString >::const_pointer t=&to_array< typename string_traits< _tString >::value_type >("\n\r\t\v ")[0])
删除字符串中指定的连续前缀与后缀字符。
char ld
字面分隔符状态:表示正在处理字面量中的有效字符。
yconstfn bool IsGraphicalDelimeter(char c)
判断是否为 NPL 图形分隔符。
list< size_t > qlist
字符解析中间结果中非转义的引号出现的位置的有序列表。
YF_API list< string > Decompose(const string &)
分解字符串为记号。
size_t esc
转义状态:表示是否正在处理的有效转义序列的长度。
YF_API char CheckLiteral(const string &)
检查指定字符串是否为字面量。
#define yunseq
无序列依赖表达式组求值。
_tIn split_l(_tIn b, _tIn e, _fPred is_delim, _fInsert insert)
以指定字符分割字符序列。
yconstfn bool IsDelimeter(char c)
判断是否为 NPL 分隔符。
char escs[MaxEscapeLength]
有效转义序列。
#define YAssert(_expr, _msg)