2015-09-10 3 views
0

Я хотел бы сегментировать исходный код Lisp в список сегментов кода. Каждый сегмент является либо S-выражением верхнего уровня, либо любым текстом между этими S-выражениями.Исходный код сегмента Lisp на высшем уровне S-выражение от emacs Lisp?

Первоначально я думал, что могу использовать шаблон регулярного выражения для соответствия S-выражению верхнего уровня, но я обнаружил, что обрабатывать соответствующие скобки не так просто, как на верхнем уровне.

(я считаю, что можно было бы выработать регулярное выражение для соответствия верхнего уровня S-EXP), следуя примеру этого Using regular expressions to extract functions and function headers from source code

Далее, я полагаю, что я может сканировать текст, чтобы наблюдать первая левая скобка '(' и последняя правая скобка ')', и соответственно выполните сегментацию.

Прежде чем я это сделаю, я чувствую, что, учитывая вездесущую природу S-выражения в emacs Lisp, должно быть уже существующее решение для моих требований.

Так что я спрашиваю, можете ли вы научить меня любому решению?

Thanks,

ответ

1

Regexps абсолютно ошибочны для работы. Вы не можете сопоставить произвольно вложенную сбалансированную форму с регулярным выражением, поэтому забудьте эту идею.

Перемещение по втор-выражения с Elisp так просто, как (forward-sexp)

Я на самом деле не понимаю, что это вы пытаетесь достичь, хотя. Не могли бы вы уточнить вопрос более подробно?

редактировать: Видя, как вы приняли этот ответ, я просто указать вам на них для дальнейшего чтения:

  • Chяг(elisp) Parsing ExpressionsRET
  • Chig(elisp) List MotionRET
+0

Спасибо! Я искал существующую поддержку, такую ​​как forward-sexp. Моя цель состоит в том, чтобы преобразовать файл исходного кода Lisp в emacs org-babel, поддерживаемый литературным программным файлом программирования, где я хотел бы, чтобы каждая функция или верхний sexp были блоком кода org. –