Вот ссылка на lis.py, если вы не знакомы: http://norvig.com/lispy.html
Я пытаюсь реализовать крошечный интерпретатор lisp в Go. Меня вдохновила реализация lisp Lis.py Питера Норвига на Python.
Моя проблема в том, что я не могу придумать ни одного эффективного способа анализа s-выражений. Я думал о счетчике, который будет увеличиваться на 1, когда он увидит "(" и будет уменьшаться, когда увидит ")". Таким образом, когда счетчик равен 0, вы знаете, что у вас есть полное выражение.
Но проблема в том, что это означает, что вам придется зацикливаться на каждом отдельном выражении, что сделает интерпретатор невероятно медленным для любой большой программы.
Любые альтернативные идеи были бы замечательными, потому что я не могу придумать лучшего способа.