使用PEG.jl编写的parser性能不理想,有什么BNF格式的包可以推荐的?

最近用PEG.jl写了个小Parser,运行效果不太理想啊。解析一行语句的速度有点接受不了,不知道是不是我设计的原因,感觉也没多少条@rule。Julia的快在计算上是毋庸置疑的。
对Julia的使用我是完全当静态类型用的,每次解析也不是重新启动,而是写成一个小的REPL,哎,虽然开发过程很舒爽,|> 真是强大,可运行结果不太理想。

有空再手写一个Parser对比一下,再用Rust对比写试试。

大家有什么Julia的BNF解析工具包推荐么?或者调C/C++代码解析?

Julia的数组处理是很愉快的

Match.jl 来写应该也挺方便的吧

贴代码啊,不然怎么知道慢在哪里呢,很多时候Julia的慢是程序设计不够好,不能怪语言啊
Julia的快体现在大数据处理上(我想应该是这样)


这个是PEG定义rule的语法,我写了大约有十几条。
那么下面是对匹配的规则进行处理,我在其它文件里为这些rules定义了相应的不可变结构体

有了这些准备就可以解析了:
写个shell:
image
parsese只是对PEG内置函数parse_whole的一个简单封装,连错误处理都没有,应该给个try:
image
大体就是这些,运行shell函数后输入一行定义的语法,大约两秒左右才出结果~

快的情况下也要1秒吧,这个速度目前还不能接受

@thautwarm 的RBNF应该是比较快的。Match.jl的速度很慢,请用MLStyle.jl

1 个赞

以及请不要使用模糊的题目。这样不方便别人快速搜索。

好的,下次会多注意的,非常感谢您的推荐!这就去研究下MLStyle.jl :slight_smile:

更新一下,目前除了第一次回有点慢之外,之后就很快了!也非常感谢大家的帮助。

第一次有一个编译的过程,如果你在意第一次的编译时间可以用PackageCompiler编译出一个sysimg。

1 个赞