文件名称:rex:确定性有限状态机的DSL
文件大小:15KB
文件格式:ZIP
更新时间:2024-06-02 11:30:34
racket dsl regular-expression dfa Racket
雷克斯 一种描述DFA的语言的概念实现的证明。 正则表达式有什么问题? 在很多地方使用正则表达式显然不是最佳的工具。 例如,以语法突出显示为例,我们应该改用解析器。 如果您看一些用正则表达式(Perl,Ruby等)内置支持的语言编写的源代码,您可能还会发现其他残酷的用法。 问题在于正则表达式使编写生成大量代码且速度慢的表达式变得非常容易(请参见理论背景信息)。 这种方法使编写效率低下的表达式变得非常困难。 rex的执行时间和内存使用量与表达式的长度大致成比例。 这种方法更好吗? 我不知道,自己决定是否喜欢。 理论背景 从数学的角度来看,正则表达式存在以下问题: 正则表达式很容易转换为非确定性有限自动机(NFA),而计算机只能执行确定性有限状态机(DFA)。 两者在数学上是等效的,可以相互转换,但要付出一定的代价:要将NFA转换为DFA,最坏的情况下,DFA中的状态数将为O(2 ^
【文件预览】:
rex-master
----.gitignore(64B)
----.gitlab-ci.yml(614B)
----LICENSE(1KB)
----reader.rkt(308B)
----Readme.md(4KB)
----tests()
--------test-basic.rkt(1009B)
--------test-not.rkt(617B)
--------test-branches.rkt(457B)
--------helper.rkt(443B)
--------test-parser.rkt(2KB)
--------test-expander.rkt(487B)
--------test-cycles.rkt(495B)
----parser.rkt(961B)
----tokenizer.rkt(803B)
----expander.rkt(11KB)
----scribblings()
--------rex.scrbl(7KB)
----info.rkt(327B)
----main.rkt(91B)