powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / А как бы Вы реализовали интерпретатор DSL на Java?
40 сообщений из 40, показаны все 2 страниц
А как бы Вы реализовали интерпретатор DSL на Java?
    #38325957
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наидобрейшего.

Второй день активного поиска красивого и стройного примера паттерна Интерпретатор рождает больше вопросов чем ответов.
В прошлой жизни разработчика С++ использовал Буст::Спирит во всей его красе, с парсерами, генераторами, лексерами, правилами и т.п. Вполне себе празднично (не считая ошибок компиляции на десятки экранов).
Но вернёмся к Яве.

Варианты:
1. Сборка Эклипс заточенная под использование Xtext. Книг по нему нет, отдельно упоминание в DSL in Action, документация не радует, т.к. развернутых примеров нет. Гугл предлагает 100500 записей в блогах в которых кроме Хелло_ворда ничего нет. Конечно можно потратить время и самому разобраться. Но стоит ли?
2. Груви и т.п. Безусловно знать что-то такое легковесное - огромный плюс, когда работаешь с Явой, но опять же нужно время, если оно того стоит, то так тому и быть.
3. Написать или скачать с гита что-то готовое, м б Вам попадались на глаза такие исходники?
4. JNI для Буст::Спирит, но как-то дурно это пахнет на первый взгляд.
5. Ваш вариант..



Коллеги, буду крайне признателен если поделитесь опытом.Спасибо.

п.с. вопрос по сути в библиотеке для парсинга/генерации, есть ли аналогичные Спириту, что в тренде по сабжу? Наспамьте сладеньких феймворков. Ещё раз спасибо. :)
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38325968
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если задать вопрос так

А как бы Вы реализовали интерпретатор на Java?

то смысл не изменится?
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38325971
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

предметная область исчезает, не?
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38325983
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ANTLR
ANother Tool for Language Recognition, (formerly PCCTS) is a language tool that provides a framework for constructing recognizers, compilers, and translators from grammatical descriptions containing Java, C#, or C++ actions. ANTLR provides excellent support for tree construction, tree walking, and translation.


SableCC
SableCC is an object-oriented framework that generates compilers (and interpreters) in the Java programming language. This framework is based on two fundamental design decisions. Firstly, the framework uses object-oriented techniques to automatically build a strictly typed abstract syntax tree. Secondly, the framework generates tree-walker classes using an extended version of the visitor design pattern which enables the implementation of actions on the nodes of the abstract syntax tree using inheritance.

Beaver
Beaver is a LALR(1) parser generator. It takes a context free grammar and converts it into a Java class that implements a parser for the language described by a grammar.
Go To Beaver

CUP
A LALR parser generator.

JavaCC
Java Compiler Compiler (JavaCC) is the most popular parser generator for use with Java [tm] applications. A parser generator is a tool that reads a grammar specification and converts it to a Java program that can recognize matches to the grammar. In addition to the parser generator itself, JavaCC provides other standard capabilities related to parser generation such as tree building (via a tool called JJTree included with JavaCC), actions, debugging, etc.

Chaperon
Chaperon is a project that converts structured text to XML. It includes a strong LALR(1) parser to parse the text and a tree builder, which creates an XML document.

JFlex
JFlex is a lexical analyzer generator (also known as scanner generator) for Java

JTopas
The JTopas project provides a small, easy-to-use Java library for the common problem of parsing arbitrary text data. These data can come from a simple configuration file with a few comments, a HTML, XML or RTF stream, source code of various programming languages etc. Sometimes a text has to be parsed completely, sometimes only parts of it are important.

runcc
RunCC is a new kind of parsergenerator that generates parsers and lexers at runtime. Source generation is only optional. It features the absence of any cryptography. Although intended for small languages, it comes with Java and XML example parsers.

Rats!
Rats! is a parser generator for C-like languages (though currently it only generates parsers in Java). It has been designed so that grammars are concise and easily extensible. To this end, grammars are organized into modules that can be easily changed by adding, removing, or modifying alternatives in individual productions and composed with each other through module parameters. Furthermore, it relies on ordered choices to avoid ambiguities, supports syntactic predicates for unlimited lookahead, and integrates lexing with parsing. Finally, it has extensive support for automatically generating abstract syntax trees, thus greatly reducing the need for explicit semantic actions.

