Come posso fare in modo che il mio compilatore C ++ comprenda modelli, classi nidificate, ecc. Potenti funzionalità di C ++?

StackOverflow https://stackoverflow.com/questions/618859

Domanda

È un compito universitario nel mio gruppo scrivere un compilatore di linguaggio C-like. Naturalmente implementerò una piccola parte del nostro amato C ++.
Il compito esatto è assolutamente stupido, e il docente ci ha detto che deve essere autocompilabile (dovrebbe essere in grado di compilare se stesso) - quindi, intendeva non utilizzare librerie come Boost e STL.
Inoltre, non vuole che utilizziamo i modelli perché è difficile da implementare.
La domanda è: è reale per me, dato che scriverò questo progetto da solo, con la scadenza alla fine di maggio, a metà giugno (quest'anno), per implementare non solo modelli, ma anche nidificati classi, spazi dei nomi, tabelle di funzioni virtuali a livello di analisi della sintassi?
PS Non sono un fanatico in C ++

È stato utile?

Soluzione

Continua a fare un compilatore C.

Credimi, è abbastanza difficile costruire un compilatore C decente, specialmente se si prevede che si compili da solo. Cercare di supportare tutte le funzionalità di C ++ come classi e modelli nidificati ti farà impazzire. Forse un gruppo potrebbe farlo, ma da solo, penso che un compilatore C sia più che sufficiente da fare.

Se sei morto su questo, almeno implementa prima un linguaggio di tipo C (quindi hai qualcosa da consegnare). Quindi concentrati sul mettersi in mostra.

Altri suggerimenti

" L'esatto compito è assolutamente stupido " - Non penso che tu sia in grado di dare un giudizio equo. Meglio lasciar perdere quella vista.

" Ho intenzione di scrivere questo progetto per conto mio " - hai detto che è un progetto di gruppo. Stai dicendo che il tuo gruppo non vuole andare d'accordo con la tua opinione che dovrebbe trasformarsi in C ++, quindi stai decollando e lavorando da solo? C'è un altro po 'che consiglierei di cambiare.

Non importa quanto tu sia informato su C ++. La tua abilità con grammatiche, parser, lexer, AST e generazione di codice sembra molto più germana.

Senza sapere di più su di te o sull'incarico, direi che faresti bene a completare l'incarico originale entro la fine di maggio. Mancano tre mesi. Attenersi al compito. Potrebbe sorprenderti per la sua difficoltà.

Se finisci in anticipo e adempi al tuo obbligo nei confronti del tuo team, direi che dovresti sentirti libero di modificare ciò che viene prodotto per aggiungere funzionalità C ++.

Scommetto che Bjarne Stroustrup ha impiegato più di tre mesi per aggiungere oggetti a C. Non sopravvalutare te stesso o sottovalutare l'incarico originale.

Nessun problema. E mentre ci sei, perché non implementare un sistema operativo per farlo funzionare anche.

Segui il compito. Scrivi un compilatore per un linguaggio C-like ! Quello che farei è selezionare un sottoinsieme di C. Rimuovi i tipi di dati in virgola mobile e ogni altra caratteristica che non è necessaria per costruire il tuo compilatore.

Scrivere un compilatore C richiede molto lavoro. Non sarai in grado di farlo tra un paio di mesi. Scrivere un compilatore C ++ è assolutamente folle. Non saresti in grado di farlo in 5 anni.

Vorrei sottolineare alcuni punti già menzionati e fornire alcuni riferimenti.

1) STICK ALLA NORMA ANSI C DEL 1989 SENZA OTTIMIZZAZIONE.

2) Non preoccuparti, con una guida adeguata, una buona organizzazione e una buona dose di duro lavoro è fattibile.

3) Leggi la Il linguaggio di programmazione C alla copertina.

4) Comprendi importanti concetti di sviluppo del compilatore dal Dragon Book .

5) Dai un'occhiata a lcc sia il codice che < a href = "https://rads.stackoverflow.com/amzn/click/com/0805316701" rel = "noreferrer"> libro .

6) Dai un'occhiata a Lex e Yacc (o Flex and Bison)

7) Scrivere un compilatore C (fino al punto in cui può autocompilarsi) è un rito di rito di passaggio tra i programmatori. Divertiti.

Per un progetto di classe, penso che richiedere al compilatore di compilare se stesso sia un po 'troppo da chiedere. Presumo che questo sia ciò che si intendeva per stupido nella domanda. Significa che devi capire in anticipo esattamente quanta parte di C stai per implementare e attenersi a ciò nella costruzione del compilatore. Quindi, costruendo una tabella di simboli usando le primitive anziché semplicemente usando una mappa STL. Questo potrebbe essere utile per un corso sulla struttura dei dati, ma manca il punto per un corso del compilatore. Dovrebbe riguardare la comprensione delle problematiche relative al compilatore e la scelta delle strutture di dati da utilizzare, non la codifica delle strutture di dati.

Costruire un compilatore è un modo meraviglioso per capire veramente cosa succede al tuo codice una volta che il compilatore lo ha bloccato. Qual è la lingua di destinazione? Quando ho preso i compilatori, ci sono voluti 3 di noi tutto il semestre per costruire un compilatore per passare da sorta-pascal a assembly. Non è un compito banale. È una di quelle cose che sembrano semplici all'inizio, ma più ci si mette dentro, più le cose complicate diventano.

Dovresti essere in grado di completare il linguaggio c-like entro l'intervallo di tempo. Supponendo che stai prendendo più di un corso, questo è esattamente ciò che potresti essere in grado di fare in tempo. Anche il C ++ è fattibile ma con molte più ore extra per dirlo. Aspettarsi di fare modelli c ++ / funzioni virtuali è sopravvalutare te stesso e potresti fallire nel compito tutti insieme. Quindi è meglio attenersi a un compilatore del sottoinsieme c e terminarlo in tempo. Dovresti anche considerare il tempo necessario per il QA. Se vuoi essere accurato, anche il QA stesso richiederà del tempo.

Spazi dei nomi o clasi annidate, entrambe le funzioni virtuali sono a livello di sintassi abbastanza semplici, sono solo una o due regole in più da analizzare. È molto più complicato ai livelli più alti, a decidere, quale funzione / classe scegliere (ombreggiatura dei nomi, nomi ambigui tra spazi dei nomi, ecc.) O quando si compila in bytecode / eseguendo AST. Quindi, potresti essere in grado di scriverli, ma se non è necessario, saltalo e scrivi solo un modello funzionale nudo.

Se stai parlando di un compilatore completo, con generazione di codice, allora dimenticalo. Se hai intenzione di fare il lessico & amp; lato dell'analisi sintattica delle cose, quindi una qualche forma di modello potrebbe essere quasi fattibile nel lasso di tempo, a seconda di quali strumenti di compilazione del compilatore usi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top