marți, 26 ianuarie 2010

Linux + PPPoE (RDS)

Multa lume a semnalat probleme cu asta, desi mie pe slackware vad ca mi-a mers f bine si frumos (am incercat doar pentru ca mi s-a futut routerul si innebuneam sa stau doar pe win).

So, cum se face: (multumiri celui care a scris postul de aici)

pppoe-setup

Easy script, if you know basic English. Iti seteaza absolut tot ce ai nevoie si salveaza configurarile.

pppoe-connect

Recomand sa dati asta prima data, pentru ca are un output mai detaliat, in caz ca apare vreo eroare.


pppoe-stop

Pentru terminarea conexiunii


pppoe-start

Ca sa porniti conexiunea in general, puteti da comanda asta, care are mai putin output.

Si dupa faceti un script la boot cu pppoe-start n you're done ^^

joi, 14 ianuarie 2010

Mic tutorial de lex/GNU flex

Acest mic tutorial va va spune, pe scurt, tot ce aveti nevoie pentru a face un program elementar de analiza sintactica n more cu GNU flex (da, inclusiv tema la LFA, care nu va va lua mai mult de 1h dupa ce cititi asta).

  • Ce dreq e GNU flex?
 Practic, este un wrapper peste C, un program care citeste dintr-un fisier o serie de reguli si genereaza un alt fisier cu cod sursa .c, care are vreo 1000 de linii de cod.

In esenta, reprezinta o serie de reguli de forma expresie regulata -> instructiuni de executat la gasirea ei in input.
  • Cum il folosesc?
Iei si instalezi programul de aici.  Scrii tot ce trebuie intr-un fisier .flex, si dupa rulezi "flex fisier.flex" dintr-o consola, si iti va genera lex.yy.c.
  • Bine bine da in ce consta mai exact?
Sunt 3 sectiuni in program, despartite prin "%%":
intro
%%
expresii regulate si instructiuni
%%
other code

  • Ce altceva mai trebuie sa stiu?
- Tot ce scrii intre %{ si %} va fi copiat direct in codul sursa generat (si de obicei astea se pun in intro sau other code, in functie de necesitati)
- o lista cu toate expresiile regulate pe care le stie se gaseste aici.
- yyin - pointer catre input. da, poti sa faci un yyin=fopen(argv[1],"r");
- yytext - in asta e memorata linia curenta analizata in fisier;
- yylex() - functia pe care trebuie sa o apelati din main sa intre in analizator
  • Exemple
Un program care numara de cate ori apare stringul "urasc poli" intr-un fisier:

%{
  int nr;

  /* aici se mai pot declara si alte variabile globale, sau functii pe care le veti folosi in program*/

%}

%%

"urasc poli" {printf("Da, si eu urasc poli!\n"); nr++;}
. {/*nu fa nimic pentru orice alt caracter*/}

%%
int main(int argc, char ** argv){
  nr=0;
  yyin=fopen(argv[1],"r");
  yylex();
  printf("nr = %i\n",nr);
  return 0;
}