Domanda

Mi sono imbattuto nella seguente grammatica yacc F77: http://yaxx.cvs.sourceforge.net/viewvc/yaxx/yaxx/fortran/fortran.y?revision=1.3&view=markup .

Come posso creare un parser Fortran 77 da questo file usando Happy ?

Perché c'è del C? / C ++? codice in quel file .y?

AGGIORNAMENTO: Grazie per le tue risposte!

Da un po 'di tempo gioco con due nuovi approcci:

  1. estrazione e modifica del parser dal pacchetto del codice sorgente in bundle con un documento intitolato Parametric Fortran ,
  2. scrivere una grammatica da zero con l'aiuto di BNFC .

Devo già analizzare entrambi semplici estratti di codice. Terrò le persone al corrente se qualcosa di utilizzabile dovesse nascere in questo secolo ^ __ ^ " hehe.

P / S: Vorrei vedere se potessi raccogliere abbastanza slancio da solo per avviare un progetto per un motore di differenziazione automatico per sostituire un solo binario da cui dipendiamo per il momento. Per l'intrattenimento nelle fasi iniziali: sto guardando Love Shuffle ! È un J-Drama molto divertente! Altamente raccomandabile ...

È stato utile?

Soluzione 4

Usa BNFC e scrivi la tua grammatica da zero! BNFC fa miracoli e potresti fare l'analisi esattamente come desideri.

Altri suggerimenti

La C è la azione semantica per ridurre lo stack quando viene letta la sintassi. Queste azioni sono in C perché la definizione è intesa per Bison / Yacc che produce un file sorgente C.

Se vuoi usare Happy, porta il BNF sulla sintassi della definizione Happy e scrivi la tua semantica in Haskell.

Solo la punta dell'iceberg per ottenere comunque qualcosa di utile.

Se non ne hai già una copia, investi nel Dragon Book (Compilatori: principi, tecniche e strumenti di Aho, Lam, Sethi, Ullman - Pearson)

Perché le altre risposte sono vere in senso generale, in quanto dovrai scrivere le tue azioni per fare qualcosa di significativo nella definizione Yacc a cui hai collegato in realtà non ha nessuna azioni associato alle regole grammaticali. Quello che fa è che definisce la funzione yyerror e del codice per l'estrazione di valori da yylval in base al tipo di token.

Se non hai idea di cosa siano yyerror / yylval, dovresti leggere un tutorial bisonte / flessibile. Il libro del Drago è anche una buona risorsa se sei più serio al riguardo. Ci sono anche alcuni volantini eccellenti di un corso di Stanford sui compilatori che galleggiano intorno alla Rete, che sono basati sul libro.

Avrai bisogno di un AST per costruire che può essere costruito in modo equivalente ai frammenti C nel file Yacc.

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