问题标签 [s-expression]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2288 浏览

python - pyparsing 的嵌套字典输出

我正在使用pyparsing解析表单的表达式:

我的测试代码如下所示:

我有以下形式的输出:

列表输出看起来不错。但是对于后续处理,我希望以嵌套字典的形式输出:

我试过Dict上课,但没有成功。

是否可以在pyparsing中做到这一点?或者我应该手动格式化列表输出?

0 投票
0 回答
34 浏览

c++ - 如何从解析它的原始字符串中找到链接的 s 表达式的位置?

我一直在阅读sexp.h 文件参考,试图在解析类似 lisp 的序列失败时生成有用的错误,因为运算符或操作数未按预期格式化。

我目前正在使用该cparse_sexp函数将 lisp 样式的表达式解析为一系列 s-expressionselt对象:

wherepc是一个类型的指针pcont_t*并且expression是一个std::string. 然后我使用这个pc指针来查看elt使用pc->last_sexp.

但是,如果我遇到一个我不知道如何处理的值,我希望能够编写如下内容:

(Operator Operand1 Operand2)行取自原始expression字符串的位置。

为此,我需要知道获取相应令牌的位置。我知道我可以看到类型中的sbufferpcont_t,但这只是给了我一个指向原始字符串的指针。lastPos应该给我当前位置,但它只返回字符串的结尾。我如何在使用它时解析字符串,以便我可以看到我在哪里?

0 投票
1 回答
441 浏览

parsing - (Prolog) 将 Lisp s 表达式解析为 Prolog 术语

我在 Prolog 中编写了一个解析器,它接受一个标记化列表,并且应该返回一个表达式,其中变量与评估方程的值统一:

目前,我的解析器正在返回以下内容:

有谁知道我如何修复这个解析器?我已包含以下代码:

编辑:下面是我的解析器工作版本:

0 投票
2 回答
634 浏览

haskell - 解析 S 表达式

鉴于以下定义构成了Yorgey 教授课程中的S 表达式

data Atom = N Integer | I Ident deriving Show

data SExpr = A Atom | Comb [SExpr] 衍生节目

以下的完整数据类型应该是什么(在 Haskell 中)?

(酒吧(富)3 5 874)

0 投票
1 回答
6671 浏览

vb.net - 如何在VB中反转列表?

我在我的计算机编程(视觉基础)课程中使用 LISP 表达式,我有一个小问题。

我将如何在 vb.net 中反转列表?

例如,如果我要输入:

我将返回以下输出:

0 投票
2 回答
171 浏览

java - 在java中拆分Lisp表达式

好的,所以任务是我采用 Lisp 表达式:

并把它变成

在爪哇。为此,我有以下代码:

这样它就可以用空格、(, ) 和 ' 来分割它。我应该得到的输出是

但由于某种原因,我得到的输出是

为什么会这样?另外,有没有人建议更好的方法来做到这一点?

0 投票
1 回答
105 浏览

lisp - 符号表达式流 I/O

在 Common Lisp 中,如何从流中读取和写入符号表达式?例如,我可能想将一个匿名函数写入文件,然后读取并调用它:

但是,该代码会导致可疑的输出

当我尝试将其读回时,这确实会导致错误:

0 投票
1 回答
847 浏览

sql - How can I process the LISP style tree generated by Antlr 4?

I parsed an SQL query using an Antlr 4 grammar. The result of tree.toStringTree() is this: ([] ([845] SELECT ([878 845] ([1473 878 845] ([1129 1473 878 845] ([1700 1129 1473 878 845] col1))) as ([1477 878 845] a)) FROM ([887 845] ([1487 887 845] ([1694 1487 887 845] table1)))))

Antlr documentation tells me this is a LISP style tree. How can I further process a LISP tree?

0 投票
1 回答
712 浏览

recursion - 读取深度嵌套的树会导致堆栈溢出

我正在尝试将大量 sexp 从文件读取到内存中,对于较小的输入,它似乎工作得很好,但在更深的嵌套输入上,sbcl 会因堆栈耗尽而崩溃。似乎有一个硬递归限制(深度为 1000 个函数), sbcl 根本无法超过(奇怪的是,即使它的堆栈大小增加了)。示例(代码在此处):make check-c有效,但make check-cpp耗尽了堆栈,如下所示:

那我为什么要使用递归呢?实际上,我不是,但不幸的是内置(read)函数使用递归,这就是发生堆栈溢出的地方。另一种选择(我已经开始研究)是编写一个迭代版本,read它依赖于我从一个单独的程序中输入的更有限的语法,以避免重新实现读取的复杂性(我的(目前损坏)尝试在lisp上述存储库的分支中)。

但是,我更喜欢更规范的解决方案。是否有read可以通过避免递归来解析深层嵌套结构的内置替代方案?

编辑:这似乎是 sbcl 本身的一个不可克服的问题,而不是输入数据。举个简单的例子,尝试运行:

然后在 sbcl 中:

发生同样的故障。

编辑:在 上询问#sbcl,显然控制堆栈大小确实仅适用于新线程,并且主线程的堆栈大小也受到许多其他因素的影响。所以我尝试将读取放在单独的线程中。仍然没有工作。如果您有兴趣,请查看此 repo并运行。make check

0 投票
3 回答
2089 浏览

vim - Clojure 中的 Slurpage 和 barfage

我正在使用vim-sexpvim-sexp-mappings-for-regular-people插件来编辑 Clojure 文件。我不太明白slurpbarf命令究竟做了什么。

我试着和他们一起玩,似乎他们在相邻表单的开头/结尾插入/删除表单。那是对的吗?如果不是,那么slurpbarf的正确定义是什么?