grammatica
Grammatica is a C# and Java parser generator (compiler compiler). It improves upon simlar tools (like yacc and ANTLR) by creating well-commented and readable source code, by having automatic error recovery and detailed error messages, and by support for testing and debugging grammars without generating source code.

Coco/R
Coco/R is a compiler generator, which takes an attributed grammar of a source language and generates a scanner and a parser for this language. The scanner works as a deterministic finite automaton. The parser uses recursive descent. LL(1) conflicts can be resolved by a multi-symbol lookahead or by semantic checks. Thus the class of accepted grammars is LL(k) for an arbitrary k. There are versions of Coco/R for different languages.

SJPT
SJPT is a parsing toolkit that supports both top-down (LL(1) and Simple Precedence) and bottom-up parsing (LR(0), SLR(1), LR(1) and LALR(1)). The toolkit also supports generating Java parsers for all the bottom-up parsing methods, based on a CUP definition (similar to Yacc and CUP, but not restricted to LALR parsers only).

OpenL
OpenL is an innovative framework for development of different language configurations. It is not another programming language, but rather a methodology and supporting tools allowing professional programmers to create their own versions of Java-like languages.

JParsec
Jparsec is a recursive-desent parser combinator framework written for Java. It can be used to construct parser for simple toy syntax as well as bizzare context-sensitive ones.


parboiled
parboiled is a pure Java library that provides a lightweight and easy-to-use, yet powerful and elegant PEG (Parsing Expression Grammar) parsing facility. You define your grammar rules directly in Java source, there is no need to write and maintain special, external grammar files. parboiled provides for clean separation of grammar and action code while preserving seamless integration with full IDE support (syntax hightlighting, code navigation, refactoring, etc.). parboiled minimizes the time and cost required for developing custom DSLs (Domain Specific Languages) in Java.

Laja
Laja is a combined code- and parser generator. The code generator can run on most platforms. The parser generator generates Java code. One of the ideas of Laja is that it should be simple and intuitive to use by developers.
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38325985
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что думаете?
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38325992
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________,

многие склоняются к АNTLR, частично к Скале.Скала, как по мне, долгоиграющей будет чем Груви. На АNTLR ночь помедитирую (=
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38326017
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________mayton,

предметная область исчезает, не?
Почему исчезнет? Когда ты делаешь инетрпретатор JavaScript
разве у тебя исчезает предметная область самого скрипта?

И вообще посмотри в сторону XML, JSON. Может тебе его хватит.

P.S. Такой сложный вопрос, что он тянет на блог. И вообще
вопросы не так задают. Проще надо. Короче. И разбить сабж
на несколько более простых вопросов.
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38326019
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________,

Надо смотреть что за DSL. А скриптовые языки точно не подойдут?
Вот этого в списке не вижу.
http://www.jetbrains.com/mps/
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38326028
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczkT_________,

Надо смотреть что за DSL. А скриптовые языки точно не подойдут?
Вот этого в списке не вижу.
http://www.jetbrains.com/mps/

Двачую! Спасибо, оч интересно и надеюсь действительно также просто как они пишут, добавил в ночной_туду_лист.

А скриптовые языки.. новый синтаксис не пугает, но стоит ли овчинка выделки?) Оверхед как и ANTLR (имхо).

2 алл, по Xtext хотелось бы услышать истории успеха)
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38326033
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DSL глубокий, многослойный. на первых уровнях совершенно разные источники и форматы, требуется доконвертить абстрактые типы данных до ИИ через все лэвэлы, там что-то подумается и будет спускаться до первоисточников(снова и снова).
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38326097
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни пса непонятно.
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38326190
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________,

ANTLR, и вперед.... Че тут думать?
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38326192
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________,

