【问题标题】:Create a DSL with Python使用 Python 创建 DSL
【发布时间】:2017-05-08 15:45:55
【问题描述】:

我想知道是否有人对如何为 Python 的 DSL 创建编辑器/gui 有想法。

所以我有一个语法(基于 textX 项目)和一个解释我的 DSL 语法的类。但是我想为我自己的 DSL 的语法创建一个具有自动完成和语法高亮的编辑器。

有可能吗?

我进入了 Qscintilla 的 PySide,但我有点迷茫,这似乎不合适。 此外,DSL 作为一个概念还很新,所以网上几乎有 0 个文档,这就是我在这里的原因(你永远不知道!)

编辑:^对不起,显然我正在触发每个人关于这句话的内容。我的错,我对 DSL 还很陌生,我想说,与 Java 相比,用 Python 开发 DSL 几乎没有什么(使用 Eclipse 建模......)

Cya!

【问题讨论】:

  • “DSL 作为一个概念是相当新的”——这根本不是真的。它有几十年的历史了。
  • 好吧,我不确定 DSL 的历史是我的问题的主题:⁾
  • @tricky 你在一个人们用来学习新事物的网站上发布了一些事实。如果不正确,指出这是一个很好的评论案例。
  • 是的,抱歉,但与您的回答相比,只说这个就走开是非常令人沮丧的:您回答我并纠正我的错误,所以感谢您@Viraptor
  • 可能是重复的:stackoverflow.com/q/1547782/4996248 请注意,Python 已经被解释过了。当您在 Python 中实现 DSL 时,您会在解释器中运行一个解释器,这将对性能产生明显影响。这无疑是在 Java 中更容易找到实现 DSL 的资源的主要原因之一——在许多方面,使用编译语言来实现 DSL 更有意义。

标签: python dsl


【解决方案1】:

编写一个可用的编辑器并非易事。如果您想要的不仅仅是琐碎的编辑功能,那基本上就是一个长达数月的项目。像 Scintilla 这样的可嵌入编辑器当然可以提供帮助,但要弄清楚他们的 API。

我会推荐一个不同的方向:既然你已经掌握了整个语法,那么将自动完成和语法高亮作为现有编辑器的插件生成。通常,该功能被很好地抽象出来。您可以为 vim、vscode 等应用程序或您想要的任何编辑器执行此操作。

如果您确实想使用嵌入式编辑器,请针对该部分提出具体问题。 Notepad++ 使用 Scintilla 为例,几乎可以使用所有的语言。它很可能适合您的用例。

总的来说:是的,这是可能的,因为一切皆有可能。如果您就在项目中包含 Qscintilla 的具体问题提出问题,您可能会得到更好的答案。

PS。 DSL 已经存在了几十年。如果你找不到任何相关的东西,那就更努力地寻找。例如,SQL 是一种 DSL。用 LISP 编写的所有内容几乎都是它自己的 DSL。

【讨论】:

  • 感谢您的洞察!
【解决方案2】:

我同意@viraptor:

编写一个可用的编辑器并非易事。如果您想要的不仅仅是琐碎的编辑功能,那基本上就是一个长达数月的项目。像 Scintilla 这样的可嵌入编辑器当然可以提供帮助,但要弄清楚他们的 API。

但是,最近在以下网站上描述了 QScintilla (Scintilla on PyQt5) 的 API:

https://qscintilla.com/

该网站上的文档对初学者很友好。在你自己的 PyQt GUI 中制作一个基本的编辑器不再是几个月的工作:-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多