Вопрос

Меня все больше и больше дразнят по поводу разработки DSL.Я разработал крошечный вариант на F#, используя fslex и fsyacc, но сообщения об ошибках неточны (я также не могу найти способ генерировать более качественные сообщения, похоже, мало документации о том, как обрабатывать случаи ошибок), и тот факт, что они не будут адекватно анализировать строки UNICODE, для меня это неприемлемо.Короче говоря, я ищу инструменты, упрощающие разработку DSL (инструменты Visual Studio для этого на самом деле не похожи на то, что мне нужно), и меня больше всего интересует часть синтаксического анализа/генерации AST.Я посмотрел на ANTLR, и смешивание мета-языка определения грамматики и кода кажется мне плохим, поэтому, пожалуйста, не упоминайте его или решения, страдающие от аналогичной проблемы, в ответах.Кроме того, я видел кое-что для языка под названием Boo, но мне сейчас не интересно возиться с еще одним языком (особенно если он мало поддерживается), так что он тоже не подходит.Любое другое предложение приветствуется, если оно прилично документировано, отлично работает с .NET и, что не менее важно, не предполагает использования динамически типизированного языка или использования DLR.

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

Решение

Вы хотите начать работать с Осло.Он включает в себя инструменты для определения DSL и инструменты для определения грамматик через DSL.Грамматики могут либо выдавать AST, либо что-то еще.

Одним из видов выходных данных, которые он может генерировать из DSL, является соответствующая схема SQL Server.Таким образом, экземпляры DSL можно хранить в SQL Server Express (или выше).

Осло является частью более широкой концепции Microsoft, но вы можете игнорировать это и просто начать с части «DSL».

Я рекомендую вам начать и активно сообщать Microsoft, что вам в нем нравится, а что нет.Вы уже привлекли их внимание, знаете вы это или нет.

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

Может быть, вы могли бы дать Осло попытка.Лично я еще не использовал его, но примеры выглядят довольно интересно.

«Осло» состоит из:Инструмент, который помогает людям определять и взаимодействовать с моделями в богатом и визуальном способе языка, который помогает людям создавать и использовать текстовые языки, специфичные для домена и модели данных, реляционное хранилище, которое делает модели доступными как для инструментов, так и для компонентов платформы

Здесь это своего рода общий обзор!

Возможно, вы все равно захотите просмотреть исходный код Boo, чтобы узнать, как они что-то делают.Они также используют ANTLR для генерации парсера.Вам не нужно смешивать какой-либо код с грамматиками ANTLR — он может быть полезен как полностью описательный, если это язык LL(*).

Ирония - находится по адресу Ирония@CodePlex может быть для вас хорошим решением — вы можете создавать свою грамматику, используя встроенные функции языков .NET, вместо того, чтобы пытаться создавать БНФ файлы грамматики отдельно.

Самый простой способ создать DSL на почти простом английском языке:Создайте свой собственный DSL для Java или C# (часть 4):добавление семантического слоя

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