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 предоставляется здесь

Ответ 12

Только для записи реализация парсера lexer и LALR в С# для С#:

http://code.google.com/p/naive-language-tools/

Он должен быть похож на Lex/Yacc, однако эти инструменты (NLT) не являются генераторами! Таким образом, забудьте о скорости.