Cosa significa esattamente ‘parsing’ nella programmazione?

Cosa significa 'parsing' nella programmazione?

Mi sono preso la libertà di modificare la domanda di cui sopra, perché originariamente diceva "Cosa significa 'parsing' nella programmazione?", che è un modo piuttosto strano di fare una domanda, e ha infinite risposte. La versione modificata ha solo una o due risposte possibili, così l'ho cambiata per essere più facile per me.

Parlare significa prendere un flusso di testo e romperlo in pezzi significativi. E' un processo vitale per trasformare il codice scritto in qualche linguaggio sorgente in codice eseguibile che può essere fatto per eseguire qualche compito su un computer.

"Parsing" in generale è trasformare il linguaggio scritto in significato - lo facciamo tutto il tempo. Per esempio, mentre leggete questa risposta, lo state facendo nel vostro cervello per capire di cosa diavolo sto parlando.

Quando digitiamo del codice in un computer in qualche linguaggio - Java, diciamo - tutto quello che stiamo facendo è aggiungere caratteri a un file di testo. Affinché quel codice sia poi significativo in qualche modo, dobbiamo seguire le rigide regole del linguaggio - quando impariamo un linguaggio di programmazione, sono proprio queste regole che stiamo imparando. Finché ciò che digitiamo è conforme alle regole, allora è analizzabile, il che significa che è sintatticamente corretto. (Questo non significa che il programma stesso sia in qualche modo corretto o utile o privo di bug).

Il parser è un passo importante nella compilazione del codice. Per prima cosa rompe il flusso di testo in una serie di token, che sono unità di significato all'interno del linguaggio. Per esempio, una parola chiave, un valore numerico, una parentesi e molti altri. Le unità di significato - i token - sono formati in un albero di analisi, che è una struttura gerarchica che rivela l'intento del programma - ciò che le unità sintattiche messe insieme fanno effettivamente. Una volta che un'espressione significativa è stata raggiunta, il compilatore sarà in grado di generare codice in un'altra forma che è una versione eseguibile dal computer del codice che abbiamo scritto - o, se il codice non è conforme alle regole o ha qualche altro problema, un errore.

Il parsing di un linguaggio informatico è un processo puramente meccanico, e il linguaggio è progettato per essere non ambiguo in modo che ci siano solo pochi modi possibili per esprimere un dato intento. Questo è diverso dal linguaggio naturale, che è molto più complesso, spesso ambiguo, e generalmente inadatto alla programmazione (sono stati fatti tentativi per rendere possibile la programmazione usando un linguaggio più naturale, di solito senza successo). Mentre è possibile analizzare meccanicamente il linguaggio naturale in una certa misura, si basa su una massiccia quantità di contesto (in altre parole, l'intelligenza di 'sapere' di cosa si sta parlando). Al contrario, la maggior parte dei linguaggi informatici sono 'context free', il che significa che non c'è bisogno di tale conoscenza e una macchina stupida e non intelligente può analizzarlo.