Pregunta

Me he topado con la siguiente gramática yacc F77: http://yaxx.cvs.sourceforge.net/viewvc/yaxx/yaxx/fortran/fortran.y?revision=1.3&view=markup .

¿Cómo puedo hacer un analizador Fortran 77 de este archivo usando Happy ?

¿Por qué hay algo de C? / C ++? código en ese archivo .y?

ACTUALIZACIÓN: ¡Gracias por sus respuestas!

He estado jugando con dos enfoques nuevos durante un tiempo:

  1. extraer y modificar el analizador del paquete de código fuente incluido con un documento titulado Fortran paramétrico ,
  2. escribir una gramática desde cero con la ayuda de BNFC .

Ya tengo ambos para analizar extractos de código simples. Mantendré a la gente informada si algo utilizable surge en este siglo ^ __ ^ " jeje.

P / S: Quiero ver si podría reunir suficiente impulso por mi cuenta para iniciar un proyecto para un motor de diferenciación automática para reemplazar uno binario del que dependemos por el momento. Para entretenimiento en las etapas iniciales: ¡estoy viendo Love Shuffle ! ¡Es un J-Drama muy agradable! Muy recomendable ...

¿Fue útil?

Solución 4

Utilice BNFC y escriba su propia gramática desde cero. BNFC hace maravillas y usted puede hacer su análisis exactamente como lo desee.

Otros consejos

La C es la acción semántica para reducir la pila cuando se lee la sintaxis. Estas acciones están en C porque la definición está destinada a Bison / Yacc que produce un archivo fuente C.

Si desea utilizar Happy, transfiera el BNF a la sintaxis de definición Happy y escriba su semántica en Haskell.

Sin embargo, solo la punta del iceberg para obtener algo útil.

Si aún no tiene una copia, invierta en el Libro del Dragón (Compiladores: Principios, Técnicas y herramientas de Aho, Lam, Sethi, Ullman - Pearson)

Por qué las otras respuestas son verdaderas en el sentido general, ya que necesitarás escribir tus propias acciones para hacer algo significativo, la definición de Yacc a la que vinculaste realmente no tiene acciones ninguna asociado con las reglas gramaticales. Lo que hace es que define la función yyerror y algo de código para extraer valores de yylval en función del tipo de token.

Si no tiene idea de qué trata yyerror / yylval, debería leer un tutorial de bison / flex. El libro del Dragón también es un buen recurso si te tomas más en serio esto. También hay algunos folletos excelentes de un curso de Stanford sobre compiladores que flotan en la Red, que se basan en el libro.

Necesitará un AST para construir que se pueda construir de manera equivalente a los fragmentos C en el archivo Yacc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top