Visualizzazione risultati 1 fino 13 di 13

Discussione: Compilatore di C++

  1. #1
    Guest

    Wink Compilatore di C++

    Ciao a tutti!
    Il mio sito:
    http://virtualcompiler.altervista.org/
    E' un "compilatore virtuale", in pratica l'utente, scrivendo delle frasi in italiano "ordina" cosa vuole che l'applicazione faccia, successivamente viene simulata una applicazione in dos che esegue gli ordini dati dall'utente.
    In realtà è tutto molto semplice: le frasi fornite dall'utente vengono tradotte in codice php tramite un str_replace().
    Ora vorrei far si che l'utente possa anche scaricare l'applicazione che ha creato, per fare questo ho pensato di tradurre le frasi fornite dall'utente anche in codice C/C++ (o anche un'altro linguaggio), per poi compilare il codice sul server, creare un'applicazione momentanea e farla scricare.
    Volevo chiedere: è possibile installare un compilatore sul server e inviargli il codice da compilare in modo che restituisca un'aplicazione.exe?
    Grazie in anticipo!

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    No, non si possono installare o caricare eseguibili su AlterVista. Purtroppo o ti scrivi un compilatore in php, oppure devi avere un compilatore su un altro computer/server.

    (Non strettamente rilevante, ma se guardi in giro ci sono anche compilatori per php)

  3. #3
    Guest

    Predefinito

    Grazie, non ho capito una cosa: in che senso "compilatori in php" vuoi dire che si puo scrivere un compilatore vero e proprio (che crei files exe) con il php? Sarebbe proprio quello che fa per me!

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Quello che ti devi scrivere sarebbe un programma php che compila codice in un eseguibile.

    Quello che trovi su internet è un programma normale che compila codice php in un eseguibile - non esattamente quello che ti serve

  5. #5
    Guest

    Talking

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Quello che ti devi scrivere sarebbe un programma php che compila codice in un eseguibile.
    Esattamente quello che mi serve, Grazie!
    Ho un po di esperienza con il php, ma non so proprio da dove cominciare. Puoi consigliarmi un tutorial?
    Grazie ancora!
    EDIT: Su internet non si trova assolutamente nulla! Possibile? Mi basta anche che mi consigliate un libro.
    Ultima modifica di virtualcompiler : 04-08-2009 alle ore 19.33.33

  6. #6
    Guest

    Predefinito

    La scrittura di un compilatore ha un livello di difficoltà inferiore solo alla scrittura di un sistema operativo. Io sto lavorando in fase di tesi su un compilatore per un linguaggio infinitamente più semplice del c++ e il suo sviluppo è durato 3 anni ed è ancora una versione base. Quindi a meno che tu non metta in previsione una decina di anni di lavoro full-time, Il mio consiglio è di desistere

  7. #7
    Guest

    Predefinito

    Be', io infatti intendevo realizzare un compilatore per un linguaggio mooolto più semplice del C++, comunque probabilmente hai ragione, Grazie.

    dato che hai esperienza forse puoi aiutarmi:
    Sto lavorando a una versione avanzata del mio sito (per ora è molto banale).
    In pratica si tratta di analizzare il codice scritto dall'utente piu o meno come un compilatore(in maniera molto semplificata ovviamente), Però sto incontrando alcuni problemi: ad esempio non ho idea di come fare ad esaminare in modo valido il codice, infatti fino ad ora analizzo parola per parola, estraendo tutte le parole in base agli spazi, però ci sono dei problemi, ad esempio un = puo essere "attaccato" ad una parola, impedendomi di riconoscerla validamente. Insomma mi servirebbe una dritta su come analizzare validamente il codice:
    Potrsti dirmi piu o meno qual'è il metodo di base usato dai compilatori?
    Grazie!

  8. #8
    Guest

    Predefinito

    Al momento esegui un semplice controllo ortografico del testo editato. Questo è un modulo chiamato scanner, ed è, in poche parole, un riconoscitore di stringhe. A questo deve seguire un secondo modulo, che controlli la grammatica del testo. In pratica associ ad ogni stringa un simbolo e imponi delle regole per cui i simboli devono essere in un determinato ordine affinché la sintassi sia corretta (per esempio corretta successione dei simboli per un costrutto tipo if o while, ma anche per una semplice assegnazione di variabile). Terminata questa fase, avviene la traduzione del linguaggio di alto livello nel linguaggio di basso livello con successive ottimizzazioni. Ovviamente questa è una versione molto semplicistica.
    Puoi trovare del materiale cercando su google "linguaggi e traduttori", che è il nome del corso universitario che si occupa della teoria dei compilatori. Oppure puoi cercare il libro "Compilers: principles techniques and tools", Addison Wesley editore, che dovresti trovare online. costruire uno scanner è facile, un analizzatore di grammatica no. A meno che si utilizzino tool come jflex e cup (lavorano in java), che presi in pasto grammatica e stringhe ti creano il primo nucleo del compilatore. Certo dover scrivere tutto da zero in php, è un'impresa ardua! anche perchè dubito ci siano moduli già scritti, visto che di fatto non è una soluzione utilizzata.

  9. #9
    Guest

    Predefinito

    Grazie mille!
    Ho capito lo schem che mi hai dato, ora il problema è riuscire a distinguere una parola dall'altra:
    Se ad esempio ho
    a=12;
    la dfficoltà è distinguere a da = da 12, ma per questo credo esista una fuzione php. Grazie mile dll'aiuto! Sopratutto del libro che mi hai consigliato.
    Non è che potresti consigliarmi anche un libro in Italiano? Io è l'Inglese non andiamo molto d'accordo.;)
    Grazie ancora!!

  10. #10
    Guest

    Predefinito

    per distinguere un qualsiasi costrutto devi studiarti le espressioni regolari. Una varibile viene identificata come una sequenza di lettere, numeri o underscore. Mano a mano che lo scanner legge la stringa in ingresso, inizia a leggere la variabile, quando incontra lo spazio o l'uguale restituisce il simbolo "variabile".
    per il tuo caso il vocabolario dello scanner sarà:

    variabile [a-zA-Z0-9]+
    uguale "="
    numero [0-9]+
    spazio " "

    nella grammatica ci sarà il simbolo non terminale "assegnazione" formato dalla sequenza
    "variabile spazio uguale spazio numero" or "variabile uguale numero".
    Non so se esistono moduli php che facciano questo: non è un semplice problema di riconoscere delle stringhe, ma di verificare la correttezza del loro posizionamento. Un po' come riconoscere sia
    while(...){printf("word");}
    che
    while(...)
    {
    printf("word");
    }

    ricorda che ogni tipologia (variabile, parentesi, operatore ecc...) deve restituire un simbolo diverso.
    Purtroppo essendo un argomento molto complesso, libri validi in italiano non ne conosco. Al politecnico abbiamo usato le dispense e il libro che ti ho consigliato che è la bibbia dei compilatori. Per farti un idea cerca su google espressioni regolari, scanner e grammatiche, oltre che dispense di corsi universitari...

  11. #11
    Guest

    Lightbulb

    Grazie, ho capito!
    Quindi per esaminare il sorgente dovrei fare una cosa del genere:
    Codice PHP:
    $i=0;
    while(
    $i<count($array_di_caratteri_del_codice))
    {
    if(
    $array_di_caratteri_del_codice[$i]!="=" && $array_di_caratteri_del_codice[$i]!=" ")
    {
    $variabile.=$array_di_caratteri_del_codice[$i];
    }else{
    $operatore=$array_di_caratteri_del_codice[$i];
    }
    }
    In pratica con un ciclo while analizzo tutti i caratteri del orgente uno per uno e li salvo in una certa variabile(che poi avrà una certa funzione), finchè non ncontro un uguale o uno spazio(o + o un -, ecc), in questo caso inizo a salvare i caratteri in un'altra variabile.

    Dimmi: più o meno funziona così?

    Grazie ancora per i tuoi preziosi consigli!

  12. #12
    Guest

    Predefinito

    No, non funziona. Purtroppo i compilatori richiedono un approccio mentale diverso rispetto alla normale programmazione. Devi analizzare un testo che a priori non sai cos'è. Quindi non puoi basarti su un carattere in particolare per riconoscere la fine di una variabile. Altrimenti nell'if dovresti elencarli tutti =,+,-,* ecc.... Devi basarti sui pattern match, ci sono funzioni apposite in php... Tu riconosci la fine di un simbolo perché il carattere successivo non appartiene all'insieme di quelli che hai definito per il simbolo. Praticamente quando leggi un carattere devi considerare tutti i pattern che vengono soddisfatti da quel carattere ed andare avanti con i caratteri successivi, finchè non ottieni un determinato simbolo.
    Come potrai capire già solo questo modulo è molto complesso, e non siamo che al primostep del compilatore... se vuoi imparare l'approccio mentale scaricati cup e jflex, con relativa documentazione. Puoi farti uno scanner è un analizzatore lessicale in java in un paio d'ore. Ovviamente non serve al tuo scopo, ma almeno ti può chiarire il funzionamento della parte superficiale di un compilatore, altrimenti, finchè non ci metti mano non puoi comprendere a pieno quello che ti dico... anche io ci ho messo un mesetto per riuscire a capire il funzionamento di scanner, analizzatori lessicali. Cup e jflex ti generano automaticamente il codice a partire da un vocabolario e una grammatica, cosa che fare da zero ti porterebbe via un sacco di tempo-

  13. #13
    Guest

    Predefinito

    Grazie, seguirò il tuo consiglio!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •