gpt4 book ai didi

c++ - 如何将简单的类似 Lisp 的代码拆分为 C++ 中的标记?

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:13 24 4
gpt4 key购买 nike

基本上,该语言有 3 种列表和 3 种定长类型,其中一种是字符串。使用正则表达式检测 token 的类型很简单,但将它们拆分为 token 并不是那么简单。

字符串用双引号表示,双引号用反斜杠转义。

编辑:

一些示例代码

{
print (sum (1 2 3 4))
if [( 2 + 3 ) < 6] : {print ("Smaller")}
}

像这样的列表

  • () 是仅在必要时才进行评估的参数列表。
  • [] 是特殊列表,以更漂亮的方式表达 2 个操作数操作方式。
  • {} 是始终被评估的列表。第一个元素是一个函数名称,第二个是参数列表,如此重复。
  • anything : anything [ : anything [: ...]] 转换为具有由 :s 连接的元素的参数列表。这只是为了使循环和条件看起来更好。

所有函数都接受一个参数。参数列表可用于需要更多的函数。您可以使用不同类型的 eval 函数对 fore 和参数列表进行评估。 (每个列表模型都会有 eval 函数)

所以,如果您了解这一点,它的工作方式与 Lisp 非常相似,只是具有不同的列表类型来美化代码。

编辑:@rici

[[2 + 3] < 6]也可以。正如我提到的,仅在必要时才评估参数列表。自 <是一个需要长度为 2 的参数列表的函数,(2 + 3)必须以某种方式评估,其他方式[(2 + 3) < 6]将转换为 < (2 + 3) : 6等于 < (2 + 3 6)这是 < 的无效参数列表.但我明白你的意思,在这种情况下自动解析应该如何工作并不是微不足道的。我上面描述的版本是 [...]使用类似 eval_as_oplist (...) 的函数计算参数列表但我想你是对的,因为这样,你就不能在 [...] 中以常规方式使用参数列表。即使您没有理由这样做,这也是有问题的,因为它不会导致更好的代码。所以[[. . .] . .]是更好的代码,我同意。

最佳答案

与其发明自己的“类似 Lisp,但更简单”的语言,不如考虑使用现有的 Lisp(或 Scheme)实现并将其嵌入到 C++ 应用程序中。

虽然设计你自己的语言然后为它编写你自己的解析器和解释器肯定很有趣,但你将很难想出比 Scheme 和它有很多实现。

赤壁计划:http://code.google.com/p/chibi-scheme/特别适合嵌入到 C/C++ 代码中,它非常小而且速度很快。

关于c++ - 如何将简单的类似 Lisp 的代码拆分为 C++ 中的标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13674849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com