问题标签 [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 - 在 Python 中解析 S 表达式
是否有任何 Python 模块可用于解析和操作 Python 中的符号表达式,类似于如何评估 Lisp 表达式?
expression-trees - 如何以前缀表示法评估表达式
我正在尝试评估一个以前缀表示法表示表达式的列表。以下是此类列表的示例:
评估列表价值的最佳方法是什么
python - 可以优化此图像处理代码以使用更少的内存吗?
我有一个 python 函数,它接受一个字符串 s 表达式,如“(add (sub 10 5) 5)”,其中“add”和“sub”实际上是图像处理函数,并评估和创建字符串中表示的图像。图像处理函数采用常量、变量或其他图像(表示为向量列表),并返回以相同方式表示的图像。PIL 用于将表示为矢量列表的图像转换为图像文件。
为了评估前缀符号 s-expressions,我将 s-expr 转换为一个列表,反转它,并迭代标记,直到找到一个函数,此时执行图像处理函数并且生成的图像替换函数及其列表中的参数。这样做直到列表中只剩下一个元素,即最终图像。
图像处理函数很简单——对图像中的每个 (r,g,b) 值执行一些数学运算。
问题是,如果我想为更复杂的表达制作尺寸合适的图像,我的计算机就会停止运行。这可以优化以使用更少的内存吗?
html - XML、S-Expressions 和重叠范围……它叫什么?
我正在阅读XML is not S-Expressions。XML 范围有点严格,S 表达式也是如此。在我见过的每一种编程语言中,你都不能拥有以下内容:
<b>BOLD <i>BOTH </b>ITALIC</i>
==加粗 斜体 _
它甚至不能用 S-Expressions 表达:
(bold "BOLD" (italic "BOTH" ) "ITALIC" )
== :(
是否有任何编程语言支持这种“重叠”范围?它有什么实际用途吗?
lisp - 如何操作解析树?
我一直在玩自然语言解析树并以各种方式操纵它们。我一直在使用斯坦福大学的 Tregex 和 Turgeon 工具,但代码很乱,不适合我主要使用 Python 的环境(这些工具是 Java,不适合调整)。我想要一个工具集,当我需要更多功能时可以轻松破解。是否有任何其他工具非常适合在树上进行模式匹配然后操作那些匹配的分支?
例如,我想将以下树作为输入:
和(这是一个简化的例子):
- 查找具有标签 NP 的任何节点,该节点具有标签为 NP 的第一个子节点和一些名为“Bank”的后代,以及标签为 PP 的第二个子节点。
- 如果匹配,则取出 PP 节点的所有子节点并将它们移动到匹配的 NP 子节点的末尾。
例如,取树的这一部分:
并将其变成这样:
由于我的输入树是 S 表达式,因此我考虑过使用 Lisp(嵌入到我的 Python 程序中),但它已经很长时间了,以至于我在 Lisp 中编写了任何重要的东西,以至于我什至不知道从哪里开始。
什么是描述模式的好方法?什么是描述操作的好方法?考虑这个问题的好方法是什么?
javascript - 有哪些工具可以解析 Javascript 并读取 Javascript 或 Ruby 中的结果?
我想对 Javascript 进行一些代码分析。我更喜欢在AST或S-Expression上进行操作。V8引擎当然有可能构建它,尽管我似乎找不到任何关于如何从 Javascript 上下文访问此信息的文档。
我非常乐意在 Ruby 中进行分析,尽管我能想到的唯一方法是在Treetop或类似的解析器生成器中编写整个语法。
xml - 有什么东西适用于 s-expressions XPATH 是适用于 XML 的吗?
如果可能的话,我正在寻找一个 common-lisp impl。(另外,我不想将 sexp 转换为 XML 并在结果上使用 xpath。)
php - 用 PHP 解析 s 表达式
好吧,我需要解析 2 个文本文件。1个名为Item.txt和一个名为Message.txt,它们是游戏服务器的配置文件,Item包含游戏中每个项目的一行,Message有项目名称、描述、服务器消息等。我知道这远远少于理想,但我无法改变它的工作方式或格式。
这个想法在 Item.txt 我有这种格式的行
(item (name 597) (Index 397) (Image "item030") (desc 162) (class general etc) (code 4 9 0 0) (country 0 1 2) (plural 1) (buy 0) (sell 4) )
如果我有$item
等于 397(索引)的 php 变量,我需要首先获取“名称”(597)。
然后我需要打开 Message.txt 找到这一行
( itemname 597 "Blue Box")
然后将“Blue Box”作为变量返回给 PHP。
我想要做的是返回项目的名称和项目的索引。
我知道这可能是非常基本的东西,但是我已经搜索了几十个文件操作教程,但似乎仍然找不到我需要的东西。
谢谢
haskell - s-expr 打印功能中的错误
为了练习我的 Haskell 技能,我正在学习Write Yourself a Scheme教程。我已经为 s 表达式实现了一个解析器,但是我在打印功能上遇到了问题。
当我运行以下程序时
它正确解析了 s 表达式,但是当我定义自己的shows
而不是deriving
它时,我得到嵌套列表和向量内列表的错误输出:
但是,其他情况和嵌套向量工作正常:
我已将 of 的表示更改LispVal
为包含Nil
和Pair
构造函数,而不是List
and DottedList
,因为它们与 Scheme 数据模型更匹配。打印列表由
我怀疑错误在 中showsPair
,但我就是想不通。
algorithm - 使用集合和二叉搜索树解析和构建 S-Expressions
这是伪作业(这是额外的功劳)。我有一个 BST,它是指向包含这些单词的行(存储在其他地方)的单词索引。我需要实现一种使用 s 表达式进行搜索的方法,以便可以组合和 (&) 和或 (|)。
在命令提示符下,用户可以键入如下内容:
QUERY ((((fire)&(forest))|((ocean)&(boat)))&(water))
本质上,这应该返回包含火、森林和水的所有行以及包含海洋、船和水的所有行。
我真正需要帮助的是解析节点并将其插入树中以正确表示表达式而不是实际代码的逻辑。我发现的唯一对我有意义的事情是为表达式中的每个单词返回一组行。然后根据它是“或”还是“与”操作,我将对这些集合执行联合或交集类型操作以创建一个新集合并将其传递到树上。
我对如何解析包含表达式的行有点迷茫。经过一番思考,似乎其中一个子表达式“越远”在我的 s 表达式树中应该越高?我想如果我能在正确的方向上推动解析和插入树中的表达式,我应该没问题。
我为上面的查询提出的示例树看起来像;
这是有道理的,因为 fire 将返回一组全部包含 fire 的行,而 forest 将返回一组全部包含 forest 的行。然后在“&”级别,我将采用这两个集合并创建另一个集合,其中仅包含两个集合中的线条,从而给我一个集合,其中只有包含火和森林的线条。
我的另一个绊脚石是在我克服了解析的障碍之后如何表示树中的所有内容。我有一个 ExpTreeNode 类,它将作为我的 ExpTree(BST)的节点,然后我有 2 个子类,运算符和操作数,但我不确定这是否是一个好方法。