[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Gramatyka PROGRESS'a
On 26 Jun 97 at 12:34, Henryk Jusza wrote:
> W kilku odpowiedziach dotyczących "truskawkowego QUERY"
> powtarzało się
> zdanie, że gramatykę języka 4GL PROGRESS można znaleźć w
> podręcznikach i w helpie. Jest to prawda ale nie do końca. Tam jest
> opisana składnia i semantyka poszczególnych INSTRUKCJI tego języka a
> nie całego języka. Np: gdzie jest opisane, że DEF VAR można napisać
> gdziekolwiek w procedurze i że zakres tak zadeklarowanej zmiennej
> jest poniżej tej deklaracji a nie w całej procedurze a w przypadku
> procedury wewnętrznej tak nie jest ? Albo gdzie w dokumentacji jest
> napisane, że różne obiekty procedury mogą mieć ten sam
> identyfikator, np: QUERY i BROWSE ? Takie rzeczy wynikają z
> przykładów a nie z formalnej gramatyki języka.
Nie czuje sie na silach dyskutowac z Henrykiem o semantyce i
formalnym zapisie jezyka, ale chce wtracic swoje trzy grosze.
Zaczynalem jeszcze w Progressie 5., bylem wtedy swiezo po studiach i
mocno pod wrazeniem Pascala. Rzeczywiscie, troche przeszkadzal mi
wowczas brak formalnego zapisu, ale z czasem zdalem sobie sprawe ze
zapis uzywany przez autorow dokumentacji jest bardzo przejrzysty i
latwo przyswajalny. Uczylem sie tez na przykladach - glownie
z dokumentacji oraz wlasnych. Na tym etapie bardzo odpowiadala mi
mozliwosc improwizacji podczas pisania programu. To znaczy, gdy nie
znalem dokladnie instrukcji czy funkcji probowalem ja zgadnac i w 80%
przypadkow trafialem za pierwszym razem. W nastepnych 10% - za
drugim, w pozostalych - trzeba bylo siegnac do dokumentacji.
Po kilku miesiacach zabralem sie do systematycznej lektury
dokumentacji (czy ktos z Was przeczytal "Language Reference" od
poczatku do konca?) i wowczas odnioslem wrazenie ze jest to jezyk o
bardzo konsekwentnej, logicznej i przemyslanej skladni (dotyczylo to
v 6.). Sadze, ze budowa 4GLa wersja 6 nie roznila sie zbytnio od
pierwszych wersji Progressa. Jednak w kolejnych wersjach - 7
i 8 - przybylo sporo nowych rzeczy, ktore sprawiaja na mnie wrazenie
nie tak dobrze uporzadkowanych i spojnych jak kiedys.
> brakuje. Np: w dokumentacji jest opis "instrukcji" (!!!) END. Co to
> za instrukcja ??? Nie lepiej wprowadzić pojęcie instrukcji
> strukturalnej np: CASE ... END, DO: .. END itp zamiast wymyślać
> jakiś dziwoląg w postaci instrukcji END. Po prostu gramatyki języka
> nie da się sprowadzić do gramatyki poszczególnych instrukcji, bo
> jężyk skałada się nie tylko z instrukcji.
Coz, w Progressie nie ma pojecia instrukcji strukturalnej: jest
instrukcja DO, czy REPEAT, to musi byc i END. Za to tworcy Pascala
wymyslili sobie instrukcje pusta (czyli po prostu brak czegokolwiek,
chodzilo o to zeby mozna bylo dopuscic srednik po ostatniej
instrukcji przed end; jak powszechnie wiadomo w Pascalu srednik
oddziela dwie insrukcje, dlatego ostatnia instrukcja przed end nie
musi miec srednika, ale moze - wtedy po sredniku jest instrukcja
pusta). Moim zdaniem podejscie do instrukcji blokowych przyjete przez
tworcow Progressa jest rownie poprawne jak tworcow Pascala.
> np: poniższe oba przykłady są poprawne:
>
> IF AVAILABL Bufor THEN ...
> IF AVAILABLE(Bufor) THEN ...
Zgodny z dokumentacja jest tylko piewrszy przyklad. natomiast drugi
stanowi nieudokumentowana ceche jezyka. Progress nie ma sztywnej
skladni, co bardzo ulatwia pisanie programow poczatkujacym - stad
tak duza liczba trafien, o ktorych pisalem na poczatku - po prostu
wiele form jest prawidlowych (w danym momencie). Pascal by nie
pozwolil na takie niechlujstwo. Z drugiej strony, przysparza to wiele
klopotow podczas przechodzenia z wersji na wersje - mechanizmy
nieudokumentowane moga sie w nowej wersji zachowywac zupelnie
inaczej. Wlasnie stosowanie roznych nieudokumentowanych
funkcji - kruczkow i sztuczek sprawia ze nie wszystkie porgramy daja
sie uruchamiac pod nowymi wersjami. Przykladowo, gdyby w wersji 9.
skladnia z nawiasami - available () - zostala zakazana, to podnioslby
sie straszny krzyk, ze z ta zgodnoscia wersji Progressa cos jest nie
tak.
> Co to jest AVAILABLE - funkcja czy operator i jak tu ładnie
> zapisać składnię funcji ?
Funkcja, oczywiscie funkcja - tak jest w dokumentacji, tyle ze
funkcje w Progressie sa bez nawiasow.
> końca instrukcji. To się później odbija na
> sygnalizacji błędów w błędnym programie, bo kompilator nie może się
> odnaleźć.
Pamietam ze jak pisalem programy w Pascalu, to bledow
kompilacji tez nalezalo szukac w zupelnie innym miejscu niz pokazywal
to kompilator.
> Na koniec bardzo przepraszam za zbyt długi wywód na ten temat.
Na dlugi wywód Henryka, pozwolilem sobie na jeszcze dluzszy :). Kogo
to denerwuje mogl nie czytac.
Pozdrowienia,
Pawel Dobrzynski
-----------------------------------------------------
Pawel Dobrzynski, CSBI Progress Department
Computer Systems for Business International SA
ul. Plowiecka 1, PL 04-501 Warszawa, POLAND
phone: (+48-22) 673-16-80 fax: (+48-22) 612-31-22
http://www.csbi.waw.pl/