4. JNI для Буст::Спирит, — не взлетит. JNI НЕ для С++, только для С.
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38326342
bajork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kT_________
http://www.packtpub.com/implementing-domain-specific-languages-with-xtext-and-xtend/book
примеров масса хоть сам же xtext ;)
или вот https://code.google.com/a/eclipselabs.org/p/spray.

принцип работы простой создаешь мета-модель на EMF описываешь грамматику на все том же antlr и генератор в джаву/груви/скалу...
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38326782
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________Коллеги, буду крайне признателен если поделитесь опытом.Спасибо.

Ну во первых Java сама себе интерпретатор.
И есть возможность запустить Java - код из Java-приложения (обертки нужно дофига писать, но можно).

Сам лично пользуюсь - org.apache.commons.jexl2.
Т.к. сложного ничего не надо, а только выражения посчитать.
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38326897
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulНу во первых Java сама себе интерпретатор.
А что для Вас не интерпретатор? )) Только С/C++ и ассемблеры? В Java уж лет как 15 используется JIT ...
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38327037
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.jetbrains.com/mps/ - для меня слишком толсто, но прозрачно и понятно, прочитал код на картинках http://www.jetbrains.com/mps/docs/tutorial.html, много лишних движений с декларацией концептов, думаю туда XSD можно воткнуть (вполне логично реализовать такой функционал).. и дальше:

Код: java
1.
public void update() { $LOOP$[$MAP_SRC$LocalVar[int $[i]=0];]  }



Не уверен что это Java_way.имхо. Не хватает целостности между концептами, правилами и кодом, кодом который становится похож на пхп. Не эстетично. Исключительно ИМХО.

Но понял что ожидаю от инструмента по сабжу. Коллеги, подскажите в каких либах используется AOP с аннотациями, ведь гораздо удобней (не всегда) классы разметить ими, чем:
Код: java
1.
public class $[CalculatorImpl]  



А в идеале что бы средствами языка можно было вопрос решить, типо:
Код: java
1.
2.
3.
Rule rule=(a+b)+'char'+"string"+(_1+_2);
Rule rule2= _3*rule;
void parse(string, rule2, delimiter, result);




Большое Всем спасибо. По Xtext и ANTLR отпишу, пока не готов.
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38327045
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моём понимании DSL описывает данные и связи между ними. Тоесть нет
необходимости делать циклы и ветвления. И здесь какой нибудь
JSON уже покрывает все требования.

Что еще нужно сверх того что нельзя описать JSON-ом?
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38327061
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonkT_________mayton,

предметная область исчезает, не?
Почему исчезнет? Когда ты делаешь инетрпретатор JavaScript
разве у тебя исчезает предметная область самого скрипта?

И вообще посмотри в сторону XML, JSON. Может тебе его хватит.

P.S. Такой сложный вопрос, что он тянет на блог. И вообще
вопросы не так задают. Проще надо. Короче. И разбить сабж
на несколько более простых вопросов.

Проще не получиться. В ПО требуется поддержка скриптов, а постфактум её вписать - истинное зло. При этом необходимо парсить/генерить много разнородных типов данных (чаще всего сначала они не ХМL). Поэтому нужен "золотой молот" ;)
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38327339
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bajork kT_________
http://www.packtpub.com/implementing-domain-specific-languages-with-xtext-and-xtend/book
примеров масса хоть сам же xtext ;)
или вот https://code.google.com/a/eclipselabs.org/p/spray.

принцип работы простой создаешь мета-модель на EMF описываешь грамматику на все том же antlr и генератор в джаву/груви/скалу...

Спасибо. Книга Release Date : August 2013, ждать не до большого.
Отписал этому мужчине, что бы прислал книгу)))
+ https://github.com/LorenzoBettini/Xtext2-experiments и http://www.lorenzobettini.it/papers/
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38327515
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38327562
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirmad_nazgulНу во первых Java сама себе интерпретатор.
А что для Вас не интерпретатор? )) Только С/C++ и ассемблеры? В Java уж лет как 15 используется JIT ...

