2010-03-08 11 views
5

He estado usando C/lex durante mucho tiempo y me gustaría usar F #/fslex ahora. Estoy comparablemente bien en C# y en el proceso de aprender F #. Lo único es que no puedo ver ningún ejemplo de proyecto o plantilla donde fslex esté incluido correctamente en el proceso de compilación de Visual Studio. ¿Alguien sabe dónde puedo encontrar uno?FSLex ejemplo de solución?

¡Un montón de saludos! Volker

Respuesta

2

Haciendo un poco de investigación parece que tienen que estar separados. He encontrado lo siguiente en esta entrada del blog (http://blogs.msdn.com/chrsmith/archive/2008/01/18/fslex-Sample.aspx) por Chris Smith:

Aunque puede agregar un archivo F # Lex Especificación del Visual Studio Add-In, para ejecutar fslex tendrá que romper con la línea de comandos . Fslex.exe se encuentra en el directorio 'bin' de su distribución F #.

Espero que ayude.

+0

Hm, ya veo. Tenía la esperanza de que haya una plantilla de elemento para un archivo .fsl con un paso de compilación asociado y tal. Gracias de todos modos, primero obtendré la versión VS2010 y luego veré hasta dónde puedo llegar. – Volker

10

Desafortunadamente, no hay una plantilla de elementos incorporada para los archivos .fsl, porque FsLex es parte de PowerPack (por lo que Visual Studio no puede esperar que se instale). ¡Definitivamente sería útil tener alguna plantilla que pudiera instalarse con PowerPack!

De todos modos, si está buscando un proyecto de ejemplo que use FsLex (y tenga archivos .fsl como parte del proyecto), entonces puede echar un vistazo al código fuente F # (distribuido con Visual Studio 2008 MSI/Paquete ZIP). El proyecto que contiene .fsl es FSharp.Compiler.fsproj y en mi instalación, se puede encontrar en C:\Programs Files\FSharp-1.9.9.9\source\fsharp\FSharp.Compiler. Sorprendentemente, incluye un lector para el lenguaje F # mismo :-).

Para añadir FsLex elemento para el proyecto MSBUILD (que es también proyecto de Visual Studio), se utiliza la siguiente:

<FsLex Include="..\lex.fsl"> 
    <OtherFlags>--lexlib Internal.Utilities.Text.Lexing</OtherFlags> 
    <Link>lex.fsl</Link> 
</FsLex> 
<Compile Include="lex.fs" /> 

En caso de que también necesitaba FsYacc, aquí es un ejemplo (también de FSharp.Compiler.fsproj):

<FsYacc Include="..\pars.fsy"> 
    <Module>Microsoft.FSharp.Compiler.Parser</Module> 
    <Open>Microsoft.FSharp.Compiler</Open> 
    <OtherFlags>--internal --lexlib Internal.Utilities.Text.Lexing 
       --parslib Internal.Utilities.Text.Parsing</OtherFlags> 
    <Link>pars.fsy</Link> 
</FsYacc> 
<Compile Include="pars.fs" /> 

en cuenta que necesita el comando FsYacc/FsLex para invocar la herramienta personalizada, sino también el comando Compile que le dice al compilador que incluya el archivo fs producido al construir el proyecto.

3

Estoy usando el VS Shell libre hasta que finalmente me amenazo lo suficiente como para finalmente comprar el VS completo, y a menos que esté haciendo algo mal, (y probablemente lo sea) ninguna de las soluciones normales parece funcionar para mí . Lo que hago es poner los siguientes eventos de pre-construcción de las propiedades del proyecto:

"C:\Program Files (x86)\FSharpPowerPack-2.0.0.0\bin\fslex.exe" "$(ProjectDir)\Lexer.fsl" 
"C:\Program Files (x86)\FSharpPowerPack-2.0.0.0\bin\fsyacc.exe" "$(ProjectDir)\Parser.fsy" --module Parser 

que parece funcionar bastante bien para mí. Todos los errores van a la ventana de salida. Si estás en una máquina de 32 bits, eliminarías (x86) de esas rutas.

+0

Esto ciertamente está funcionando, aunque me gustaría que hubiera una integración adecuada donde VS averigüe las dependencias correctamente. –