摘要: 最前面说到,现在的正则表达式引擎一般是用有限状态机(NFA)进行匹配。前面我们已经用parser得到了AST,现在我们来构建NFA。 一个有限状态机由5元组描述: 有限个状态的集合 一个起始状态 终止状态的集合 输入字符的集合 状态转移函数的集合 输入字符集合不需要我们定义。状态我们可以用一个整型数 阅读全文
posted @ 2020-12-19 18:59 RelaxDude 阅读(193) 评论(0) 推荐(0)
摘要: 修补parse table 上次写完的parse_table只能接受正确的输入,但是不能拒绝一些错误输入。 我们再看一下parse table: ( ) * + ? | ch \(\epsilon\) E (alt0) mod seq alt ch mod seq alt \(\epsilon\) 阅读全文
posted @ 2020-11-17 16:17 RelaxDude 阅读(260) 评论(0) 推荐(0)
摘要: 支持constexpr的对象 在实现parser前,我们要有几个数据容器。 Fixed String STL的string在C++20前还不支持constexpr,所以我们要自己实现一个简单的string对象。 template <int N> class fixed_string { privat 阅读全文
posted @ 2020-11-09 18:58 RelaxDude 阅读(183) 评论(0) 推荐(1)
摘要: Compile Time Regular EXpression(CTRE)是一个在编译期生成正则表达式(Regex)匹配器的C++库。因为是在编译期对表达式进行构建,这比很多运行期构建的regex库要高效很多,而且代码——包括生成的汇编——也更简洁易读,效果像这样: bool matched = c 阅读全文
posted @ 2020-11-07 16:20 RelaxDude 阅读(691) 评论(0) 推荐(2)