2011-01-03 14 views

Respuesta

6

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

+0

ahh. esto es muy completo. aunque acabo de hacer un subconjunto del archivo :) –

2

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.

+0

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. –

+0

Lo daría otro día. La mayoría de las personas en la lista de LLVM estaban de vacaciones toda la semana. – ohmantics

+0

Docs http://llvm.org/releases/2.9/docs/UsingLibraries.html -> señala a LLVMAsmParser - Recomiendo comprobarlo. –

4

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.

+7

Desafortunadamente estos comentarios están incompletos y en gran parte desactualizados. –

0

I acaba de encontrar LLIR ("bibliotecas no oficiales para interactuar con LLVM IR"), que incluye una (WIP?) grammar repositorio ("gramática BNF para el montaje LLVM IR").

2

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

Cuestiones relacionadas