Limbaj de formă liberă

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Un limbaj de formă liberă este un limbaj de programare a cărui sintaxă nu este afectată de plasarea particulară a caracterelor în codul sursă . De fapt, în limbajele moderne de formă liberă, codul nu este de obicei forțat să respecte anumite reguli de așteptare (așa cum a fost cazul pentru programele scrise pe cărți perforate ), iar utilizarea caracterelor spațiale albe ( spațiu , retur de transport și tabulare ) este gratuită prin constrângeri speciale. [1]

Multe limbi descendente din ALGOL sunt în formă liberă, inclusiv C , Pascal și Perl . Lisp și limbile sale derivate sunt, de asemenea, în formă liberă. Rexx este în cea mai mare parte sub formă liberă, cu excepția unor cazuri în care spațiile acționează ca un operator de concatenare. Limbajul de programare a bazei de date SQL este, de asemenea, în formă gratuită. Multe limbaje în formă liberă sunt, de asemenea, structurate , deși Fortran 77, de exemplu, rezervă coloane pentru numerele de linie. Există, de asemenea, limbaje structurate care nu sunt în formă liberă, cum ar fi COBOL , Ruby , ABC , Curry , Haskell și Python , dintre care multe folosesc indentare pentru a determina blocuri de cod. [2] [3]

Cu toate acestea, în unele limbaje de formă liberă, cum ar fi C, există cazuri particulare în care utilizarea spațiului alb este limitată sau poate modifica semantica. De exemplu, în C, macro-urile declarate cu #define trebuie să fie conținute într-o singură linie, care poate fi eventual spartă prin scăparea returnărilor de transport. Un alt exemplu este legat de munch-ul maxim în analiza operatorilor: separarea cu spațiul alb este de obicei opțională, dar în unele cazuri particulare este esențială păstrarea sintaxei și semanticii. De exemplu linia

 z = x ++ + ++ y ;

este valabil din punct de vedere sintactic, dar eliminarea spațiilor dintre operatori devine nevalidă deoarece analizorul, datorită munchului maxim, îl va interpreta ca

 z = x ++ ++ + y

ceea ce nu este valid deoarece valoarea returnată a primului operator ++ nu este un operand valid pentru al doilea operator ++ . Un exemplu analog apare atunci când se efectuează o diviziune în care divizorul este obținut prin dereferențierea unui indicator :

 z = x / * y ;

Din nou, dacă eliminați spațiul dintre operatorul de divizare și operatorul de referință, sintaxa se schimbă, deoarece /* este interpretat de analizor ca deschiderea unui comentariu . [4]

Notă

  1. ^ David Mark și James Bucanek, Learn C on the Mac , Apress, 2012, p. 68, ISBN 978-1-4302-4533-9 .
  2. ^ D. Aspinall și William Allan Clark,Microprocesorul și aplicația sa: un curs avansat , Arhiva CUP, 1978, p. 179 , ISBN 978-0-5212-2241-9 .
  3. ^ Udayakumar G Kulkarni, Notes on C Language 1st Edition , 2014, p. 27.
  4. ^ Peter Van der Linden, Expert C Programming: Deep C Secrets , Prentice Hall, 1994, pp. 53-54, ISBN 978-0-1317-7429-2 .
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT