|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12859
|
Beh i parser dei linguaggi di programmazione in genere vanno in ordine O(n), quindi se commissioni ai compilatori la questione impieghi al più O(3n), che è sempre O(n).
Comunque chiederei a chi t'ha commissionato questa cosa se basta una stima probabilistica sulla base delle keyword oppure ha bisogno di saperlo con esattezza e questo implicherebbe controllare che il codice nel documento sia ben formato (ovvero rispetti i canoni semantici e sintattici di quel linguaggio). Ora dato che mi sembra assurdo mettersi a rifare i parser LR1 per le grammatiche di quei 3 linguaggi, è evidente che nel secondo caso si passa direttamente a dare in pasto il file ai vari compilatori. Anche se questa soluzione mi sembra troppo banale (ma di fatto è un modo, per altro neanche così pessimo, per risolvere il problema). |
|
|
|
|
|
#22 |
|
Senior Member
Iscritto dal: Dec 2005
Messaggi: 558
|
Onestamente se il progetto chiede solamente di creare un programma che riesca differenziare file sorgenti di java, c e python io eviterei di spaccarmi la testa a fare qualcosa di veramente generale (che richiederebbe uno sforzo e spropositato) e mi fermerei solamente alle differenze tra questi linguaggi. Ad esempio in python le parentesi graffe {} sono piuttosto rare (dizionari sicuramente, così al volo non mi ricordo altri usi ma forse ce ne sono) e quindi possono essere usate come ottimo discriminante per sorgenti python e sorgenti di linguaggi c-like. Inoltre, se non sbaglio (ho studiato java pochissimo, scusate se scrivo castronerie), qualunque definizione di metodi e variabili deve essere fatta all'interno di classi o interfacce e quindi da qualche parte in un file sorgente di java ci dovrà essere la keyword class e/o interface che in c non sono keyword. Basta solamente stare attenti e scrivere un parser che si renda conto del contesto in cui quelle keyword sono utilizzate e il tutto dovrebbe funzionare. Ovviamente bisogna probabilmente raffinare un po' le cose: in c potrei fare un #define class something oppure potrei aver definito class e interface in un header incluso ecc ecc.
Tutta questa tirata solo per dare il mio consiglio ( |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:32.



















