как разработать предметно-ориентированный язык поверх другого языка? - PullRequest
0 голосов
/ 06 мая 2010

говорят, что я нашел хорошее программное обеспечение с открытым исходным кодом / библиотеку, написанную на python. Я хочу обернуть некоторые функции или методы, которые я создал, в простой для понимания собственный язык.

do porter_stemm(DOC) (DSL) будет эквивалентно функции или серии методов, написанных на python.

Я хочу создать DSL, который прост в освоении, но нужно, чтобы этот DSL был переведен в оригинальное программное обеспечение с открытым исходным кодом.

Я не уверен, что я здесь ясен, но мое намерение таково:

  1. создать простой для изучения язык кода, который пользователи могут использовать для решения проблемы в определенной нише.
  2. этот простой язык необходимо перевести, скомпилировать или интерпретировать через некоторое промежуточное программное обеспечение на исходный язык программного обеспечения с открытым исходным кодом (python).

Ответы [ 2 ]

1 голос
/ 06 мая 2010

Напишите синтаксис вашего DSL и синтаксический анализатор для него, например, в Python, с pyparsing (проще, чем традиционный подход, подобный lexx-yacc) - анализатор может создать дерево семантически значимых узлов, и затем вы можете (проще) обойти это дерево и интерпретировать его, или (немного менее просто) обойти это дерево и сгенерировать эквивалентный код Python. Такой подход я бы предложил для большинства принимающих языков. Некоторые языки хоста (Лисп и Схема являются основными) имеют мощные макросы, поэтому построение DSL из макросов более распространено в этих языках.

Внедрение вашего DSL в основной язык в основном означает, что вы на самом деле не делаете DSL, а используете более традиционную среду, так что это действительно другой подход (возможно, более мощный, но, возможно, не столь простой для изучения для непрограммистов). ; -.)

0 голосов
/ 06 мая 2010

Обычно DSL по-прежнему имеет тот же базовый синтаксис, что и его основной язык, и просто расширяет возможности языка.Так что все для вас по-прежнему написано на Python, это просто Python с некоторыми доменными функциями, переменными и т. Д.

Мой опыт работы с DSL в основном связан с семейством языков Lisp.Там типичный DSL может быть реализован с помощью макросов, которые генерируют кодовые шаблоны, специфичные для DSL.(Плюс функции, относящиеся к DSL).Дело в том, что хотя макросы и функции могут расширять возможности языка, они все еще реализованы на этом языке.

Полагаю, вы могли бы пойти еще дальше и написать интерпретатор на Python - но там вы все равнополучите работоспособность Python бесплатно, поскольку ваш переводчик переводит ваш собственный язык обратно в Python.

...