Portál AbcLinuxu, 26. dubna 2024 10:25


Dotaz: bison - parsovani z pameti

6.10.2008 12:37 Xóža Hňabaj | skóre: 15 | blog: popcorp | Brno
bison - parsovani z pameti
Přečteno: 335×
Odpovědět | Admin
Zdravim, zajimalo by me, jak parsovat pomoci bisona kusy pameti - a to nejlepe reentrantne. Vim, ze pomoci %parse-param si muzu pridat parametr do volani yyparse(), ale nechapu, jak procpat string k zparsovani.

Diky.
Jednaokový biu
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.10.2008 10:45 Xóža Hňabaj | skóre: 15 | blog: popcorp | Brno
Rozbalit Rozbalit vše Re: bison - parsovani z pameti
Odpovědět | | Sbalit | Link | Blokovat | Admin
tak uz jsem na to dosel - je potreba predefinovat makro YY_INPUT, a napsat si vlastni mechanismus predavani retezcu.


int ppp_getinput(char *buf, int maxlen);
#undef YY_INPUT
#define YY_INPUT(buf, retval, maxlen) (retval = ppp_getinput(buf, maxlen))

struct {
    char *data;
    int len;
    void *lex;
} ppp_data;


int ppp_from_mem(char *buf, int len)
{
    ppp_data.data = buf;
    ppp_data.len = len;
    yyparse();
    return 0;
}

int ppp_getinput(char *buf, int maxlen)
{
    int retval = 0;


    if ( maxlen > ppp_data.len ) {
        maxlen = ppp_data.len;
    }
    memcpy(buf, ppp_data.data, maxlen);
    ppp_data.data += maxlen;
    ppp_data.len -= maxlen;
    retval = maxlen;
    return retval;
}
Jednaokový biu
7.10.2008 14:51 Ivan
Rozbalit Rozbalit vše Re: bison - parsovani z pameti
Gratuluju. Kdysi jsem to taky resil, ale uplne jsem zklamal. Zamotal jsem se do tech maker a nakonec jsem skoncil u boost::spirit.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.