如何使用Scala解析器组合器处理不区分大小写的关键字

时间:2016-06-28 08:25:42

标签: scala parsing parser-combinators

某些语言(如SQL)具有不区分大小写的关键字(和/或标识符)。使用TokenParsers时,如何处理此不区分大小写?一个选项是生成关键字的所有可能的案例组合,但是如果有很多关键字(在我的情况下它以某种方式导致whitespace中的堆栈溢出!)并且不会对任何标识符起作用,则执行得非常糟糕情况下。

[自我回答希望别人不会花一天时间在这上面。]

1 个答案:

答案 0 :(得分:2)

这可以通过覆盖std::aligned_union来完成(假设关键字以大写形式给出,与SQL一样正常):

static_assert(sizeof(F) <= sizeof(buffer));
static_assert(alignof(F) <= alignof(buffer));
// OK to proceed
new (&buffer) F(std::move(f));
相关问题