BiConsumer<_notaFiscalServicoGeraServicosMov, Double> consumer = (instance, param) -> {
try {
methodInstance.invoke(instance, new Object[] {param});
} catch (LotsOfExceptionsHere e) {
throw new RuntimeException(e);
}
};
, который должен это сделать. На самом деле другого пути нет.
В нашем проекте мы определили метамодель AST в UML и использовании ANTLR (Java) для заполнения модели. Мы также поддерживаем маркерную информацию от ANTLR после парсинга, но мы еще не попытались обновить базовый текстовый файл с модификациями, сделанными на модели.
Это имеет отвратительные издержки (в инфраструктуре, такой как Eclipse UML2/EMF), но наша цель состоит в том, чтобы использовать высокоуровневые инструменты для Основанной на модели/управляемой Разработки (MDD, MDA) так или иначе, таким образом, мы решили использовать его на каждом уровне.
Я думаю, что один из наших студентов, однажды играемых с OpenArchitectureWare и управляемых, получает изменения от основанного на Eclipse, сгенерированного редактора назад в синтаксическое дерево (не связанный с моделью UML выше) автоматически, но я не знаю детали об этом.
Вы могли бы также хотеть посмотреть на древовидные грамматики ANTLR.
Исследовательское сообщество решило, что обмен графами был правильным решением при перемещении информации из одного инструмента анализа программ в другой. См. http://www.gupro.de/GXL
Совсем недавно OMG определила стандарт для обмена абстрактными синтаксическими деревьями. См. http://www.omg.org/spec/ASTM/1.0/Beta1/
Эта проблема, кажется, решается снова и снова. За эти годы было сделано полдюжины предложений "автобус с инструментами". все это решило проблему, и никто никогда не обгонял отрасль. Проблема в том, что а) AST легко представить, используя любые вложенные обозначения [круглые скобки, например LISP, например XML, ...] так что люди легко развертывают собственное решение, и б) для одного инструмента для обмена AST с другим, они оба должны согласиться по существу в том, что означают узлы AST; но большинство AST довольно случайно получены из конкретного грамматика / технология синтаксического анализа, используемая каждым инструментом, и есть почти всегда разногласия по этому поводу между инструментами. Итак, я видел очень мало инструментов, которые осмысленно обмениваются AST.
Если вы занимаетесь хобби, я бы предпочел шепелявый кодирование деревьев, где каждый узел имеет следующий формат: (...) Его легко генерировать и легко читать.
Я работаю над профессиональным инструментом для управления программами . Если мы распечатать AST, мы делаем то же самое. В основном индивидуальный AST слишком сложны для практического применения, поэтому мы почти никогда не распечатываем весь AST, в лучшем случае только узел и несколько детей глубоко. Наш инструмент не обменивается AST с кем-либо (см. Причины выше :), но просто Прекрасно встраивая его в память, делая с ним невероятные вещи по причинам анализа или трансформации, а затем либо просто удалив его (не нужно никуда отправлять) или регенерировать текст на исходном языке из дерева. [Последнее означает, что вам нужен анти-синтаксический анализ или "красивая печать" технология]