2011-02-10 105 views
1

我试图解析一种自定义语言(与JSON不太相似),并且我决定尝试使用boost表达式,因为它看起来很有趣。是语法错误报告可能与boost :: xpressive语法?

但是,当xpressive匹配失败时,它只会失败。有什么方法可以实现某种错误报告?就像'表达式匹配到第47个字符(我可以从中得到行号)。

我可以查看一下如何可以定制每个子表达式以查找其他标记或匹配,然后查找它想要的并在此情况下报告错误,但似乎这将是一种非常复杂的方式正在做。

是否有任何功能表达(或任何人都可以提出一种方法),可以让我做到这一点?

谢谢。

回答

0

我建议使用ANTLR来代替。这是一个很好的妥协之间的冷静,像Boost Spirit/Qi和像lex和yacc这样的强大工具。它可以做很多更聪明的错误报告,而不需要太多的努力。

请注意,目前ANTLR版本2和3都是常用的; 2包含C++代码生成,而3代码不包含,因此您现在可能想要坚持使用“较旧”版本(如果v3最终具有C++目标,则移植应该相当简单)。

+0

谢谢。我过去使用过flex/bison,这很好用,我知道其他的解析器生成器像ANTLR(我甚至用python写过)。对于这个问题,语言的简单性意味着无需手动编写递归下降解析器并且报告错误(我可以这样做)。但XPressive是在C++中,没有额外的构建步骤(在多个操作系统上构建时可能会很痛苦),如果可能的话,我想使用它。我尝试了boost :: spirit,但编译器错误的额外复杂性和长度/不可编辑性让我失望。 – DaedalusFall 2011-02-14 13:12:44