cyt

很久以前见识过spirit,觉得十分好用。不过spirit越做越庞大,对编译器的要求越来越高,加上加入了boost,庞大的让我却步。有时候想简单用一下,实在不忍心引入boost这个庞然大物。

今天看到一个The Parser Toolkit http://sourceforge.net/projects/theptk/ 作者号称受到spirit的启发做的。程序比较简短,就两个头文件,帮助也比较清晰,功能不算十分强劲,但也够用了。

之所以喜欢spirit、theptk之类的东西而不喜欢用yacc之类的,主要是不喜欢程序需要预处理,而且代码这样比较直观,和C++结合比较好。

posted on 2005-10-08 14:49 cyt 阅读(804) 评论(4)  编辑 收藏 引用
Comments
  • # re: 除了spirit的另一个选择
    Exile_
    Posted @ 2005-10-22 03:57
    codeproject 上有一个 yard 库, 也很简单,同时他对于文法的定义没有采用操作符重载的形式,比如也就省去了对于临时对象的管理,效率更高.
    比如 rule<input_t> E = F || T;
    变为 struct E : or_<E, T> {};  回复  更多评论   
  • # re: 除了spirit的另一个选择
    cyt
    Posted @ 2005-10-23 21:16
    多谢介绍!

    yard这个project可以在 http://sourceforge.net/projects/yard-parser/找到,另外作者主页在 http://www.cdiggins.com/; codeproject上也有一些相关的介绍文章:

    http://www.codeproject.com/cpp/yard-xml-parser.asp

    http://www.codeproject.com/cpp/yard-tokenizer.asp

      回复  更多评论   
  • # re: 除了spirit的另一个选择
    eXile
    Posted @ 2005-10-24 14:12
    我简单地看了一下 theptk 的实现, 发现有两个不爽的地方:
    1. shared_ptr的使用和 weak_ptr 的古怪设计, 如果在设计时明确的区分 rule 和 grammar_p 的概念,这两个智能指针是完全可以不用的;
    2. 事件机制的设计, 不直观,太复杂 为什么不像 spirit 一样用操作符[] 实现语义动作呢? 这样实现并不复杂, 象 Biscuit parser库(这是一个在 yard 基础上设计出来的库,也可在codeproject 上找到) ,就加了一个actor_分析器,实现语义动作.  回复  更多评论   
  • # re: 除了spirit的另一个选择
    cyt
    Posted @ 2005-10-24 17:27
    应该是不难实现的。
    另外很不爽的一个地方就是处理语义的地方,没有传入参数,也就是说一段代码只能够有一种处理语义的方法。
    作者只发布了一个版本,到现在没有更新,作者也没有再出现过,都不知道作者是不是已经放弃这个东西了……  回复  更多评论   

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理