Me pregunto si existe una gramática BNF para describir LLVM IR? como la gramática C BNF que describe el lenguaje C, etc.¿Hay una gramática similar a BNF para describir LLVM IR?
Respuesta
No hay una gramática BNF publicada, pero hay un archivo gramgen polygen que se mantiene parcialmente, y se utiliza con el propósito de generar entradas aleatoriamente para usar para probar el analizador LLVM IR y el lexer.
se puede ver la versión actual de la gramática aquí:
http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/llvm.grm?revision=112427&view=markup
ahh. esto es muy completo. aunque acabo de hacer un subconjunto del archivo :) –
No hay ninguna gramática publicada de BNF para LLVM IR. Hay docs para describir el formato y, por supuesto, source code, mailing lists y IRC channel. Esos lugares son mejores fuentes de información que StackOverflow.
He enviado un correo electrónico a llvmdev sobre la misma pregunta, no hay respuestas de todos modos. Supongo que tengo que escribirlo leyendo los documentos de todos modos. –
Lo daría otro día. La mayoría de las personas en la lista de LLVM estaban de vacaciones toda la semana. – ohmantics
Docs http://llvm.org/releases/2.9/docs/UsingLibraries.html -> señala a LLVMAsmParser - Recomiendo comprobarlo. –
Mi parser for LLVM assembly language, escrito para un generador de analizador similar a YACC, puede servir como una definición BNF para el idioma.
Sí. Vaya al archivo "LLParser.cpp" en "LLVM/lib/AsmParser"; la EBNF se extiende rendimiento del archivo, por ejemplo, la función LLParser::ParseNamedType()
alrededor de la línea 350 tiene la siguiente función-comentario:
/// toplevelentity
/// ::= LocalVar '=' 'type' type
bool LLParser::ParseNamedType() {
/* impl. */
}
Estoy seguro de que una expresión regular felizmente extraer el EBNF. Lo hago a mano mientras repaso el analizador.
Desafortunadamente estos comentarios están incompletos y en gran parte desactualizados. –
contiene an Xtext grammar for LLVM IR.
En respuesta a @tschwinge
acabo de encontrar LLIR ("bibliotecas no oficiales para interactuar con LLVM IR"), que incluye un (WIP?) grammar repositorio ("gramática BNF para el montaje LLVM IR") .
Uno de los autores originales aquí. El repositorio de gramática es realmente un proceso en proceso, y el objetivo es definir una gramática BNF para la representación en lenguaje ensamblador de LLVM IR. Se progreso actual puede ser rastreado en https://github.com/llir/llvm/blob/master/current.md
En el futuro, mis amigos y yo desearían contribuir esta gramática de nuevo al proyecto oficial LLVM, y les encantaría que el analizador léxico y analizador fuera un solo día generado a partir de una gramática BNF , ya que eso garantizaría una especificación actualizada del idioma.
Un problema que hemos encontrado al escribir la gramática BNF es que no hay una sola fuente de verdad (bueno, excepto el código fuente, por supuesto). Comparamos los comentarios de BNF del código fuente con la documentación de LangRef, y algunas veces estos no estaban sincronizados con el código de C++ real, lo que generó cierta confusión.
El estado actual de la gramática BNF es que admite todas las instrucciones y expresiones constantes de LLVM IR. Todavía hay algunas adiciones menores que se agregarán para admitir todos los conceptos IR de LLVM, y actualmente estamos trabajando para dar soporte a los metadatos DWARF. Los nodos de metadatos generales ya son compatibles.
respecto Alegre, /u & i
- 1. ¿Cuál es el BNF de BNF? es decir, ¿cómo definimos una meta gramática BNF?
- 2. ¿Hay un modo BNF para Emacs?
- 3. llvm ir a lenguaje de origen legible para los humanos?
- 4. gramática de C++ BNF con ejemplos de análisis/comparación
- 5. ¿Hay algún intérprete de PHP -> LLVM IR?
- 6. Generación de casos de prueba de gramática BNF
- 7. Lexer/analizador para generar código Scala a partir de la gramática BNF
- 8. ¿Borrando una primera instrucción en bloque básico de LLVM IR?
- 9. Cómo convertir el código IR de llvm a c?
- 10. Traducción de la fuente G-Machine a LLVM IR
- 11. Analizando y modificando el código IR LLVM
- 12. ¿Cuál es la forma más fácil de saber si una gramática BNF es ambigua o no?
- 13. Cualquier BNF IDE con características de prueba
- 14. Idioma de salida del compilador - LLVM IR vs C
- 15. ¿Hay una herramienta similar a distcc para GHC?
- 16. ¿Hay una biblioteca similar a lxml o nokogiri para Java?
- 17. ¿Hay una utilidad similar a Spy ++ para WPF?
- 18. ¿Hay una herramienta similar a YSlow para IE7?
- 19. ¿Hay alguna herramienta similar a una pelusa para MSBuild?
- 20. ¿Hay un formato estándar para describir un archivo plano?
- 21. Preguntas para compilar a LLVM
- 22. ¿Existe una gramática formal del lenguaje js (idealmente BNF) (o solo un subconjunto de texto mecanografiado)?
- 23. ¿Hay herramientas para convertir entre ANTLR y otras formas de BNF?
- 24. ¿Dónde puedo encontrar la gramática BNF o YACC estándar para el lenguaje C++?
- 25. Convirtiendo EBNF a BNF
- 26. ¿Hay una gramática estándar de C++?
- 27. ¿Hay una biblioteca PHP para corregir la gramática?
- 28. ¿Cómo implementar de manera eficiente cierres en LLVM IR?
- 29. ¿Hay un [Ir a archivo ...] en Xcode?
- 30. ¿Cómo puedo construir una gramática limpia similar a Python en ANTLR?
¿Por qué lo preguntas? ¿Debería escribir un backend LLVM en su lugar? – SingleNegationElimination
porque quiero generar LLVM IR aleatorio que se ajuste al formato IR de LLVM en lugar de una cadena aleatoria –
¡Huele a prueba de fuzz! +1: p – ismail