2014-01-06 3 views
0

Я работаю над основным редактором электронных таблиц (все написано с нуля) с моим классом Java. Мне было поручено написать пакет функций (для анализа содержимого ячейки и вывода вычисленного результата). В настоящее время я могу проанализировать выражение, такое как 1*(2+3)^4-5%6, путем преобразования его в RPN, а затем вычисления результата. Теперь я работаю над добавлением имен ячеек в это выражение. То, что я хотел бы, чтобы парсер для имени ячейки выполнял, напрямую заменяет имена ячеек на их числовые значения, но мне тяжело. Мне удалось найти способ использовать регулярное выражение с одной ячейкой (вдохновлено https://stackoverflow.com/a/10073892/3165024), но я не знаю, как заставить его работать с несколькими именами ячеек в выражении.Синтаксис синтаксического анализа синтаксиса

ответ

0

Просто примечание. Использование Regex для этого подхода не является правильным способом. Простые ссылки, такие как A1, могут быть успешно заменены вычисленными значениями из ссылочных ячеек, но ваша задача может стать намного сложнее при попытке проанализировать более сложные выражения, такие как ссылки на перекрестные листы (= Sheet2! A1, = 'My sheet' A1), 3d-ссылки (= Sheet1: Sheet3! A1), ссылки в стиле R1C1 (= R [-1] C3), определенные имена имен (= имя) и т. Д. Замена ссылок на ячейки для вычисленных значений запретит вам вычислять встроенные функции, такие как ROW (A2) (результат равен 2), , который ожидает ссылочный аргумент вместо значения ячейки.

Я думаю, что ваша форма RPN должна быть увеличена, чтобы включать элементы для простых ссылок, 3d-ссылки и т. Д. Самый простой способ создать синтаксический анализатор для выражений, подобных Excel, - это использование генераторов компилятора. Посмотрите, например, на «Генератор компилятора Coco/R» (http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/), у него есть версия для java.

Смежные вопросы