PHP ha token_get_all
per analizzare un file e generare l'elenco di token che puoi usare per lavorare con il codice, come fare analisi statiche, controllare lo stile o implementare una funzione di completamento automatico.
Python ha Abstract Syntax Trees (AST) , che sembra ancora più utile, e ha anche alcuni funzioni pulite come la funzione compile
che compila l'albero stesso.
In generale, è una pessima idea implementare il parser personalizzato (oltre all'apprendimento). È estremamente difficile e soggetto a errori e diventerà non valido non appena le specifiche della lingua cambiano. Tali cambiamenti sono inusuali con linguaggi ben progettati come C #, ma non sono così insoliti in linguaggi come PHP che hanno molti difetti e caratteristiche mancanti (esempio: la recente implementazione di namespace in PHP). Inoltre, reinventando il tuo parser, stai reinventando la ruota già inventata per un compilatore: invece di fare esclusivamente il tuo lavoro (la funzione di completamento automatico), passi del tempo a scrivere un sacco di codice relativo all'analisi, il codice che devi prova e mantieni più tardi.
Alcuni suggerimenti
Potresti essere interessato a un termine di "compilatore come servizio" . Ad esempio, Microsoft sta lavorando su un compilatore come servizio per C #, che ti consentirà di estrarre a livello di codice le informazioni dal compilatore; tale scenario potrebbe essere utile per una funzionalità di completamento automatico.
Puoi anche cercare pedine statiche per la lingua di tuo interesse. Molti sono open source , quindi esaminare come processano la sorgente del codice può darti alcuni suggerimenti sull'analisi.
Infine, alcuni compilatori sono di per sé open source . A seconda della licenza che utilizzano e di quella che utilizzerai per il tuo prodotto con completamento automatico, potresti non essere in grado di riutilizzare il codice, ma comunque può fornire alcuni suggerimenti.