相关疑难解决方法(0)

最小化boost :: spirit编译时间

任何减少boost :: spirit编译时间的想法?

我刚刚将flex解析器移植到boost :: spirit.EBNF有大约25条规则.

结果运行良好,运行时性能良好.

问题是编译需要永远!它需要大约十分钟,并且需要几乎一千兆字节的内存.原始的flex解析器在几秒钟内编译完成.

我正在使用boost版本1.44.0和Visual Studio 2008.


在Joel de Guzman的文章"最佳实践"中,它说

具有复杂定义的规则严重损害了编译器.我们已经看到超过一百行的规则,需要花费几分钟来编译

好吧,我没有接近那么久,但我的编译仍然需要超过几分钟

这是我语法中最复杂的部分.它是以某种方式分解成较小部分的候选者吗?

    rule
        =   (   tok.if_ >> condition  >> tok.then_ >> *sequel  )                            [ bind( &cRuleKit::AddRule, &myRulekit ) ]
        |   (   tok.if_ >> condition  >> tok.and_ >> condition >> tok.then_ >> *sequel  )   [ bind( &cRuleKit::AddRule, &myRulekit ) ]
        ;

    condition
        =   ( tok.identifier >> tok.oper_ >> tok.value )                                    [ bind( &cRuleKit::AddCondition, &myRulekit, _pass, _1, _2, _3 ) ]
        |   ( tok.identifier >> …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-spirit

27
推荐指数
2
解决办法
3619
查看次数

Bison可以解析UTF-8字符吗?

我正在尝试制作一个Bison解析器来处理UTF-8字符.我不希望解析器实际解释Unicode字符值,但我希望它将UTF-8字符串解析为字节序列.

现在,Bison生成以下代码,这是有问题的:

  if (yychar <= YYEOF)
    {
      yychar = yytoken = YYEOF;
      YYDPRINTF ((stderr, "Now at end of input.\n"));
    }
Run Code Online (Sandbox Code Playgroud)

问题是UTF-8字符串的许多字节将具有负值,并且Bison将负值解释为EOF,并停止.

有没有解决的办法?

c++ utf-8 bison

8
推荐指数
1
解决办法
3088
查看次数

标签 统计

c++ ×2

bison ×1

boost ×1

boost-spirit ×1

utf-8 ×1