[so] Re: Parserul...

Maximilian Machedon maximilian.machedon at gmail.com
Mon Nov 14 17:02:32 EET 2005


10.
    cd exit
    cd quit
etc.

2 si 3 se pot rezolva folosind functiile:

getline()
yy_scan_string()
yy_delete_buffer()
(man flex)

    si modificand yyerror()


----- Original Message ----- 
From: "Maximilian Machedon" <maximilian.machedon at gmail.com>
To: "SO" <so at cursuri.cs.pub.ro>
Sent: Wednesday, November 09, 2005 5:34 PM
Subject: Re: Parserul...


    Am gasit cateva rezolvari pentru unele din problemele de mai jos:

5 si 6: tii intr-un vector (unul singur, evident) tot ce se aloca in
functiile

    new_word()   new_simple_command()   new_command()   bind_commands() din
        "parser.y" / "parser.tab.c"
    strdup() in doua locuri din fisierele "parser.l" / "lex.yy.c"

    si eliberezi tot ce a fost alocat.


7: trebuie reparat codul de la o functie:

void add_word_to_simple_command(simple_command_t *scmd, word_t *word)
{
    word_t *i;
    if (scmd->words == NULL)
    {
        scmd->words = word;
        return;
    }
    for(i=scmd->words; i->next; i=i->next)
        ;
    i->next=word;
}



----- Original Message ----- 
From: "Maximilian Machedon" <maximilian.machedon at gmail.com>
To: <so at cursuri.cs.pub.ro>
Sent: Monday, November 07, 2005 6:18 PM
Subject: Re: Parserul...


        Pai am mai identificat probleme:

    5. poti fi indus in eroare de parser si sa dealoci o chestie de doua
ori; problema e ca pointerii la numele lui stdout si stderr pot fi identici
(adica sa arate catre aceeasi structura, care trebuie dealocata doar o data)

    6. in cazul erorilor de sintaxa, yyerror face command = NULL; adica
memory leak! (in parser.y, pe la inceput)
        De exemplu:
            ls |
        da un leak

    7. parser-ul crapa ("segmentation fault") foarte frumos pentru unele
comenzi:

        exit 1

    8. lex.yy.c nu se compileaza pe windows decat daca adaugi:


#ifdef _WIN32
#include <io.h>
#endif

    9. lex.yy.c nu se compileaza ca C++ decat daca adaugi


#define YY_SKIP_YYWRAP 1
extern int yywrap();

        (sau ceva asemanator, sa fie simbol de C++, nu de C)


        Cam atat deocamdata, revin cu noi detalii cand sunt disponibile...
:-D


----- Original Message ----- 
From: Maximilian Machedon
To: so at cursuri.cs.pub.ro
Sent: Sunday, November 06, 2005 3:58 PM
Subject: Parserul...


        Banuiesc ca se considera ca parser-ul pe care l-am primit e bun,
adica orice comportament aberant al lui este acceptabil.
        Prin comportamente aberante inteleg urmatoarele:

1. yylex nu merge prea grozav, de exemplu afiseaza la stdout tot ce nu
recunoaste, si sunt unele chestii pe care nu le recunoaste; de exemplu

'mumu &' mumu

scoate la stdout ''

2. nici gramatica nu pare sa acopere bine toate cazurile; de exemplu
input-uri in genul

>>>>>>>>>>>

    par sa o dea peste cap

3. functia de tratare a erorilor poate astepta un EOL degeaba, de exemplu
pentru

mumu |
(urmat de end of line)

4. nu se compileaza cu C++ decat cu mici schimbari, pe ici pe colo (cast-uri
la valoare de return a lui malloc)

        Banuiesc ca nu vor exista teste cu asemenea cazuri, nu? Apropo, se
zicea ceva de un test public. Il vom avea la dispozitie pana expira termenul
temei?

            Maximilian Machedon CA343



More information about the so mailing list