问题标签 [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.
functional-programming - 列表作为通用数据类型表示的缺点是什么?
Lisp 程序员倾向于使用列表来表示所有其他数据类型。
但是,我听说列表不是数据类型的良好通用表示。
与使用记录相比,以这种方式使用列表的缺点是什么?
c++ - 在 OOP 中解析 S 表达式的正确方法
我正在寻找一种实现 S 表达式阅读器的方法(稍后将与 Scheme 解释器和编译器一起使用),但我一直在问自己(如果有的话)我应该如何(如果有的话)为它编写一个 AST。
我一直在阅读 SICP,这在 Scheme 中非常简单,但我希望以 OO 方式在 C++ 中实现解释器和编译器。
请记住,我这样做只是为了学习目的,所以我并不是在寻找最简单或最快的方法,而是寻找正确且可重用的方法。
我在一些 Scheme 实现中看到人们解析 s 表达式并轻松输出 cons 单元格,如下所示:
每种 Scheme 都有一个 Sexpr 子类Atom
,或者类似的东西。
我不确定,但这对我来说似乎是一种黑客行为......这项工作不应该由口译员而不是读者来完成吗?
我想知道的是,这是否被认为是阅读 S 表达式的最佳(或正确)方式,或者这更像是解释器而不是解析器的工作?解析器是否应该拥有自己的 AST 而不是依赖于 cons 单元?
xml - 在 LISP 中使用任意分隔符解析 S 表达式
(我对 Lisp 很陌生,不知道如何做到这一点,但足够熟悉,知道必须有一个简单的方法。)
我最近读到的一篇文章引起了我的兴趣,该文章提倡将日志文件存储为 Lisp 样式的 S 表达式,以便将日志文件轻松转换为 DSL。这让我想到了其他 DSL 的类似语法,但我遇到了障碍。
解析分隔符是括号的 s 表达式很容易
可以从文件/流中读取并进行简单评估。
如果 XML 真的只是一个 S 表达式,难道不应该有一种简单的方法来转换像
进入
我可以用字符串操作技术来伪造这种行为(哎呀,一个正则表达式可以解决这个问题,真的)。但这似乎是对 Lisp 的亵渎——这些只是 S 表达式!这同样适用于基于 Lisp 的 lex/yacc 版本——我可以看到需要更复杂的语法,但实际上,这只是以一种不太有效的方式伪装的 Lisp 语法。
理论上,这应该超越 XML,扩展到任何与 Lisp 语法同态的上下文无关语法。(我知道 Lisp 并没有完全由像 S 表达式这样简单的上下文无关文法定义,但显然后者是前者的严格子集,所以我的陈述仍然有效)。
所以,简而言之:有没有一种简单的方法来定义与 S 表达式同态的上下文无关语法的语法(例如 XML)并在 Lisp(或基于 Lisp 的 DSL)中解析该语法?
lisp - 什么是语法表达式?
我在“Lisp 之国”一书中读到,作者提到syntax expression
。这是否意味着能够将语法表达为一种数据形式?这和S-expression
(符号表达式)一样吗?
emacs - 在 S-Expression(词法范围)内搜索和替换变量名?
使用启用 Paredit 的 emacs。如何搜索 LISP (Clojure) S 表达式并重命名变量?我想在当前的 S 表达式中而不是在全局范围内这样做。
c++ - 使用 boost::proto 构建 s 表达式
我正在尝试使用boost::proto
以下终端构建 s-expression 对象:
并像这样使用它:
但是,这对我来说并不编译;
我做错了什么?任何建议如何使用 s 表达式获得类似或等效的东西boost::proto
?
list - Lisp:列表与 S 表达式
我是 Lisp 的新手。我遇到了 2 个术语“列表”和“S 表达式”。我只是无法区分它们。它们只是 Lisp 中的同义词吗?
emacs - Emacs中sexp和list的区别?
在 Emacs 中,有一些命令可以在括号(或任何括号)中分隔的表达式之间移动光标,即 forward-sexp、backward-sexp、forward-list 和 backward-list。在 Lisp 和任何其他代码中,它们的行为相似,所以我认为 *-sexp 和 *-list 之间没有区别,除了最后一个在注释或引号中不起作用。
sexp 和 list 命令之间的功能区别是什么,我应该什么时候使用?
以防万一,我了解 up-list 和 down-list 命令,它们与主题无关。
ruby - ruby_parser、AST 在 1.8.7 之前的版本和 ruby 中的 S-expression 的用法?
最近我正在将在 ruby 1.8.7 中使用 ParseTree 的 ror 项目转换为 ruby 1.9.3
发现 ParseTree 不能与 1.9.3 一起使用,在一堆 googlers 中搜索它,仍然坚持一些代码迁移
找到了各种替代方案,如 ruby_parser、sourcify、parse_tree_reloaded 等...
所有这些都有其局限性,例如 sourcify 无法进行动态分析解析,即。eval 的用法。
通过所有这些,我想知道 Ruby 社区中 AST/Parsing/SExp 的最佳用法,如果我不选择 AST 路径,ruby 1.9.3 中的替代方案是什么?
一些用例指针将不胜感激。
谢谢。
common-lisp - Common lisp:有没有一种不那么痛苦的输入数学表达式的方法?
我喜欢普通的 lisp,但有时输入简单的数学表达式真的很痛苦,比如
(当然我可以转换这个,但它有点慢,我先写(+()()),然后在每个括号中我放(*()())......)
我想知道这里是否有人知道输入此内容的更好方法。我在考虑写一个数学宏,在哪里
扩展到
但是对于名称很长的变量,解析是一个问题。
有人有更好的建议吗?