问题标签 [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.
python - pyparsing 的嵌套字典输出
我正在使用pyparsing解析表单的表达式:
我的测试代码如下所示:
我有以下形式的输出:
列表输出看起来不错。但是对于后续处理,我希望以嵌套字典的形式输出:
我试过Dict
上课,但没有成功。
是否可以在pyparsing中做到这一点?或者我应该手动格式化列表输出?
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
字符串的位置。
为此,我需要知道获取相应令牌的位置。我知道我可以看到类型中的sbuffer
值pcont_t
,但这只是给了我一个指向原始字符串的指针。lastPos
应该给我当前位置,但它只返回字符串的结尾。我如何在使用它时解析字符串,以便我可以看到我在哪里?
parsing - (Prolog) 将 Lisp s 表达式解析为 Prolog 术语
我在 Prolog 中编写了一个解析器,它接受一个标记化列表,并且应该返回一个表达式,其中变量与评估方程的值统一:
目前,我的解析器正在返回以下内容:
有谁知道我如何修复这个解析器?我已包含以下代码:
编辑:下面是我的解析器工作版本:
haskell - 解析 S 表达式
鉴于以下定义构成了Yorgey 教授课程中的S 表达式:
data Atom = N Integer | I Ident deriving Show
和
data SExpr = A Atom | Comb [SExpr]
衍生节目
以下的完整数据类型应该是什么(在 Haskell 中)?
(酒吧(富)3 5 874)
vb.net - 如何在VB中反转列表?
我在我的计算机编程(视觉基础)课程中使用 LISP 表达式,我有一个小问题。
我将如何在 vb.net 中反转列表?
例如,如果我要输入:
我将返回以下输出:
java - 在java中拆分Lisp表达式
好的,所以任务是我采用 Lisp 表达式:
并把它变成
在爪哇。为此,我有以下代码:
这样它就可以用空格、(, ) 和 ' 来分割它。我应该得到的输出是
但由于某种原因,我得到的输出是
为什么会这样?另外,有没有人建议更好的方法来做到这一点?
lisp - 符号表达式流 I/O
在 Common Lisp 中,如何从流中读取和写入符号表达式?例如,我可能想将一个匿名函数写入文件,然后读取并调用它:
但是,该代码会导致可疑的输出
当我尝试将其读回时,这确实会导致错误:
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?
recursion - 读取深度嵌套的树会导致堆栈溢出
我正在尝试将大量 sexp 从文件读取到内存中,对于较小的输入,它似乎工作得很好,但在更深的嵌套输入上,sbcl 会因堆栈耗尽而崩溃。似乎有一个硬递归限制(深度为 1000 个函数), sbcl 根本无法超过(奇怪的是,即使它的堆栈大小增加了)。示例(代码在此处):make check-c
有效,但make check-cpp
耗尽了堆栈,如下所示:
那我为什么要使用递归呢?实际上,我不是,但不幸的是内置(read)
函数使用递归,这就是发生堆栈溢出的地方。另一种选择(我已经开始研究)是编写一个迭代版本,read
它依赖于我从一个单独的程序中输入的更有限的语法,以避免重新实现读取的复杂性(我的(目前损坏)尝试在lisp
上述存储库的分支中)。
但是,我更喜欢更规范的解决方案。是否有read
可以通过避免递归来解析深层嵌套结构的内置替代方案?
编辑:这似乎是 sbcl 本身的一个不可克服的问题,而不是输入数据。举个简单的例子,尝试运行:
然后在 sbcl 中:
发生同样的故障。
编辑:在 上询问#sbcl
,显然控制堆栈大小确实仅适用于新线程,并且主线程的堆栈大小也受到许多其他因素的影响。所以我尝试将读取放在单独的线程中。仍然没有工作。如果您有兴趣,请查看此 repo并运行。make check
vim - Clojure 中的 Slurpage 和 barfage
我正在使用vim-sexp和vim-sexp-mappings-for-regular-people插件来编辑 Clojure 文件。我不太明白slurp和barf命令究竟做了什么。
我试着和他们一起玩,似乎他们在相邻表单的开头/结尾插入/删除表单。那是对的吗?如果不是,那么slurp和barf的正确定义是什么?