首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有非lisp语法的CL/Scheme DSEL

具有非lisp语法的CL/Scheme DSEL
EN

Stack Overflow用户
提问于 2014-09-05 09:51:32
回答 4查看 354关注 0票数 3

我最近一直对DSL感到好奇,特别是如何在Lisp中实现它们,因为与其他选项相比,它看起来是小菜一碟。

寻找信息,我找不到任何证据,在李斯特在互联网上的非Lisp DSEL。

所以我的问题是:

  • 是否可以在lisp中使用宏实现非lisp语法的DSL?
  • 这是如何实现的?
  • lisp的读取器能被转换成lisp结构的自定义读取器取代吗?
代码语言:javascript
复制
- If the former is true: is this a common way to implement "non-lispy" DSELs?

EN

回答 4

Stack Overflow用户

发布于 2014-09-05 17:55:55

简短的版本:球拍做到了这一点。

更详细的:球拍,一个计划的后裔,有一个非常深思熟虑的故事在这里。一个Racket模块/文件可以以语言声明开始。

#lang algol60

..。然后文件的其余部分可以用给定的语言编写。(是的,algol60是内置于.)

为了开发您自己的语言,您需要编写一个作为语言规范的包,说明如何将该语言的语法扩展到底层语言的语法中(在本例中是Racket)。任何人都可以编写这样的包,然后分发它们以允许其他人用这种语言编写程序。有此类语言规范的例子,例如前面提到的algol 60的例子。

我想这正是你想要的?

ObDisclaimer:是的,我是个球拍开发商。

票数 8
EN

Stack Overflow用户

发布于 2014-09-05 11:26:55

如何实现编程语言的表面语言?您可以编写解析器或使用解析器生成器。你也可以在Lisp里这样做。

有许多用Lisp编写的通用语言和特定领域语言的示例--不使用s表达式语法。

历史上,第一个毫升 (定理证明器的扩展语言)是用Lisp编写的。麦西玛 (一种计算机代数语言)是用Lisp编写的。在许多情况下,存在某种“最终用户”,为此需要编写/支持非表达式语言。有时,有些语言是存在的,需要得到支持。

使用宏和读取宏,您可以实现某些语言或扩展Lisp语言。例如,使用read宏向Lisp添加JSON语法很容易。也是某种infix语法。XML (示例:XMLisp)。

票数 7
EN

Stack Overflow用户

发布于 2014-09-05 12:12:07

在Lisp中支持非Lisp语法DSL没有问题。正如Rainer所提到的,您需要使用一些解析器/解析器生成器库。一个很好的例子是绞杀,它用于解析标记(参见3bmd),也用于pgloader命令语言,这只是您询问的外部DSL的一个例子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25683111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档