🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.pascal
3 messages
3 total messages Started by Borneq Fri, 17 Oct 2008 10:09
Analiza kodu Pascala - Yacc?
#92674
Author: Borneq
Date: Fri, 17 Oct 2008 10:09
25 lines
2397 bytes
Chciałbym napisać analizator kodu Pascala w wersji Delphi/Kyliź jak i 
Lazarusa który mógłby zanalizować całe projekty i pakiety, znajdować drzewo 
użycia unitów jak i zbiór klas i metod używanych w tych unitach.
Analizator potrzebny byłby głownie z powodu:
Piszę sobie bibliotekę która miała by działać zarówno w Delphi/Kylixie jak i 
w Lazarusie; są przypadki zaimportowania znanych pakietów jak Synedit, 
jednak nie chciałbym rozwijać dwóch wersji które i tak w końcu się rozminą. 
Potrzebny byłby konwerter który mógłby automatycznie konwertować projekt w 
obie strony.
Do tego potrzebny jest parser - do konwersji Delphi<->Kylix wystarczało 
{$ifdef LINUX} i {$ifdef VisualCLX} w kodzie oraz mały programik do 
konwersji który:
- zmienia rozszerzeń dfm<->xfm w programach testowych
- w plikach .dof tworzenie/usuwanie "Conditionals=VisualCLX" dla Delphi z 
CLX
- tworzenie .kof dla Kylixa
- w plikach cfg dodawanie/usuwanie do opcji -D  " VisualCLX "
- tworzenie .plików .conf Linuxa z "-DVisualCLX"
- zmiany w plikach pas: tam gdzie było {$R *.dfm} zamiana na {$R *.xfm}
W tym przypadku nie trzeba parsowania, ale jeśli mam nietyle zmieniać 
składnię co określać jakich unitów z Vcl/jcl mam użyć, jest potrzebny 
analizator.
Który z generatorów parserów warto użyć? Yacc czy może coś innego (preferuję 
analize prawostronną jak LALR czy :LR(1) ), mam parę plików z gramatyką 
Pascala, ale chętnie jeszcze jakiś bym znalazł pasujący do składni Delphi. 
Re: Analiza kodu Pascala - Yacc?
#92675
Author: darekm
Date: Fri, 17 Oct 2008 11:06
57 lines
3578 bytes
Borneq pisze:
> Chciałbym napisać analizator kodu Pascala w wersji Delphi/Kyliź jak i 
> Lazarusa który mógłby zanalizować całe projekty i pakiety, znajdować 
> drzewo użycia unitów jak i zbiór klas i metod używanych w tych unitach.
> Analizator potrzebny byłby głownie z powodu:
> Piszę sobie bibliotekę która miała by działać zarówno w Delphi/Kylixie 
> jak i w Lazarusie; są przypadki zaimportowania znanych pakietów jak 
> Synedit, jednak nie chciałbym rozwijać dwóch wersji które i tak w końcu 
> się rozminą. Potrzebny byłby konwerter który mógłby automatycznie 
> konwertować projekt w obie strony.

Z parserem Ci nie pomogę, natomiast kilka moich przemyśleń na temat 
przenośnego kodu.

> Do tego potrzebny jest parser - do konwersji Delphi<->Kylix wystarczało 
> {$ifdef LINUX} i {$ifdef VisualCLX} w kodzie oraz mały programik do 

samo LINUX nie wystarczy, gdyż przy FPC można kompilować zarówno dla Win 
jak i innych platform. Raczej koniecznych jest kilka innych definicji.

> konwersji który:
> - zmienia rozszerzeń dfm<->xfm w programach testowych
> - w plikach .dof tworzenie/usuwanie "Conditionals=VisualCLX" dla Delphi 
> z CLX
> - tworzenie .kof dla Kylixa
> - w plikach cfg dodawanie/usuwanie do opcji -D  " VisualCLX "

Jak najmniej tego typu uwarunkowań w plikach innych niż kod źródłowy. 
Przecież to wszystko można dodać przy pomocy małego pliku inkludowanego 
na początku każdego źródła.
Ja mam w pierwszej linii {$I start.inc}
i w nim ustawiane są wszystkie dyrektywy kompilacji w zależności od 
kompilatora i platformy

> - tworzenie .plików .conf Linuxa z "-DVisualCLX"
dodaj do includa
> - zmiany w plikach pas: tam gdzie było {$R *.dfm} zamiana na {$R *.xfm}
to też powinno być warunkowe {ifdef *.dfm  else *.xfm}

> W tym przypadku nie trzeba parsowania, ale jeśli mam nietyle zmieniać 
> składnię co określać jakich unitów z Vcl/jcl mam użyć, jest potrzebny 
> analizator.

tego nie rozumiem. Przecież kompilator sam Ci powie co potrzebuje.
Nie do końca sobie potrafię wyobrazić w czym parser mógłby pomóc. Jeżeli 
masz niewielką bibliotekę to się go nie opłaca robić. Jeżeli naprawdę 
dużą automat będzie za słaby.


Zobacz jak jest pisany FPC, to chyba najlepszy przykład pisania 
wieloplatformowego. Stosują kilka rozwiązań, parsery również, ale chyba 
nie do tego co sugerujesz.
Opieranie się o pliki konfiguracyjne środowisk wizualnych wydaje się 
niewłaściwe, ze względu na stosunkowo częste zmiany ich struktury

-- 
   Darek
Re: Analiza kodu Pascala - Yacc?
#92676
Author: Borneq
Date: Sat, 18 Oct 2008 14:47
8 lines
1400 bytes
Użytkownik "Borneq" <borneq@antyspam.hidden.pl> napisał w wiadomości 
news:gd9o7o$k2r$1@news.onet.pl...
> Który z generatorów parserów warto użyć? Yacc czy może coś innego 
> (preferuję analize prawostronną jak LALR czy :LR(1) ), mam parę plików z 
> gramatyką Pascala, ale chętnie jeszcze jakiś bym znalazł pasujący do 
> składni Delphi.

Zastanawiam się nad Gold, SableCC a może Cup. 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads