Compilatori: differenza principale tra analizzatore lessicale e parser?


Risposta 1:

Vediamolo come un'analogia, consideriamo l'inglese come il nostro linguaggio di programmazione.

L'analizzatore lessicale divide l'input in token validi, ovvero entità più piccole che hanno un senso e sono ben definite nella lingua:

Ad esempio, "bello" è un token valido in quanto è una parola valida in inglese.

Considerando che "dsefuewfiu" non è un token valido in quanto non ha alcun senso.

Considerando che Parser verifica la grammatica, ovvero la frase aderisce alle leggi della formazione della frase in inglese:

Ad esempio, "My name is Rahul" è una frase inglese valida.

Considerando che "name my is Rahul" non ha senso.

Questa è la differenza di base tra un analizzatore lessicale e un parser.


Risposta 2:

Un analizzatore lessicale di solito analizza in termini di espressioni regolari, fornendo l'output che un parser utilizza sotto forma di token: identificatori, stringhe, numeri, operatori.

Un parser implementa una grammatica di livello superiore usando i token come input. Fa cose che un analizzatore lessicale non può, come bilanciare le parentesi.

Non è tecnicamente necessario suddividerlo in due passaggi come questo, ma concettualmente è molto più facile farlo.


Risposta 3:

L'analizzatore lessicale è la prima fase del processo di compilazione che prende il programma sorgente come input e produce una sequenza di caratteri significativi chiamati lessemi ...

Questi lexemi funzionano come input per

Prossima fase di analisi della sintassi.

In questa fase il parser prende questo lexema come input e produce output sotto forma di un albero di sintassi ......