5

長い間 C/lex を使用しており、F#/fslex を使用したいと考えています。私は C# と F# を学習中です。唯一のことは、Visual Studio のビルド プロセスに fslex が適切に含まれているプロジェクトの例やテンプレートが見当たらないことです。どこで見つけられるか知っている人はいますか?

たくさんのご挨拶!フォルカー

4

3 に答える 3

10

残念ながら、FsLex は PowerPack の一部であるため、.fsl ファイル用の組み込みアイテム テンプレートはありません (そのため、Visual Studio はそれがインストールされることを期待できません)。PowerPack と一緒にインストールできるテンプレートがあると便利です。

とにかく、FsLex を使用するサンプル プロジェクト (およびプロジェクトの一部として .fsl ファイルを含む) を探している場合は、F# ソース コード (Visual Studio 2008 MSI/ZIP パッケージで配布) を参照できます。 . .fsl を含むプロジェクトはFSharp.Compiler.fsproj、私のインストールでは にありますC:\Programs Files\FSharp-1.9.9.9\source\fsharp\FSharp.Compiler。驚くべきことに、F# 言語自体のレクサーが含まれています :-)。

FsLexMSBUILD プロジェクト (Visual Studio プロジェクトでもある) にアイテムを追加するには、次を使用します。

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

も必要な場合に備えてFsYacc、以下に例を示します (これも から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" />

カスタム ツールを呼び出すにはFsYacc/コマンドが必要ですが、プロジェクトのビルド時に生成されたファイルを含めるようにコンパイラに指示するコマンドも必要であることに注意してください。FsLexCompilefs

于 2010-03-08T16:43:48.100 に答える
3

最終的に完全なVSを購入するのに十分なほど自分自身を脅かすまで、無料のVSシェルを使用しています. 私がしていることは、次のビルド前イベントをプロジェクト プロパティに追加することです。

"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

それは私にとって十分にうまくいくようです。エラーはすべて出力ウィンドウに表示されます。32 ビット マシンを使用している場合は、これらのパスから (x86) を削除します。

于 2010-09-05T23:02:36.073 に答える
2

少し調べてみると、別々にする必要があるようです。Chris Smith によるこのブログ投稿 ( http://blogs.msdn.com/chrsmith/archive/2008/01/18/fslex-Sample.aspx ) で以下を見つけました。

Visual Studio アドインから F# Lex 仕様ファイルを追加できますが、fslex を実行するには、コマンド ラインを中断する必要があります。Fslex.exe は、F# ディストリビューションの「bin」ディレクトリにあります。

それが役立つことを願っています。

于 2010-03-08T15:39:21.040 に答える