This shows you the differences between two versions of the page.
cpl:labs:02 [2016/10/05 23:13] bogdan.nitulescu [Secțiunea de reguli gramaticale] |
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 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 ’+’ ’-’ |