【问题标题】:Segment Lisp source code by top level S-expression by emacs Lisp?通过 emacs Lisp 的顶级 S 表达式分段 Lisp 源代码?
【发布时间】:2015-09-10 06:56:08
【问题描述】:

我想将 Lisp 源代码分段为代码段列表。每个段要么是顶级 S 表达式,要么是这些 S 表达式之间的任何文本。

最初我认为我可以使用正则表达式模式来匹配顶级 S 表达式,但我发现仅在顶级处理匹配括号并不是那么简单。

(我觉得可以通过以下示例计算出一个正则表达式来匹配顶级 S-exp) Using regular expressions to extract functions and function headers from source code

接下来,我想我可以扫描文本以观察第一个左括号“(”和最后一个右括号“)”,并相应地进行分割。

在我这样做之前,我觉得鉴于 S 表达式在 emacs Lisp 中无处不在,应该已经有现有的解决方案来满足我的要求。

所以我问你是否可以教我任何解决方案?

谢谢,

【问题讨论】:

    标签: regex emacs lisp


    【解决方案1】:

    正则表达式绝对不适合这项工作。您无法将任意嵌套的平衡形式与正则表达式匹配,所以忘记这个想法。

    使用 elisp 移动 s 表达式就像 (forward-sexp) 一样简单

    不过,我实际上并不明白你想要达到什么目的。能否请您更详细地更新问题?

    编辑:既然你已经接受了这个答案,我只会指出这些以供进一步阅读:

    • C-hig (elisp) Parsing Expressions RET
    • C-hig (elisp) List Motion RET

    【讨论】:

    • 谢谢!我正在寻找现有的支持,如 forward-sexp。我的目标是将 Lisp 源代码文件转换为 emacs org-babel 支持的 literate 编程 org 文件,我希望每个函数或 top sexp 成为一个 org 代码块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2012-07-13
    相关资源
    最近更新 更多