Differences

This shows you the differences between two versions of the page.

Link to this comparison view

cpl:labs:02 [2016/10/05 23:09]
bogdan.nitulescu [Secțiunea de declarații Bison]
cpl:labs:02 [2016/10/05 23:18] (current)
bogdan.nitulescu [Secțiunea de declarații Bison]
Line 72: Line 72:
   * simbolul de start al gramaticii (opțional)   * simbolul de start al gramaticii (opțional)
 <code C> <code C>
-%start <​tip> ​nume1 nume2    ​+%start <​tip> ​nume  ​
 </​code>​ </​code>​
  
Line 98: Line 98:
 %type <​int_value>​ exp %type <​int_value>​ exp
 </​code>​ </​code>​
-Dacă este suficient să întroarcem ​valori de tip int, și nu definim un union de tipuri, atunci ''<​token_type>''​ este omis în declararea tokenilor.+Dacă este suficient să întoarcem ​valori de tip int, și nu definim un union de tipuri, atunci ''<​token_type>''​ este omis în declararea tokenilor.
  
   * Precedența %left. Aceasta va fi detaliată intr-un subcapitol ulterior.   * Precedența %left. Aceasta va fi detaliată intr-un subcapitol ulterior.
Line 134: Line 134:
 {C statements} {C statements}
 </​code> ​ </​code> ​
-<​note>​Bison nu verifica ​corectitudinea codului C din acțiuni ci doar îl copiaza în fișierul .c al parserului, unde va fi verificat de compilatorul de C. Așadar erorile de C vor fi raportate abia la compilarea parserului.</​note>​+<​note>​Bison nu verifică ​corectitudinea codului C din acțiuni ci doar îl copiaza în fișierul .c al parserului, unde va fi verificat de compilatorul de C. Așadar erorile de C vor fi raportate abia la compilarea parserului.</​note>​
 Acțiunea poate fi plasată la sfârșitul unei alternative sau chiar în interiorul acesteia. Acțiunea poate fi plasată la sfârșitul unei alternative sau chiar în interiorul acesteia.
   * ''​$$''​ reprezinta rezultatul, adica valoarea ce va fi atribuită neterminaului de la stânga regulii, cel la care se va reduce regula.   * ''​$$''​ reprezinta rezultatul, adica valoarea ce va fi atribuită neterminaului de la stânga regulii, cel la care se va reduce regula.
   * ''​$n''​ este al n-lea termen din regula sintactica.   * ''​$n''​ este al n-lea termen din regula sintactica.
-Acțiunile definite în mijlocul unei reguli se folosesc numai în anumite situații, pot folosi doar simbolii anteriori ​acesteia (fiindcă se execută înainte ca simbolii ​următori regulii să fie parsați) și sunt o sursă de conflicte. Vom reveni asupra acestora în laboratorul ​urmator.+Acțiunile definite în mijlocul unei reguli se folosesc numai în anumite situații, pot folosi doar simboluri anterioare ​acesteia (fiindcă se execută înainte ca simbolurile ​următoare regulii să fie parsați) și sunt o sursă de conflicte. Vom reveni asupra acestora în laboratorul ​următor.
 ==== Secțiunea de cod C ==== ==== Secțiunea de cod C ====
 Secțiunea de cod C trebuie să conțină: Secțiunea de cod C trebuie să conțină:
Line 232: Line 232:
  
  
-Gramatica devine mai stufoasă, dar neambigua. Metoda explicită presupune folosirea explicită a regulilor de precedență suportate de Bison.+Gramatica devine mai stufoasă, dar neambiguă. Metoda explicită presupune folosirea explicită a regulilor de precedență suportate de Bison.
  
-**Asociativitatea** și **precedența** pot fi specificate în urmatorul ​mod:+**Asociativitatea** și **precedența** pot fi specificate în următorul ​mod:
   * Pentru asociativitate se pot folosi: ''​%left'',​ ''​%right'',​ ''​%nonassoc''​   * Pentru asociativitate se pot folosi: ''​%left'',​ ''​%right'',​ ''​%nonassoc''​
   * Precedența operatorilor binari:   * Precedența operatorilor binari:
     * Se specifică asociativitatea folosind ''​%left''​     * Se specifică asociativitatea folosind ''​%left''​
     * Operatorii din același grup au aceeași precedență,​ iar între grupuri, precedența crește în jos.     * Operatorii din același grup au aceeași precedență,​ iar între grupuri, precedența crește în jos.
-  * Pentru a stabili precedența operatorilor unari se foloseste ''​%prec''​. Acesta schimbă precedența unei reguli la precedența tokenului ​urmator.+  * Pentru a stabili precedența operatorilor unari se foloseste ''​%prec''​. Acesta schimbă precedența unei reguli la precedența tokenului ​următor.
 <code C> <code C>
 %left ’+’ ’-’ %left ’+’ ’-’
cpl/labs/02.1475698167.txt.gz · Last modified: 2016/10/05 23:09 by bogdan.nitulescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0