Lex / Yacc для C #? - PullRequest
       96

Lex / Yacc для C #?

20 голосов
/ 12 февраля 2009

На самом деле, возможно, не полноценный Лекс / Як. Я реализую интерфейс интерпретатора команд для администрирования веб-приложения. Я ищу что-то, что возьмет определение грамматики и превратит его в парсер, который напрямую вызывает методы для моего объекта. Аналогично тому, как ASP.NET MVC может выяснить, какой метод контроллера вызывать и как определить аргументы.

Итак, если пользователь вводит «create foo» в моей командной строке, он должен прозрачно вызвать метод:

private void Create(string id) { /* ... */ }

О, и если бы он мог генерировать текст справки из (например) атрибутов этих методов контроллера, это тоже было бы здорово.

Ответы [ 12 ]

14 голосов
/ 31 марта 2010

Я выполнил пару небольших проектов с GPLEX / GPPG, которые являются довольно простыми повторениями LEX / YACC в C #. Я не пользовался никакими другими инструментами, описанными выше, поэтому не могу их сравнить, но они работали нормально.

GPPG можно найти здесь и GPLEX здесь .

При этом, я согласен, полное решение LEX / YACC, вероятно, излишне для вашей проблемы. Я бы предложил генерировать набор привязок с использованием IronPython: он легко взаимодействует с кодом .NET, непрограммисты, кажется, находят базовый синтаксис вполне пригодным для использования, и он дает вам большую гибкость / мощь, если вы решите его использовать.

11 голосов
/ 12 февраля 2009

Я не уверен, что Лекс / Як поможет вам. Вам просто понадобится базовый токенизатор и интерпретатор, который быстрее писать вручную. Если вы все еще в курсе разбора, см. Ирония .

Как примечание: рассматривали ли вы PowerShell и его командлеты?

8 голосов
/ 19 марта 2009

Также посмотрите на Antlr , который имеет поддержку C #.

5 голосов
/ 12 февраля 2009

Еще рано CTP, поэтому его нельзя использовать в производственных приложениях, но вас может заинтересовать Oslo / MGrammar: http://msdn.microsoft.com/en-us/oslo/

4 голосов
/ 21 апреля 2013

В последнее время Джисон набирает обороты. Это бизон порт для javascript. Из-за его чрезвычайно простой природы я перенес шаблон разбора / лексинга jison на php, а теперь на C #. Это все еще очень ново, но если у вас есть шанс, посмотрите на это здесь: https://github.com/robertleeplummerjr/jison/tree/master/ports/csharp/Jison

3 голосов
/ 11 мая 2012

Генератор синтаксических анализаторов Gardens Point здесь предоставляет функциональность Yacc / Bison для C #. Его можно загрузить здесь . Полезный пример с использованием GPPG предоставляется здесь

3 голосов
/ 02 марта 2009

Я считаю, что lex / yacc уже находятся в одном из SDK (т. Е. RTM). Windows SDK или .NET Framework.

3 голосов
/ 12 февраля 2009

Я бы предложил csflex - C # порт flex - самый известный генератор сканеров Unix.

3 голосов
/ 12 февраля 2009

Coco / R - это генератор компиляторов с реализацией .NET. Вы можете попробовать это, но я не уверен, что заставить такую ​​библиотеку работать быстрее, чем написать собственный токенизатор.

http://www.ssw.uni -linz.ac.at / Исследования / Проекты / Coco /

3 голосов
/ 12 февраля 2009

Если вы не боитесь альфа-программного обеспечения и вам нужна альтернатива Lex / Yacc для создания ваших собственных языков, вы можете заглянуть в Oslo . Я бы порекомендовал вам просмотреть записи сессий TL27 и TL31 от PDC последних лет. TL31 напрямую обращается к созданию домен-специфических языков с использованием Oslo.

...