next up previous contents
Next: Antet Up: Limbajul PLINT Previous: Specificatori   Cuprins

Sintaxa

Lexicul limbajului este multimea de lexeme (insiruiri de orice lungime pozitiva de caractere ASCII) ce se poate forma pe baza unor reguli bine precizate (neambigue), plecand de la asa numitele ``terminale'' -- lexeme atomice. Asa cum o ecuatie diferentiala are mai multe solutii functie de conditia initiala, la fel o secventa de limbaj poate fi redusa la un sir de terminale in mai multe moduri, devenind ambigua. Detectarea tuturor acestor posibilitati este o pierdere de timp, deoarece se stie ca omul e obisnuit ``sa citeasca'' o fraza de la inceput la sfarsit, si nu de la mijloc sau de la trei-sfert. De aceea, punand ``conditia initiala'' ca analiza/recunoasterea lexicala sa inceapa de la inceputul unei secvente de limbaj, se reduce efortul de construire a unei gramatici neambigue din acest punct de vedere. Iata un exemplu: presupunem ca avem un limbaj cu gramatica urmatoare:
\begin{grammar}
<x> ::= <i> <j> \vert <k> <l>
\par <i> ::= \lq a'
\par <j> ::= \lq b' \lq a'
\par <k> ::= \lq a' \lq b'
\par <l> ::= \lq a'
\end{grammar}
Rezultatul este un automat ce se poate vedea in anexa [*]. Daca se incearca analizarea sirului ``aba'', se observa ca el poate fi vazut fie ca ``a'' urmat de ``ba'', fie ca ``ab'' urmat de ``a''. dupa cum se merge pe calea `ij' sau `kl'. Generatorul bison, dupa cum se vede din iesirea descriptiva a acestuia, a detectat un conflict care apare dupa citirea primului caracter `a', automatul creat aflandu-se intr-o situatie nedeterminista; in acecst caz va lua o decizie implicita, urmand calea `ij'.

Terminalele pot fi caractere, siruri contiguue de caractere (o regula liniara de detectie a lor), sau coduri asociate unor constructii lexicale mai complicate (posibil expresii regulate). Terminalele, ca si neterminalele, sunt unice. Se poate defini ca terminal numai unitatea ``caracter'', gramatica analoaga ar fi insa foarte foarte dificil de conceput; de aceea s-au permis terminale mai complexe, beneficiind de reutilizare prin reguli lexicale si coduri.

Neterminalele sunt entitati strict gramaticale, ele fiind niste identificatori 2.4 asociati 2.5 unor reguli, posibil alternative, de succesiune a altor neterminale sau terminale. Se considera ca o lexema formeaza un neterminal, daca regula asociata acestuia din urma se aplica corect pentru fiecare element (terminal/neterminal), de la inceputul pana la sfarsitul lexemei. Comentariu poate


Subsections
next up previous contents
Next: Antet Up: Limbajul PLINT Previous: Specificatori   Cuprins
Sebastian Glita 2002-06-19