将 BOOST Spirit X3 与自定义词法分析器结合使用

问题描述 投票:0回答:1

X3 解析器如何使用已经生成的标记向量。 如何定义规则,比如

enum class token { aa, bb, cc};    
auto rule = token::aa >> token::bb >> -token::cc;
std::vector<token> tokens{token::aa, token:bb, token:cc};
auto ok = parse(tokens.cbegin(), tokens.cend(), rule);

我有兴趣验证输入。

boost-spirit boost-spirit-x3
1个回答
0
投票

X3 不支持 Lex,而且可能永远不会支持。

从这里开始:

  • 使用 Lex 会使大部分最佳点消失,因为所有“高级”解析器(如
    real_parser
    [u]int_parser
    )都在窗外。 Spirit 开发者有记录表明他们不愿意使用 Lex。而且,Spirit X3 不再支持 Lex

我在这里快速搜索了原始引用:https://sourceforge.net/p/spirit/mailman/spirit-general/thread/CACBJYpn4YvXpKoU68cWZD4PmGG0R4kfe%3DVDu5PuTkA7S79QAoA%40mail.gmail.com/#msg34551953

词法分析器没有替代品,我怀疑 X3 是否会有替代品 一,除非有人贡献一些时间和精力。我个人 不真正使用它们,而是更喜欢纯气。如果你这样做 是的,纯 Qi 解析器可以与具有以下功能的解析器相媲美甚至优于 词法分析器(仅是轶事证据,未得到充分证实)。

X3 相对于 QI 的真正优势在于 1) 编译时间和 2) AST 建筑。解析应该或多或少相同。但是,再次在我的 经验来看,最耗时的操作是在AST构建中, 不解析也不进行词法分析。

提前对问题的冲击表示歉意,并提前感谢任何问题 见解。我很乐意将我们的解析器迁移到 X3,因为它似乎比 Qi 提供了许多好处。

再次请原谅回复延迟。

问候,
--
乔尔·德·古兹曼

当被问及时,Joel 在其他地方建议如果您的应用程序确实从中受益,则创建您自己的简单令牌流,例如这里https://sourceforge.net/p/spirit/mailman/spirit-general/thread/2A5FC1FD75EA0346A44CF4BD559664CD10CCEC%40SHEX-MB-09.ad.local/#msg34855244

© www.soinside.com 2019 - 2024. All rights reserved.