Lex/Yacc для С#?
На самом деле, может быть, не полномасштабный Lex/Yacc. Я использую интерфейс командной строки для администрирования webapp. Я ищу что-то, что возьмет определение грамматики и превратит его в парсер, который напрямую вызывает методы на моем объекте. Подобно тому, как ASP.NET MVC может определить, какой метод контроллера вызывать, и как рассчитать аргументы.
Итак, если пользователь вводит "create foo" в моей командной строке, он должен прозрачно вызывать метод:
private void Create(string id) { /* ... */ }
О, и если бы он мог генерировать текст справки из (например) атрибутов для этих методов контроллера, это тоже было бы удивительно.
Ответы
Ответ 1
Я не уверен, что Лекс/Якк поможет вам. Вам просто понадобится базовый токенизатор и интерпретатор, который быстрее писать вручную. Если вы все еще в разборе маршрута, посмотрите Иронию.
Как примечание: рассматривали ли вы PowerShell и его командлеты?
Ответ 2
Я сделал несколько небольших проектов с GPLEX/GPPG, которые представляют собой довольно простые повторные реализации LEX/YACC в С#. Я не использовал ни один из других инструментов выше, поэтому я не могу их сравнить, но они отлично работали.
GPPG можно найти здесь и GPLEX здесь.
Как я уже сказал, я согласен, что полное решение LEX/YACC, вероятно, слишком велико для вашей проблемы. Я бы предложил создать набор привязок с помощью IronPython: он легко взаимодействует с кодом .NET, а не программисты, похоже, считают, что базовый синтаксис достаточно полезен, и он дает вам большую гибкость/мощность, если вы решите его использовать.
Ответ 3
Также смотрите Antlr, который поддерживает С#.
Ответ 4
Еще раньше CTP не может использоваться в производственных приложениях, но вас может заинтересовать Oslo/MGrammar:
http://msdn.microsoft.com/en-us/oslo/
Ответ 5
В последнее время у Джисона очень много тяги. Это порт Bison для javascript. Из-за этого чрезвычайно простой характер, я портировал jison parsing/lexing template на php, а теперь на С#. Это все еще очень новое, но если у вас есть шанс, взгляните на него здесь: https://github.com/robertleeplummerjr/jison/tree/master/ports/csharp/Jison
Ответ 6
Если вы не боитесь программного обеспечения альфа и хотите альтернативу Lex/Yacc для создания собственных языков, вы можете посмотреть Oslo. Я бы рекомендовал вам сесть за сеанс сессий TL27 и TL31 из в прошлом году PDC. TL31 непосредственно обращается к созданию Языки домена, используя Осло.
Ответ 7
Coco/R - генератор компилятора с реализацией .NET. Вы можете попробовать это, но я не уверен, что получить такую библиотеку для работы будет быстрее, чем писать свой собственный токенизатор.
http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/
Ответ 8
Я бы предложил csflex - С# порт flex - самый известный генератор сканера unix.
Ответ 9
Я считаю, что lex/yacc уже находятся в одном из SDK (т.е. RTM). Либо Windows или .NET Framework SDK.
Ответ 10
Gars Point Parser Generator здесь предоставляет функциональность Yacc/Bison для С#. Здесь можно загрузить здесь. Полезный пример использования GPPG предоставляется здесь
Ответ 11
Как сказал Антон, PowerShell - это, вероятно, путь. Если вам нужна реализация lex/yacc, тогда Malcolm Crowe имеет хороший набор.
Изменить: Прямая ссылка на инструменты компилятора
Ответ 12
Только для записи реализация парсера lexer и LALR в С# для С#:
http://code.google.com/p/naive-language-tools/
Он должен быть похож на Lex/Yacc, однако эти инструменты (NLT) не являются генераторами! Таким образом, забудьте о скорости.