[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/