В середине 80-х почти у всех ИНТЕРПРЕТАТОРОВ BASIC от MS была возможность "скомпилировать" программу в Байт-код, причем часть кода могла "компилироваться" в непосредственные команды микропроцессора. Не говоря уже о QuickBASIC, который был КОМПИЛЯТОРОМ, но мог работать в режиме ИНТЕПРЕТАТОРА.
Но дело не в этом.
В Java есть возможность исполнения кода в режиме интерпретации.
Т.е. сам себе Java интепретатор, что не исключает возможности компиляции его кода.

Вообще-то чистых компиляторов и интерпретаторов сейчас практически нет...
Ну кроме assembler и C, насчет С++ я не уверен. ;-)
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38328282
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
парни.а подскажите где можно примеры красивые найти ссловарей и описание развернутое.например:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

generate statemachine "http://www.xtext.org/example/secretcompartments/Statemachine"

Statemachine :
     {Statemachine}
     ('events' 
          events+=Event+ 
     'end')?
     ('resetEvents' 
          resetEvents+=[Event]+ 
     'end')?
     ('commands' 
          commands+=Command+ 
     'end')?
     states+=State*
;

Event:
     name=ID code=ID
;

Command:
     name=ID code=ID
;

State:
     'state' name=ID
          ('actions' '{' actions+=[Command]+ '}')?
          transitions+=Transition*
     'end'
;

Transition:
     event=[Event] '=>' state=[State]
;
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38328284
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________,

все понятно с кодом но с креативом дефицит у меня.(
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38328558
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YouTube Video
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38328848
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________парни.а подскажите где можно примеры красивые найти ссловарей и описание развернутое.например:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

generate statemachine "http://www.xtext.org/example/secretcompartments/Statemachine"

Statemachine :
     {Statemachine}
     ('events' 
          events+=Event+ 
     'end')?
     ('resetEvents' 
          resetEvents+=[Event]+ 
     'end')?
     ('commands' 
          commands+=Command+ 
     'end')?
     states+=State*
;

Event:
     name=ID code=ID
;

Command:
     name=ID code=ID
;

State:
     'state' name=ID
          ('actions' '{' actions+=[Command]+ '}')?
          transitions+=Transition*
     'end'
;

Transition:
     event=[Event] '=>' state=[State]
;



http://javatutor.net/books/tip/complex_system_states
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38329585
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кто может рассказать или показать интеграцию хтекст и спринга?)
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38329619
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xtext - с синтаксисом всё понятно, проблем нет. Куча всего генерится, валидаторы, УИ, тесты, генераторы. Конечно язык там (например смотрим генератор, который в деволтном проекте) ..тема на любителя. Из плюсов, для дсл-ного языка автоподстановка, подсветка синтаксиса, всплывающие подсказки (если их написать ;)), автообновление кода после изменений в дсл, всякие генераторы схем и прочее что можно реализовать на платформе Эклипса)).
Язык там xtend если я правильно понимаю). Действительно на любителя:



Но вот что больше всего интересно как это прикрутить к Спрингу, стаковерфлов говорит так:




Коллеги, кто сталкивался или м б попадались исходники, подскажите пожалуйста.
п.с. Инфы достаточно по библиотеке, как видео так и пдф-док, т.ч. про недокументированность это я погорячился =(. Но про интеграцию нет инфы, правда неоднократно попадалось как к Гугл_Джус прикрутить.
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38329626
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________Xtext - с синтаксисом всё понятно, проблем нет. Куча всего генерится, валидаторы, УИ, тесты, генераторы. Конечно язык там (например смотрим генератор, который в деволтном проекте) ..тема на любителя. Из плюсов, для дсл-ного языка автоподстановка, подсветка синтаксиса, всплывающие подсказки (если их написать ;)), автообновление кода после изменений в дсл, всякие генераторы схем и прочее что можно реализовать на платформе Эклипса)).
Язык там xtend если я правильно понимаю). Действительно на любителя:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
package org.xtext.example.mydsl.generator

import org.eclipse.emf.ecore.resource.Resource
import org.eclipse.xtext.generator.IGenerator
import org.eclipse.xtext.generator.IFileSystemAccess
import org.xtext.example.mydsl.statemachine.Statemachine
import org.xtext.example.mydsl.statemachine.Event
import org.xtext.example.mydsl.statemachine.Command
import org.xtext.example.mydsl.statemachine.State

