FSLex пример решения? - PullRequest
       17

FSLex пример решения?

5 голосов
/ 08 марта 2010

Я давно пользуюсь C / lex и хотел бы сейчас использовать F # / fslex. Я сравнительно хорошо в C # и в процессе изучения F #. Единственное, что я не вижу ни одного примера проекта или шаблона, где fslex правильно включен в процесс сборки Visual Studio. Кто-нибудь знает, где я могу найти один?

С наилучшими пожеланиями! Volker

Ответы [ 3 ]

10 голосов
/ 08 марта 2010

К сожалению, нет встроенного шаблона элемента для файлов .fsl, потому что FsLex является частью PowerPack (поэтому 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 #: -).

Чтобы добавить элемент FsLex в проект MSBUILD (который также является проектом 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 / FsLex для вызова пользовательского инструмента, а также команда Compile, которая указывает компилятору включать полученный файл fs при сборке проекта.

3 голосов
/ 06 сентября 2010

Я использую бесплатную VS Shell до тех пор, пока я, наконец, не буду угрожать себе настолько, чтобы наконец купить полную 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) из этих путей.

2 голосов
/ 08 марта 2010

Проведя небольшое исследование, похоже, что они должны быть отделены друг от друга. Я нашел следующее в этом сообщении (http://blogs.msdn.com/chrsmith/archive/2008/01/18/fslex-Sample.aspx) Криса Смита:

Несмотря на то, что вы можете добавить файл спецификации F # Lex из надстройки Visual Studio, для запуска fslex вам потребуется перейти в командную строку. Fslex.exe находится в каталоге "bin" вашего дистрибутива F #.

Надеюсь, это поможет.

...