Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

GPPG можно найти здесь и ГПЛЕКС здесь.

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

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

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

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

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

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

http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/

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

Я считаю, что lex/yacc уже есть в одном из SDK (т.РТМ).Либо Windows, либо .NET Framework SDK.

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

Как сказал Антон, PowerShell, вероятно, лучший вариант.Если вам нужна реализация lex/yacc, тогда Малькольм Кроу имеет хороший набор.

Редактировать: Прямая ссылка на инструменты компилятора

Для справки: реализация лексера и парсера LALR на C# для C#:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top