class MyDslGenerator implements IGenerator {
 
 override void doGenerate(Resource resource, IFileSystemAccess fsa) {
  fsa.generateFile(resource.className+".java", toJavaCode(resource.contents.head as Statemachine))
 }
 
 def className(Resource res) {
  var name = res.URI.lastSegment
  name.substring(0, name.indexOf('.'))
 }
 
 def toJavaCode(Statemachine sm) '''
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 
 public class «sm.eResource.className» {
  
  public static void main(String[] args) {
   new «sm.eResource.className»().run();
  }
  
  «FOR c : sm.commands»
   «c.declareCommand»
  «ENDFOR»
  
  protected void run() {
   boolean executeActions = true;
   String currentState = "«sm.states.head.name»";
   String lastEvent = null;
   while (true) {
    «FOR state : sm.states»
     «state.generateCode»
    «ENDFOR»
    «FOR resetEvent : sm.resetEvents»
     if ("«resetEvent.name»".equals(lastEvent)) {
      System.out.println("Resetting state machine.");
      currentState = "«sm.states.head.name»";
      executeActions = true;
     }
    «ENDFOR»
    
   }
  }
  
  private String receiveEvent() {
   System.out.flush();
   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
   try {
    return br.readLine();
   } catch (IOException ioe) {
    System.out.println("Problem reading input");
    return "";
   }
  }
 }
 '''
 
 def declareCommand(Command command) '''
  protected void do«command.name.toFirstUpper»() {
   System.out.println("Executing command «command.name» («command.code»)");
  }
 '''
 
 def generateCode(State state) '''
  if (currentState.equals("«state.name»")) {
   if (executeActions) {
    «FOR c : state.actions»
     do«c.name.toFirstUpper»();
    «ENDFOR»
    executeActions = false;
   }
   System.out.println("Your are now in state '«state.name»'. Possible events are [«
    state.transitions.map(t | t.event.name).join(', ')»].");
   lastEvent = receiveEvent();
   «FOR t : state.transitions»
    if ("«t.event.name»".equals(lastEvent)) {
     currentState = "«t.state.name»";
     executeActions = true;
    }
   «ENDFOR»
  }
 '''
 
}


Но вот что больше всего интересно как это прикрутить к Спрингу, стаковерфлов говорит так:


Код: java
1.
2.
3.
4.
5.
6.
7.
new org.eclipse.emf.mwe.utils.StandaloneSetup().setPlatformUri("../");
Injector injector = new MyDslStandaloneSetup().createInjectorAndDoEMFRegistration();
XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet.class);
resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE);
Resource resource = resourceSet.getResource(
    URI.createURI("platform:/resource/org.xtext.example.mydsl/src/example.mydsl"), true);
Model model = (Model) resource.getContents().get(0);




oO

Коллеги, кто сталкивался или м б попадались исходники, подскажите пожалуйста.
п.с. Инфы достаточно по библиотеке, как видео так и пдф-док, т.ч. про недокументированность это я погорячился =(. Но про интеграцию нет инфы, правда неоднократно попадалось как к Гугл_Джус прикрутить.
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38329630
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинkT_________парни.а подскажите где можно примеры красивые найти ссловарей и описание развернутое.например:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

generate statemachine "http://www.xtext.org/example/secretcompartments/Statemachine"

Statemachine :
     {Statemachine}
     ('events' 
          events+=Event+ 
     'end')?
     ('resetEvents' 
          resetEvents+=[Event]+ 
     'end')?
     ('commands' 
          commands+=Command+ 
     'end')?
     states+=State*
;

Event:
     name=ID code=ID
;

Command:
     name=ID code=ID
;

State:
     'state' name=ID
          ('actions' '{' actions+=[Command]+ '}')?
          transitions+=Transition*
     'end'
;

Transition:
     event=[Event] '=>' state=[State]
;



http://javatutor.net/books/tip/complex_system_states

благодарю!
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38330494
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, помоги! Словил клин =(
Не могу найти примеры интеграции Хтекст и Спринга, туториалы пишут что есть четыре варианта вписать ДСЛ в ява код, не могу осилить зоопарк этих Хтекст, Хпенд, Хбайс, Хтенд. Поделитесь опытом, плиз. Спасибо.
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38333216
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, прошу прощения за трололо, но подниму. Т.к. актуально, и надеюсь что как-то решим этот вопрос.Спасибо за понимание)
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38333565
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________Ребята, прошу прощения за трололо, но подниму. Т.к. актуально, и надеюсь что как-то решим этот вопрос.Спасибо за понимание)

