Se afișează postările cu eticheta tutorial. Afișați toate postările
Se afișează postările cu eticheta tutorial. Afișați toate postările

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;
}

duminică, 29 noiembrie 2009

Install grub from liveCD from scratch

Scenario: I just installed Slackware, it gave an error during the LILO install, and I wantet grub anyway. So what to do?

I put in an Ubuntu liveCD (the only one I had around), and then run the following commands (assuming sda2 is where the install is):

sudo -s
apt-get install grub
mkdir /mnt/sda2
mount /dev/sda2 /mnt/sda2
mkdir /mnt/sda2/boot/grub
cp /usr/share/grub/i386-pc/* /mnt/sda2/boot/grub
grub
> find /boot/grub/stage1
> root (hd0,1)
> setup (hd0)
>quit
gedit /mnt/sda2/boot/grub/menu.lst


And you then have to create the menu.lst. I made a quick and basic one for now, here's what it looks like:

default 0
fallback 1

title Slackware
kernel (hd0,1)/boot/vmlinuz root=/dev/sda2

title Windows
root (hd0,0)
makeactive
chainloader +1

Good luck :P

luni, 29 iunie 2009

Hamachi + games, fixing a common issue

Ok vrem sa ne jucam impreuna un joc (sa zicem Age of Mythology, ca cu el m-am chinuit zilele astea), da? Vrem sa jucam prin LAN la distanta, deci vom folosi Hamachi. Problema e cand nu merge (aka pot sa dau ping din Hamachi, dar nu este vazut jocul creat, si nu ma pot conecta dupa IP, nici cel real nici cel de Hamachi), de ce nu merge? Inainte sa dai cu tastatura in monitor, read this :)

Well, problema este ca unele jocuri folosesc prin default IP-ul normal, si nu cel de Hamachi, si se conecteaza (si trimite date) deci la reteaua noastra, nu la cea virtuala facuta cu Hamachi. (Daca va pasioneaza, puteti citi mai multe aici.)

Si marea intrebare: cum il facem sa mearga? I'm the Linux chick, not the Windows geek, so eu am dezactivat pur si simplu placa de retea cu hamachi pornit, am deschis jocul, si dupa am reactivat placa de retea. Pentru o solutie mai eleganta, am gasit articolul asta. El zice ca toti cei care joaca trebuie sa faca asa:


Windows XP
1- Click Start and go to Control Panel
2- Go to Network Connections
3- In the menu at the top, click Advanced and then Advanced Settings.
4- You’ll see your Wireless or Local Area Connection in the list and Hamachi under “Connections.”
5- Click Hamachi and click the Green Up Arrow to move it to the top.
6- Click OK to close the dialog.

Windows Vista
1- Click Start and go to Control Panel
2- Click Network and Sharing Center
3- On the left side, click Manage Network Connections
4- Press the ‘Alt’ key and click Advanced then Advanced Settings at the top.
4- You’ll see your Wireless or Local Area Connection in the list and Hamachi under “Connections.”
5- Click Hamachi and click the Green Up Arrow to move it to the top.
6- Click OK to close the dialog.


Mai urmeaza si un alt blabla, dar nu este necesar sa faceti si bucata aia (experimental, AOM cel putin pare sa ignore parametrii din linia de comanda, si unei amice cu care jucam i-a mers si fara).

So have fun, si nu uitati sa va intrebati cu calm "de ce?" inainte sa dati pumni saracului calculator care face numai ce ii ziceti (si nu uitati ca e o diferenta mare intre ce ii ziceti sa faca si ce vreti sa faca ;) )

duminică, 10 mai 2009

Copy paste bug la Eclipse

Un lucru foarte interesant cu Eclipse 3.2.2 este bug-ul la Copy-Paste. Un program atat de complex care nu face bine o operatie atat de simpla...

Ce se intampla? Dai ctrl+C si te trezesti la ctrl+V ori ca ti-a copiat, ori ca ti-a copiat doar o parte ori - cel mai frecvent - ca nu ti-a copiat nimic. La fel si la cut, ceea ce e si mai enervant.

Ce se intampla mai exact? Nu stiu daca e de la versiunea asta de Eclipse, sau e de la KDE4, dar se pare ca nu se impaca acest Eclipse cu Klipper (programul care se ocupa de managementul copy-paste-ului in KDE).

Solutia cea mai simpla? Inchide Klipper. Yep, that's it! :)

vineri, 6 martie 2009

Mic tutorial SVN

Ca tot era vorba de SVN... Pentru cei care n-au mai lucrat cu svn, va scriu o lista cu cam tot ce aveti nevoie sa va jucati cu el dintr-o consola de Linux.

  • cd /directorul/de/lucru
(adica mergeti in directorul in care vreti sa copiati fisierele)
  • svn checkout http://adresa/la/care/e/hostat
(comanda asta o dati doar prima data, si va copia in fisierul respectiv fisierele care sunt pe server, cerandu-va parola daca serverul are parola. Va creea si un director .svn in folderul respectiv, care va contine setarile n stuff...)
  • svn update
(va lua fisierele care au fost modificate de pe server)

  • svn add ceva
(unde ceva poate fi fisier sau folder sau mai multe fisiere/foldere. Aceasta comanda ii spune ca va trebui sa adauge "ceva" pe server la urmatorul commit)
  • svn delete ceva
(ceva=fis,dir, mai multe fis/dir. Va sterge "ceva" la commit)
  • svn status
(arata tot ce va fi modificat la urmatorul commit. Outputul va fi sub forma:
?       scratch.c           # file is not under version control
A       stuff/loot/bloo.h   # file is scheduled for addition
C       stuff/loot/lump.c   # file has textual conflicts from an update
D       stuff/fish.c        # file is scheduled for deletion
M       bar.c               # the content in bar.c has local modifications

Pentru a vedea exact ce inseamna literele, vezi comanda urmatoare)

  • svn help numecomanda
(help is your best friend, intotdeauna :) )

  • svn revert ceva
(anuleaza modificarile facute asupra fisierului sau folderului ceva)

  • svn commit -m "Mesaj cu modificarile facute"
(va face pe server modificarile pe care i le-ati dat sa le faca.)


Pentru mai multe informatii, va recomand cartea asta , care va spune cam tot ce e de stiut in legatura cu svn, inclusiv sugestii despre cum ar trebui sa organizati folderele pentru proiecte mai mari, etc.

Daca nu va place consola, mai puteti instala si kdesvn, si mai sunt si alte programe de genul, cu o interfata grafica draguta, desi personal mi se pare mai rapid si mai usor cu o consola.