Если вы собираетесь анализировать lisp, вам нужно знать о «стеке».
Когда вы сталкиваетесь с (
, вы толкаете в стек. Теперь вы находитесь в новой области видимости, на один уровень выше, чем раньше.
Аналогично, когда вы сталкиваетесь с )
, вы попадаете из стека - закончите этот слой и спуститесь на уровень.
Так что в этом случае вы находитесь в пустом состоянии, чтобы начать. Первое, с чем вы сталкиваетесь, это (
, так что теперь вы находитесь в состоянии «определения». (Я только что это придумал. Называйте это как хотите.) Вы встречаете токен def-instance, а затем название университета. Вы продолжаете читать и сталкиваетесь с другим (
(Игнорировать пробелы, просто анализировать токены.) Это переводит вас в состояние свойств. (Я тоже это придумал.) Поскольку вы переходите от определения к свойствам, теперь все в порядке, чтобы создать свой объект. Что-то вроде UnivData data = new UnivData(parsedToken)
(где parsedToken оценивается как «Адельфи».
Хорошо, вернемся к свойствам - сначала вы прочитали (
, затем прочитали «state» и «newyork», а затем еще один )
. Таким образом, вы можете присвоить переменной состояния текущей UnivData команду newyork.
Вы повторяете это поведение для всех свойств, но затем вы сталкиваетесь с дополнительным )
после академического акцента. Это ваша подсказка, чтобы закрыть текущий объект и начать поиск другого.
Сначала я испытывал желание сказать, использовать Карту. Тот факт, что есть несколько токенов с академическим акцентом, указывает на то, что вы должны использовать лучшую структуру данных, возможно, карту>. Может быть даже лучше прокрутить свой собственный класс Property со строкой, либо, если он получает несколько значений, он переключается на список строк.