на рсдн.ру спроси еще )
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38335723
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kT_________,

на счёт Xtext ничего не скажу, не использовал. Но Вы толком не обрисовали суть задачи, поэтому никто толком ничего и не советует. Возможно, м.б. проще всё сделать самому, вроде как, ANTLR и JavaCC считаются классикой. Или взять готовое: JRuby, Jython, Scala и т.п., или Groovy, который скриптовый и "поближе" к java, имеет кучу выкрутасов для DSL ( Builders , Command chains или здесь и т.п.). Если нужен разбор дампов данных, или разбор большого потока и т.п., то м.б. составление глобального AST, многократная его обработка, генерация огромного байт-кода (т.е. всё впихивать в исходники и бинарные классы) - не тот сценарий. Возможно лучше использовать потоковый парсер токенов. Вот здесь я выкладывал пример подобного парсера для ручной работы, можно найти аналог на java или лучше реализовать самому. Если при этом нужна поддержка несложных вычислений, то можно подключить те же скриптовые системы а-ля Rhino, Groovy или BeanShell, или простые интерпретаторы (например, здесь раньше рекомендовали org.apache.commons.jexl2), или генерировать jvm-код, например, через ASM ( презентация ).
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38336214
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100kT_________,

на счёт Xtext ничего не скажу, не использовал. Но Вы толком не обрисовали суть задачи, поэтому никто толком ничего и не советует. Возможно, м.б. проще всё сделать самому, вроде как, ANTLR и JavaCC считаются классикой. Или взять готовое: JRuby, Jython, Scala и т.п., или Groovy, который скриптовый и "поближе" к java, имеет кучу выкрутасов для DSL ( Builders , Command chains или здесь и т.п.). Если нужен разбор дампов данных, или разбор большого потока и т.п., то м.б. составление глобального AST, многократная его обработка, генерация огромного байт-кода (т.е. всё впихивать в исходники и бинарные классы) - не тот сценарий. Возможно лучше использовать потоковый парсер токенов. Вот здесь я выкладывал пример подобного парсера для ручной работы, можно найти аналог на java или лучше реализовать самому. Если при этом нужна поддержка несложных вычислений, то можно подключить те же скриптовые системы а-ля Rhino, Groovy или BeanShell, или простые интерпретаторы (например, здесь раньше рекомендовали org.apache.commons.jexl2), или генерировать jvm-код, например, через ASM ( презентация ).




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

Работает фреймворк как мета-метапрограммирование. Генеря Хтенд (диалект Явы), предлагается уже им генерить Ява_код, создать проект заранее или нагенерить его на Хтенд - не важно, бле, какая же это круть!!!
Представьте как можно на лету заворачивать доменные сущности в верблюда и т.п., + есть на гуглкоде проект плюшки Хтекста для Ру)) .


Но работает это на Eclipse Modeling Project (EMP), и в стандэлон как-то запустить нагенерированный код конечно можно, но если таких парсеров несколько сотен, то утомительно писать ...


остался один вопрос.. как пистаь много и быстро простых парсеров?? АНТРЛ???
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38337134
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kT_________..., но если таких парсеров несколько сотен, то утомительно писать ...

остался один вопрос.. как пистаь много и быстро простых парсеров?? АНТРЛ???

Имхо, нужен фреймворк, который позволяет задавать правила разбора модульно, т.е. часть правил можно обобщить и многократно подключать в других синтаксических модулях. Грамматики а-ля BNF/PEG задаются в виде спец-DSL или через java/scala-код, нужно оценить, как удобнее. Кроме ANTLR, имхо, можно глянуть на Rats!, JParsec, parboiled и др. Или, чем возиться с проблемами и особенностями сторонней системы, м.б. проще реализовать ручной разбор через простой и настраиваемый парсер лексем.
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38337354
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100kT_________..., но если таких парсеров несколько сотен, то утомительно писать ...

остался один вопрос.. как пистаь много и быстро простых парсеров?? АНТРЛ???

Имхо, нужен фреймворк, который позволяет задавать правила разбора модульно, т.е. часть правил можно обобщить и многократно подключать в других синтаксических модулях. Грамматики а-ля BNF/PEG задаются в виде спец-DSL или через java/scala-код, нужно оценить, как удобнее. Кроме ANTLR, имхо, можно глянуть на Rats!, JParsec, parboiled и др. Или, чем возиться с проблемами и особенностями сторонней системы, м.б. проще реализовать ручной разбор через простой и настраиваемый парсер лексем.


А если так:
ДСЛ делается на Хтексте, потом генерится Хтенд_код, в котором руками дописать не только генерацию Ява_кода, а ещё Спирита на С++, жесть? изврат? И подключать парсеры нагенерированные на С++ ..ну там мммм, ка кпростые утилиты))) надо парсить потоки вывода, а Ява_коду отдавать через WSDL, который генерить автоматом.. как со стороны Явы так и со стороны С++, первичные парсеры на плюсах будут бодрее чем на Яве.
Получается отдельно собирать Ява проект и С++, но эт можно заскриптовать, не проблема.
ДО конца не ясно чем данные передавать, WSDL или домеными сокетами.. идеально в БД писать, но МуСКЛ С++ АПИ ..истинное зло)))

А другие языки/диалекты конечно норм, но буливар двоих не вынесет;)
Хочу Спирит. Создам отдельный топик в С++. Не закрывайте пока этот. Спасбо.
п.с. Непозволительная роскошь каждую неделю учить новый синтаксис((
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38337380
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38337382
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________PSV100пропущено...

Имхо, нужен фреймворк, который позволяет задавать правила разбора модульно, т.е. часть правил можно обобщить и многократно подключать в других синтаксических модулях. Грамматики а-ля BNF/PEG задаются в виде спец-DSL или через java/scala-код, нужно оценить, как удобнее. Кроме ANTLR, имхо, можно глянуть на Rats!, JParsec, parboiled и др. Или, чем возиться с проблемами и особенностями сторонней системы, м.б. проще реализовать ручной разбор через простой и настраиваемый парсер лексем.


А если так:
ДСЛ делается на Хтексте, потом генерится Хтенд_код, в котором руками дописать не только генерацию Ява_кода, а ещё Спирита на С++, жесть? изврат? И подключать парсеры нагенерированные на С++ ..ну там мммм, ка кпростые утилиты))) надо парсить потоки вывода, а Ява_коду отдавать через WSDL, который генерить автоматом.. как со стороны Явы так и со стороны С++, первичные парсеры на плюсах будут бодрее чем на Яве.
Получается отдельно собирать Ява проект и С++, но эт можно заскриптовать, не проблема.
ДО конца не ясно чем данные передавать, WSDL или домеными сокетами.. идеально в БД писать, но МуСКЛ С++ АПИ ..истинное зло)))

А другие языки/диалекты конечно норм, но буливар двоих не вынесет;)
Хочу Спирит. Создам отдельный топик в С++. Не закрывайте пока этот. Спасбо.
п.с. Непозволительная роскошь каждую неделю учить новый синтаксис((



не утилиты, обычные библиотеки;)
...
Рейтинг: 0 / 0
А как бы Вы реализовали интерпретатор DSL на Java?
    #38337480
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага! Можно через файлы во временной файловой системе либо через CMS
(stands for C++ Messaging Service) is a JMS-like API for C++ for interfacing with Message Brokers such as Apache ActiveMQ.

Ппц, но только молодость только хардкор!
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / А как бы Вы реализовали интерпретатор DSL на Java?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]