سؤال

أحتاج إلى تنفيذ تعبيرات منتظمة في برنامج C ++ الذي أكتبه ، وأردت استخدام RE2 لكنني لم أتمكن من تجميعها على Windows. هل يعرف أي شخص مكتبة تعبير منتظمة أخرى أو أي شيء يطلق عليه هو الذي يتجمع بسهولة على Windows وليس محرك Regex "التراجع" ، ولكنه عبارة عن نظرية Automata (مهما كان هذا يعني) مثل RE2؟

أو مجرد معرفة كيفية تجميع RE2 على Windows سيكون مثاليًا.

هل كانت مفيدة؟

المحلول

تعتبر التعبيرات العادية جزءًا من معيار TR1 ، لذا فمن المحتمل أن يكون لديك بالفعل ملف <tr1/regex> رأس ذلك يحتوي على أ std::tr1::regex الطبقة والوظائف ذات الصلة.

نصائح أخرى

القي نظرة على

http://www.complang.org/ragel/

إنه DSL خارجي لذلك ليس من الناحية الفنية C ++. ومع ذلك ، حيث يولد C ++ / C النقي من التعبيرات العادية ، يجب أن يكون أسرع بكثير من أي شيء تم بناؤه في وقت التشغيل. /

فمثلا.

action dgt      { printf("DGT: %c\n", fc); }
action dec      { printf("DEC: .\n"); }
action exp      { printf("EXP: %c\n", fc); }
action exp_sign { printf("SGN: %c\n", fc); }
action number   { /*NUMBER*/ }

number = (
    [0-9]+ $dgt ( '.' @dec [0-9]+ $dgt )?
    ( [eE] ( [+\-] $exp_sign )? [0-9]+ $exp )?
) %number;

main := ( number '\n' )*;

احصل على تجميع لأسفل إلى

st0:
    if ( ++p == pe )
        goto out0;
    if ( 48 <= (*p) && (*p) <= 57 )
        goto tr0;
    goto st_err;
tr0:
    { printf("DGT: %c\n", (*p)); }
st1:
    if ( ++p == pe )
        goto out1;
    switch ( (*p) ) {
        case 10: goto tr5;
        case 46: goto tr7;
        case 69: goto st4;
        case 101: goto st4;
    }
    if ( 48 <= (*p) && (*p) <= 57 )
        goto tr0;
    goto st_err;

لدي منفذ RE2 لنظام التشغيل Windows في http://code.google.com/p/re2win/ . إنه يبني مع الكثير من التحذيرات ، لا أخطاء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top