• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Dwarfartisan/goparsec: Haskell Parsec Libraray's golang version

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称(OpenSource Name):

Dwarfartisan/goparsec

开源软件地址(OpenSource Url):

https://github.com/Dwarfartisan/goparsec

开源编程语言(OpenSource Language):


开源软件介绍(OpenSource Introduction):

GoParsec

Haskell Parsec Libraray's golang version

PLEASE USE goparsec2 BUT THIS. GOPARSEC2 LIKE HASKELL PRASEC LIBRARY THAN GOPARSEC. IT SUPPORT MONAD BIND/THEN/OVER.

Document

Paper Style

http://bms.tratao.com/desktop/doc/0c3802e4ee404a71407f34996eff98ef

Slide Style

http://bms.tratao.com/slide/simple/0c3802e4ee404a71407f34996eff98ef##1

概述

还是那句话,公司自用的东西肯定不会坑,但是可能达到一个可用阶段后会停一段时间。

第一步先支持几个常用组合子,让公司的项目可以做下去,然后……

我的项目大量的参考了 https://github.com/sanyaade-buildtools/goparsec ,但是这个项目面向 byte流,而我需要一个面向 unicode 或更通用的规则解析的工具。所以只好重新实现了一遍。

这里 https://github.com/vito/go-parse 还有一个实现,但是五年没有更新了。

测试

由于用在团队内部一个 markdown like 的文档内容解析功能上, 所以目前的测试用例都是基于 markdown 转 json 这个场景展开的。

对 parsec 和 parsex 的深度运用,可以参见 http://github.com/Dwarfartisan/gisp ,这是 一个类 lisp 语言的解释器,里面大量运用了 parsec 和 parsex 。

Parsex

Parsex 是 go parsec 的一个包。parsec 的主干是以一个字符流 state parser 接口为基础的。在工作 中,我遇到了一些更通用的规则构造和解析的需求。所以在 parsec/parsex 包里,我写了一个基于 []interface{} 序列的组合子功能。其实这本质上是因为 golang 没有泛型,否则直接把 state parer 泛型化就可以了。这也是 Haskell 原版的 parsec 没有这种区分的原因。

parsex/combinator_test.go 文件中包含了一个测试用例,可以看作是对一个经过词法解析的简单 token 流的语法解析。

最后

如果有同行参与进来一起把它通用化当然最好啦,口嫌体正直什么的我是不会做的 ε-(´∀`; ) 。

对了我还准备再用 swift 做一遍,这个主意怎么看都酷毙了,目前唯一就缺个会写代码的了……




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap