《parsing techniques》中文翻译和正则引擎解析技术入门
生活随笔
收集整理的這篇文章主要介紹了
《parsing techniques》中文翻译和正则引擎解析技术入门
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://parsing-techniques.duguying.net/(中文版)
https://swtch.com/~rsc/regexp/
https://blog.csdn.net/maxners/article/category/7381272(中文版)
DFA的應用:簡單bool表達式解析的例子
/*********************************************************
DFA
"{uint1}&({uint2}|{uint3})" => "_&(_|_)"
---'{'-->
(S_templat) (S_cmp_unit)
<--'}'---
*********************************************************/
bool init(const std::string& orign_expr_str)
{
enum class ECharStatus
{
templat = 1,
cmp_unit = 2
};
std::string ret_template_expr;
std::vector<std::pair<size_t, std::string>> ret_cmp_unit_pair_list;
std::string cmp_uint_str;
ECharStatus status = ECharStatus::templat;
for (const char& c : orign_expr_str)
{
switch (c)
{
case '{':
{
if (status == ECharStatus::cmp_unit)
return false;
status = ECharStatus::cmp_unit;
}
break;
case '}':
{
if (status == ECharStatus::templat)
return false;
status = ECharStatus::templat;
ret_template_expr.push_back('_');
ret_cmp_unit_pair_list.push_back(std::make_pair(ret_template_expr.size() - 1, cmp_uint_str));
cmp_uint_str.clear();
}
break;
default:
{
if (status == ECharStatus::templat)
ret_template_expr.push_back(c);
if (status == ECharStatus::cmp_unit)
cmp_uint_str.push_back(c);
}
break;
}
}
if (!cmp_uint_str.empty() || status != ECharStatus::templat)
return false;
return true;
}
總結
以上是生活随笔為你收集整理的《parsing techniques》中文翻译和正则引擎解析技术入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模拟器 | 如何安装ENSP,附上最详细
- 下一篇: 7-51 号码牌的制作 (10 分)