Quindi capisco la semantica delle derivazioni fino a Backus Naur Form. Una cosa che non riesco a trovare in nessun libro di testo o le varie note dei docenti che sono on-line è questa.
Quando una derivazione più giusta sarebbe benefica sulla derivazione più a sinistra? Un compilatore o un generatore userebbe sempre left o right oppure userebbe entrambi?
Quindi ecco un esempio:
Supponiamo di avere la seguente frase linguistica: A = B + C * A
Esempio di grammatica della lingua che consente quanto sopra:
<assign> <id> = <expr>
<id> A | B | C
<expr> <expr> + <term>
|<term>
<term> <term> * <factor>
|<factor>
<factor> ( expr )
| <id>
Left Derivation:
<assign> => <id> = <expr>
=> A = <expr> + <term>
=> A = <term> + <term>
=> A = <factor> + <term>
=> A = <id> + <term>
=> A = B + <term>
=> A = B + <term> * <factor>
=> A = B + <factor> * <factor>
=> A = B + <id> * <factor>
=> A = B + C * < term>
=> A = B + C * <factor>
=> A = B + C * <id>
=> A = B + C * A
Right Derivation:
<assign> => <id> = <expr>
=> <id> = <expr> + <term>
=> <id> = <expr> + <term> * <factor>
=> <id> = <expr> + <term> * <id>
=> <id> = <expr> + <term> * A
=> <id> = <expr> + <factor> * A
=> <id> = <expr> + <id> * A
=> <id> = <expr> + C * A
=> <id> = <term> + C * A
=> <id> = <id> + C * A
=> <id> = B + C * A
=> A = B + C * C