"Я не пытаюсь предварительно обработать исходный код ... Я просто хочу что-то, что я могу ввести [bigDecimal arithmetic expression] text".
Половина решения проблемы - это признание проблемы в том, что она есть,Вы точно хотите, чтобы что-то предварительно обработало ваши выражения BigDecimal для создания легальной Java.
У вас есть только два основных варианта:
Автономный "предметно-ориентированный язык "и компилятор DSL, который принимает" стандартные "выражения и преобразует их непосредственно в код Java.(Это один из видов препроцессора).Это оставляет вам проблему с сохранением всех фрагментов выражения и каким-то образом зная, куда поместить их в код Java.
Инструмент, который читает исходный текст Java, находит такие выражения и преобразует их в BigDecimal в тексте.Я бы предложил что-то, что позволило бы вам кодировать выражения вне реального кода и вставлять перевод.
Возможно (украдено из другого ответа):
// BigDecimal a = b - c * d;
BigDecimal a = b.subtract( c.multiply( d ) );
со значением «скомпилировать большое десятичное выражение в комментарии в его Java-эквивалент и заменить следующееоператор с этим переводом.
Чтобы реализовать вторую идею, вам нужна система программных преобразований , которая может применять правила перезаписи от источника к источнику для преобразования (генерировать как особый случай преобразования) код. Это просто препроцессор, который может быть настроен в соответствии с вашими потребностями.
Наш инструментарий реинжиниринга программного обеспечения DMS с интерфейсом Java может это сделатьДля выполнения этой части преобразования вам необходим полный анализатор Java; вам потребуется разрешение имен и типов, чтобы можно было проанализировать / проверить предложенное выражение на предмет корректности.
Хотя я согласен с тем, что нотация Java как естьуродливо, и ваше предложение сделает его красивее, мое личное мнение таково, что это не стоит усилий. В итоге вы зависите от компаИнструмент lex (да, DMS сложен: манипулировать кодом нелегко) за довольно незначительный выигрыш.
Если вы и ваша команда написали тысячи этих формул, или авторы таких формул были наивными на Java, это могло бы иметь смысл.В этом случае я бы пошел дальше и просто настаивал на том, чтобы вы писали стандартный формат выражений там, где вам это нужно.Вы можете настроить интерфейс Java, чтобы определять, когда типы операндов имеют десятичный тип, и выполнять перезапись для вас.Затем вы просто запускаете этот препроцессор перед каждым шагом компиляции Java.