Andrew's Blog

Make things as simple as possible, but no simpler -- Albert Einstein
posts - 6, comments - 4, trackbacks - 0, articles - 5

Boost.Spirit

摘要: Spirit被设计成实用的解析工具。从嵌入到C++中的EBNF形式说明生成正常工作的解析器之能力至少可以极大地缩短开发时间。虽然当我们想要开发一门像C或Pascal那样的计算机语言时,会选用类似YACC或ANTLR这样强大而独立的解析器生成工具;但是当我们希望编写一个极其微小的解析器时,该方法总给人一种“杀鸡焉用牛刀”的感觉。在这种情况下,程序员通常不会将手头的工作当成正式的解析任务,而是用原始的工具(比如scanf)对其进行专门地处理。诚然,像正则表达式程序库(如boost regex)或扫描器(如boost tokenizer)这样的工具是存在的。然而当我们需要编写更为精巧的解析器时,这些工具就显得有些力不从心了。如果仍试图使用这些工具来编写中等复杂程度的解析器,则会导致难于理解和维护的代码。 阅读全文

posted @ 2005-01-16 22:47 andrew 阅读(1038) | 评论 (2)  编辑 |

摘要: 介绍 Spirit是一个使用模板元编程技术实现的面向对象的递归下降解析器生成器框架。表达式模板允许我们完全使用C++来模拟扩展巴克斯范式(EBNF)的语法。 在Spirit框架中,我们仅仅使用C++就能编写目标文法。直接嵌入的EBNF文法说明可以自由地与其他C++代码混合的一起。由于C++模板的再生能力,这种文法说明是可以直接执行的。请回想一下,常规的编译器之编译器或解析器的生成器必须执行一个附加的翻译步骤,即将EBNF源代码转换为C或C++代码。 阅读全文

posted @ 2004-12-18 18:01 andrew 阅读(773) | 评论 (0)  编辑 |

摘要: 序言 “符合大多数“优良”(易懂、灵活、高效)标准的设计实例包括递归下降解析器,它是传统的过程式代码。另一个实例是STL,它是一个容器和算法的泛型库,且在很大程度上依赖于传统的过程式代码和参数多态性。” -- Bjarne Stroustrup 历史 十五年前,我用Pascal语言写了我的第一个计算器程序。那是我最难忘的编码经历之一。令我感到惊奇的是,相互递归的函数集合竟能作为文法说明的模型。最终,我从求学经历中获得的技能变为了实践。我总要不时地做一些文法解析工作。例如,每当我需要做任何形式的(甚至是二进制形式的)I/O操作时,我总是设法用类Pascal的语法图写出文法,从而略显正式地处理该任务。这种方法十分奏效。 阅读全文

posted @ 2004-12-17 10:20 andrew 阅读(1092) | 评论 (1)  编辑 |