c# msbuild antlr4

Antlr4 C#objetivos y ruta de salida de los archivos generados



msbuild (3)

Estás encontrando un error conocido con ReSharper. La integración de compilación ANTLR 3 y ANTLR 4 C # es confiable y utiliza patrones establecidos hace mucho tiempo que Microsoft usa con otros lenguajes y tareas de generación de código. Tus opciones son:

  1. Deje de usar ReSharper
  2. Obtenga los autores de ReSharper para abordar la falta de soporte para esta función, o
  3. Modifique el objetivo ANTLR 4 para evitar la limitación en ReSharper, que introducirá otros problemas en la construcción que pueden ser o no aceptables para su uso.

La opción 1 es sin duda la menos costosa, y es más probable que brinde un soporte confiable a largo plazo para sus proyectos.

Tengo una solución C # con un archivo de gramática Antlr3, y estoy tratando de actualizar a Anltr4. Resulta que la gramática fue la parte fácil (¡se volvió mejor y un tercio del tamaño!). Generar el analizador resultó ser la parte difícil.

En la solución anterior, simplemente ejecutaba AntlrWorks para actualizar los archivos .cs de Lexer y Analizador cuando cambiaba el archivo de gramática. El lexer y el analizador se incluyeron directamente en el mismo proyecto que la gramática, por lo que el marco alrededor del analizador podría hacer uso de ellos directamente.

Con los objetivos Antlr4 para C # noté que (al menos de forma predeterminada) la ruta de salida de las clases de Parser C # generadas está en el directorio intermedio, por ejemplo, obj / Debug. Esto significa que no puedo usar el analizador directamente en el mismo proyecto. ¿Se supone que debo cambiar la ruta de salida si quiero que la fuente generada se pueda usar en mi sln? ¿No lo quiero en mi sln?

Intenté hacer un proyecto separado para la generación del analizador sintáctico, es decir, un proyecto que solo contenía el archivo de gramática. Cuando este proyecto se genera utilizando los objetivos Antlr4, el ensamblaje resultante se puede referenciar desde proyectos que necesitan las clases de analizador. Sin embargo, si este proyecto está incluido en la solución, todavía no tengo ningún intellisense en el estudio visual, ya que basa su intellisense en los archivos fuente para proyectos cargados, por lo que todavía no es muy útil. La única forma en que podía hacerlo funcionar correctamente era compilar y luego descargar el proyecto del analizador, y hacer que otros proyectos lo referenciaran como un archivo de ensamblaje en lugar de un proyecto.

EDITAR:

Después de buscar en la lista de interés antlr, encontré este hilo que indica que el problema con intellisense puede ser falla de Resharpers. Si este es el caso, entonces mi pregunta es más bien cómo seguir usando Antlr4 y Resharper en mi solución. https://groups.google.com/forum/#!topic/antlr-discussion/QSuJXphaBDg


Encontré una extensión para Resharper : ReSharper.ExternalCode .

Sugerencia para Antlr: agregue obj/Debug en Resharper -> Code Inspection -> External Code y reload solution.

Es un trabajo para mi


Hay una manera fácil de obtener lo mejor de Antlr 4 y Visual Studio. Está en el camino correcto al tener un proyecto de gramática y un proyecto de implementación por separado, pero le faltan un par de pasos.

Siga estos pasos para hacer funcionar el Intellisense

  • En Visual Studio, vaya a Herramientas -> Extensiones y actualizaciones y busque en la sección en línea "Soporte de idiomas ANTLR" de Sam Harwell.
    • Esto hace algunas cosas:
      • Agrega plantillas para las gramáticas combinadas.
      • Agrega resaltado de sintaxis
      • Agrega un objetivo MSBuild para la gramática para generar el analizador.
  • En su solución, configure su estructura de proyecto así:
    • Solución
      • Proyecto Grammar
        • ANTLR 4 Gramática combinada
      • Proyecto de implementación
        • Carpeta para enlaces a archivos generados
        • Clase de implementación de oyente
  • Escribe y compila tu gramática.
  • En su carpeta para los enlaces a archivos generados, haga clic con el botón derecho en la carpeta y haga clic en Agregar -> elemento existente
  • Busque Grammar Project / obj / Debug y seleccione todos los archivos del analizador generados.
  • Este siguiente paso es importante. En el botón Agregar, hay una pequeña flecha desplegable. Haga clic en la flecha desplegable y haga clic en "Agregar como enlace".
    • Esto agregará los archivos generados al proyecto de implementación utilizando un enlace simbólico en lugar de una copia directa.
    • Esto brinda la ventaja adicional de no tener que eliminar y volver a agregar los archivos del analizador si tiene que cambiar la gramática más tarde.
  • Intellisense debería funcionar ahora para las clases de analizador generadas, y ni siquiera tiene que deshabilitar ReSharper.