Chinaunix

标题: 有人了解能生成全宇宙最快代码的ragel吗?求指点啊。很急 [打印本页]

作者: dsy198816    时间: 2016-01-19 09:36
标题: 有人了解能生成全宇宙最快代码的ragel吗?求指点啊。很急
这是个能生成c++ java c的代码生成工具,生成的代码比标准库都快...无赖。。英文不好又没中文资料。。。求指点下 下面是官方给的最简单的例子。。。

atoi c标准库函数 把字符串转换成整数

%%{
        machine atoi;
        write data;
}%%

long long atoi( char *str )
{
        char *p = str, *pe = str + strlen( str );
        int cs;
        long long val = 0;
        bool neg = false;

        %%{
                action see_neg {
                        neg = true;
                }

                action add_digit {
                        val = val * 10 + (fc - '0');/*我只看懂了这里  没读一位应该循环执行这里一次.但是循环在哪里??其它地方都是什么意思?求高手指教?*/
                }

                main :=
                        ( '-'@see_neg | '+' )? ( digit @add_digit )+
                        '\n';

                # Initialize and execute.
                write init;
                write exec;
        }%%

        if ( neg )
                val = -1 * val;

        if ( cs < atoi_first_final )
                fprintf( stderr, "atoi: there was an error\n" );

        return val;
};

作者: lxyscls    时间: 2016-01-19 10:15
你要写汇编,我觉得应该比它快
作者: dorodaloo    时间: 2016-01-19 16:49
我大致看了一下,
我也挺奇怪 %% 这一串东西从哪儿来的?
作者: dsy198816    时间: 2016-01-19 17:54
求熟悉这个的大神指点下啊
作者: hanxin83    时间: 2016-01-20 11:03
不敢非常确定. 但感觉是一个语法描述文件而已, 根据语法描述文件来生成代码.

全宇宙最快? 呵呵
作者: gkmail    时间: 2016-01-20 15:43
看说明应该是把基于正则表达式的字符串处理翻译成C语言代码状态机匹配。这样肯定比调用正则表达式库匹配字符串后再做处理效率要高。demo就是匹配一个表示整数的字符串,每匹配一个字符调用一次add_digit。
作者: gkmail    时间: 2016-01-20 16:17
atoi将一个字符串转化为整数。字符串匹配可以用正则表达式 ( '-' | '+' )? ( digit)+  表示,@see_neg表示匹配到最前面'-'时的动作,@add_digit表示匹配到一个数字字符时的动作。
作者: 爻易    时间: 2016-01-21 16:06
语言多级化:以人读语言和机器语言为两端,中间的分级越来越多,每层都可以单独优化。

一看 val = -1 * val;

如果这算全宇宙最快,那超光速就更容易实现了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2