在提升精神中保留(但跳过)空白

时间:2014-12-10 00:35:40

标签: c++ parsing boost-spirit boost-spirit-qi

我正在与Boost Spirit合作。我使用Lex构建了一个自定义Lexer(经过测试和工作),并且正在使用Qi准备一个Parser。我的语法非常大:我的词法分析器有大约120个模式,我的解析器将有大约200个制作。

我想在我的令牌列表中保留空格,但在Qi中跳过它们。原因是因为我希望能够获取输入短语,在AST中进行修改,然后生成与保留空白的输入非常相似的输出。就处理空白而言,我熟悉两个选项:

  1. 略读词法分析器中的空格。但这不会起作用,因为我需要保留它。
  2. put' tok.WS'在我的所有作品中,在我的解析器中无处不在。这样可行,但会非常乏味,并且会以我想避免的方式模糊我的语法。
  3. 理想情况下,我可以让我的解析器忽略但接受'它看到它们的空白标记,并将它们添加到AST(我想要生成),类似于选项(2),但是会自动添加。这似乎是一种遥远的可能性。另一个选择是让词法分析器忽略我的空格标记,然后在标记和产品之间存储一个引用,这样我就可以通过检查提供给解析器的标记与它识别的产品之间的关系来构造我的输出。这可能效果很好,但我不知道从哪里开始实现它。

    考虑到上述所有情况,保留空格并记住输入短语中出现的位置的最佳方法是什么,以便我可以使用此信息构建输出短语?

0 个答案:

没有答案