Rileva se il codice è C

-5

Attualmente sto usando Python per scrivere un gestore di compilatori. Devo rilevare se il codice sorgente dato è C, anche se il codice ha alcuni errori di sintassi. Attualmente sto usando l'estensione del file per dirlo, ma voglio un'opzione più intelligente.

L'uso della regex sarebbe la soluzione migliore (e più semplice) per questo problema?

Sto anche cercando di minimizzare le dipendenze. Non voglio usare un pacchetto di terze parti per questo.

Qualche suggerimento?

    
posta Nick Pandolfi 18.11.2016 - 16:54
fonte

1 risposta

2

Una regex sarebbe la più semplice, ma non necessariamente la migliore. Una regex potrebbe essere ingannata dal codice C che risiede in un commento di un'altra lingua. Potrebbe anche mancare un C-code perfettamente valido che non segue la convenzione degli spazi bianchi che ci si aspetta.

Un parser C, come suggerito, è probabilmente il meglio che puoi fare. Esistono strumenti come ANTLR che possono rendere questo lavoro più facile per te (ANTLR può generare lexer / parser Python per C e altri linguaggi). Dopo aver eseguito il codice C tramite il parser, è possibile confrontare il numero di errori di sintassi con il numero di token validi e la dimensione del file C. Sulla base di queste statistiche, puoi fare un'ipotesi.

Come altri hanno notato - non sarai ancora in grado di distinguere tra un file C ++ valido e un file C con alcuni errori di sintassi (a meno che tu non esegua il tuo C-code tramite un parser C ++ e un Obiettivo) -C parser, e ...).

Se stai già facendo un auto-compilatore, la soluzione migliore potrebbe essere quella di compilare il codice in tutte le lingue supportate e scegliere quello che effettivamente compila. Se il file di input potrebbe effettivamente avere errori di sintassi, scegli la lingua che compila con il minor numero di errori di sintassi. Continuerai a incontrare il problema in cui un determinato file di input viene compilato correttamente in più lingue (come menzionato, C e C ++ ne sono un esempio). Finirai con più compilatori che funzionano bene per il dato file di input - l'unico modo in cui sarai in grado di dire quale usare è ... ... guardando l'estensione del file.

    
risposta data 18.11.2016 - 17:30
fonte

Leggi altre domande sui tag