FSLex пример решения?
Я давно пользуюсь C/lex и хотел бы сейчас использовать F#/fslex. Я сравнительно хорошо в C# и в процессе изучения F#. Единственное, что я не вижу ни одного примера проекта или шаблона, где fslex правильно включен в процесс сборки Visual Studio. Кто-нибудь знает, где я могу найти один?
Много поздравлений! Volker
3 ответа
К сожалению, нет встроенного шаблона элемента для файлов.fsl, потому что FsLex является частью PowerPack (поэтому Visual Studio не может ожидать, что он будет установлен). Было бы определенно полезно иметь какой-либо шаблон, который мог бы быть установлен с PowerPack!
В любом случае, если вы ищете пример проекта, который использует FsLex (и имеет файлы.fsl как часть проекта), вы можете взглянуть на исходный код F# (поставляется с пакетом MSI/ZIP для Visual Studio 2008), Проект, который содержит.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
файл при сборке проекта.
Я использую бесплатную 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) из этих путей.
Делая небольшое исследование, похоже, что они должны быть отделены. В этом сообщении я нашел следующее ( http://blogs.msdn.com/chrsmith/archive/2008/01/18/fslex-Sample.aspx) Криса Смита:
Хотя вы можете добавить файл спецификации F# Lex из надстройки Visual Studio, для запуска fslex вам потребуется перейти в командную строку. Fslex.exe находится в папке bin вашего дистрибутива F#.
Надеюсь, это поможет.