Frage FSLex Beispiellösung?


Ich benutze C / Lex für eine lange Zeit und möchte jetzt F # / fslex verwenden. Ich bin in C # vergleichsweise gut dran und lerne F #. Das einzige Problem ist, dass ich kein Projektbeispiel oder eine Vorlage sehen kann, in der fslex korrekt in den Buildprozess von Visual Studio eingebunden ist. Weiß jemand wo ich einen finden kann?

Viele Grüße! Volker


5
2018-03-08 15:24


Ursprung


Antworten:


Leider gibt es keine integrierte Elementvorlage für .fsl-Dateien, da FsLex ein Teil von PowerPack ist (daher kann Visual Studio nicht erwarten, dass es installiert wird). Es wäre definitiv nützlich, eine Vorlage zu haben, die mit PowerPack installiert werden kann!

Wenn Sie nach einem Beispielprojekt suchen, das FsLex verwendet (und .fsl-Dateien als Teil des Projekts enthält), können Sie sich den Quellcode von F # (mit dem MSI / ZIP-Paket von Visual Studio 2008 verteilt) ansehen. . Das Projekt, das .fsl enthält, ist FSharp.Compiler.fsproj und auf meiner Installation kann es in gefunden werden C:\Programs Files\FSharp-1.9.9.9\source\fsharp\FSharp.Compiler. Überraschenderweise enthält es einen Lexer für die F # Sprache selbst :-).

Hinzufügen FsLex Element zum MSBUILD-Projekt (das auch Visual Studio-Projekt ist) verwendet es Folgendes:

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

Falls du es auch brauchst FsYaccHier ist ein Beispiel (auch von 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" />

Beachten Sie, dass Sie die FsYacc/FsLex Befehl, um das benutzerdefinierte Werkzeug aufzurufen, sondern auch die Compile Befehl, der dem Compiler sagt, dass er den erzeugten enthält fs Datei beim Erstellen des Projekts.


10
2018-03-08 16:43



Ich benutze die kostenlose VS-Shell, bis ich mir endlich genug gedroht habe, um endlich den vollen VS zu kaufen, und wenn ich nicht etwas falsch mache (und ich bin es wahrscheinlich), scheint keine der normalen Lösungen für mich zu funktionieren. Ich füge die folgenden Pre-Build-Ereignisse zu den Projekteigenschaften hinzu:

"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

Das scheint mir gut zu funktionieren. Fehler gehen alle zum Ausgabefenster. Wenn Sie sich auf einem 32-Bit-Computer befinden, würden Sie die (x86) aus diesen Pfaden entfernen.


3
2017-09-05 23:02



Bei ein wenig Recherche sieht es so aus, als müssten sie getrennt sein. Ich habe Folgendes in diesem Blogpost gefunden ( http://blogs.msdn.com/chrsmith/archive/2008/01/18/fslex-Sample.aspx ) von Chris Smith:

Obwohl Sie eine F # Lex Specification-Datei aus dem Visual Studio Add-In hinzufügen können, müssen Sie zum Ausführen von fslex in die Befehlszeile wechseln. Fslex.exe befindet sich im Verzeichnis "bin" Ihrer F # -Distribution.

Ich hoffe, das hilft.


2
2018-03-08 15:39