Я работаю над написанием простого интерпретатора Пролога на Java.
Как мне найти последний символьный индекс первого элемента, либо элемент head, либо tail-элемент строки в «Синтаксисе списка»?
Синтаксис списка выглядит так:
(X)
(p a b)
(func (func2 a) (func3 X Y))
(равная ночь (мать Каин))
Заголовок для каждой из этих строк в следующем порядке:
Голова: «Х», индекс: 1
Руководитель: "p", индекс: 1
Руководитель: "func", индекс: 4
Голова: «равная», индекс: 5
По сути, мне нужно сопоставить строку, которая следует сразу за первым "(" и заканчивается либо пробелом, либо закрывающим ")", в зависимости от того, что произойдет раньше. Мне нужен индекс символа последнего символа элемента head.
Как я могу сопоставить и получить этот индекс в Java?
Решение Брабстера действительно близко. Однако рассмотрим случай:
((b X) Y)
Где элемент head (b x). Я попытался исправить это, удалив "(" из разделителей сканера, но он все еще работает из-за пробела между "b" и "x".
Аналогично:
((((б Ш) Х) Y) Z) * 1030 *
Где голова (((б ш) х) Y).