ide - 适用于 Windows 或 Linux 或 Mac 的 ML IDE 和编译器

标签 ide compiler-construction programming-languages sml ml

我必须用 ML 编写一些代码,这是我第一次使用该语言。
是否有标准 ML 的开发环境? (最好在 Windows 下)。我尝试使用谷歌搜索(和 stackOverFlowing !),但我发现的只是 Linux 的普通编译器(最多带有交互式控制台),但没有 IDE 或 Eclipse/NetBeans 插件。
有什么建议 ?

最佳答案

如何使用 Sublime Text 2 配置 SML

对于那些更喜欢 Sublime Text 而不是 Emacs 作为编程 SML 的首选编辑器的人,以下指南描述了如何配置 Sublime Text 以使用 SML。

要使本指南对您有用,您必须已经安装 smlnj .

第 1 步:安装 Sublime Text 和 Package Control

Downloading Sublime Text 2 开始.确保下载第 2 版,因为 SML 语法支持不适用于第 3 版。

Sublime Text 支持一组惊人的软件包(即插件),您可以单独安装它们。这些包之一称为包控制。您必须先Install Package Control能够直接从编辑器安装其他软件包。提供的链接解释了安装此软件包所需的操作。

第 2 步:安装 SML 和 Sublime REPL

现在您已经安装了包控制,安装其他包将变得非常容易。我们现在必须安装两个包:支持编程语言语法高亮功能的 SML 和 SublimeREPL,正如您可能猜到的,它是一个包,它为 Sublime Text 添加了许多不同编程语言的 REPL 功能。

要安装这些软件包,您必须转到菜单并查找工具 -> 命令面板并键入“安装软件包”。在搜索框中,输入要安装的软件包的名称,从找到的列表中选择您的软件包,然后按 Enter 以安装它。对上面提到的两个包执行此操作:“SML”和“SublimeREPL”

一旦您安装了 SML 包,如果您打开一个 SML 文件,您应该在编辑器中获得语法高亮功能。它甚至提供了一个名为 Son of Obsidian 的 Sublime Text 主题,您可以在 Preferences -> Color Scheme -> SML -> Son of Obsidian 中启用它。但是您不需要启用主题以使用 SML,这只是一个偏好。

安装 SublimeREPL 包后,您将能够转到菜单 Tools -> SublimeREPL -> SML 并打开 SML REPL session ,该 session 将支持使用 SML 包的语法突出显示、命令历史记录、行编辑和自动完成。如果您打开两个并排选项卡,您可以让您的生活变得非常轻松,在您的左侧选项卡中,您可以拥有 SML 代码文件,而在右侧,您可以拥有 SML REPL session 。您可以通过使用 View -> Layout 选项来做到这一点。

第 3 步:键盘快捷键

现在让我们添加一些键盘快捷键来使用 REPL。 SublimeREPL 包提供的键盘配置很少,而且所提供的配置可能无法与 SML REPL 配合使用。所以这就是我通常所做的。

  • 首先进入首选项 -> 浏览包
  • 进入 SublimeREPL/config/SML 子文件夹。
  • 编辑文件 Default.sublime-commands在 Sublime Text 本身。该文件包含 Tools -> SublimeREPL 菜单中的当前 SML 菜单选项。因此,我们现在将更改它以创建第二个选项,该选项可以在新的 SML REPL session 中运行现有文件。我编辑的文件如下所示。注意“id”字段。我们可以根据需要定义任意数量的不同命令,给它们一个不同的 ID。在下一步中,我们将定义每个命令的作用。
    [
        {
            "caption": "SublimeREPL: SML",
            "command": "run_existing_window_command", "args":
            {
                "id": "repl_sml",
                "file": "config/SML/Main.sublime-menu"
            }
        },
        {
            "caption": "SublimeREPL: SML - Run File",
            "command": "run_existing_window_command", "args":
            {
                "id": "repl_sml_run",
                "file": "config/SML/Main.sublime-menu"
            }
        }    
    ]
    
  • 现在,在与上一个文件相同的目录中,编辑 Main.sublime-menu文件。该文件包含上面定义的每个命令应该做什么的详细信息。我编辑的文件定义了上面描述的两个命令,一个是简单地打开 REPL,另一个是在 REPL 中打开当前文件。它看起来如下:
    [
         {
            "id": "tools",        
            "children":
            [{
                "caption": "SublimeREPL",
                "mnemonic": "r",
                "id": "SublimeREPL",
                "children":
                [{
                    "caption": "SML",
                    "id": "SML",
                    "children": [
                        {"command": "repl_open",
                         "caption": "SML",
                         "id": "repl_sml",
                         "args": {
                            "type": "subprocess",
                            "encoding": "utf8",
                            "cmd": ["sml"],
                            "cwd": "$file_path",
                            "external_id": "sml",
                            "syntax": "Packages/SML (Standard ML)/sml.tmLanguage"
                            }
                        },
                        {"command": "repl_open",
                         "caption": "SML - Run Current File",
                         "id": "repl_sml_run",
                         "args": {
                            "type": "subprocess",
                            "encoding": "utf8",
                            "cmd": ["sml", "$file_basename"],
                            "cwd": "$file_path",
                            "external_id": "sml",
                            "syntax": "Packages/SML (Standard ML)/sml.tmLanguage"
                            }
                        }
                    ]                                
                }]
            }]
        }
    ]
    
  • 最后一步是为这两个命令添加键盘快捷键。转到 Preferences -> Key Bindings User 并使用以下两个附加命令编辑文件。随意更改我的键并使用您认为合适的任何其他快捷键,前提是它们不用于其他功能。
    [
        {  
          "keys":["ctrl+alt+j","k"],   
          "command": "repl_open",      
          "args": {  
               "type": "subprocess",  
               "encoding": "utf8",  
               "cmd": ["sml"],  
               "cwd": "$file_path",  
               "syntax": "Packages/SML (Standard ML)/sml.tmLanguage",
               "external_id": "sml"
          }  
        } ,
        {  
          "keys":["ctrl+alt+j","m"],   
          "command": "repl_open",      
          "args": {  
               "type": "subprocess",  
               "encoding": "utf8",  
               "cmd": ["sml", "$file_basename"],  
               "cwd": "$file_path",  
               "syntax": "Packages/SML (Standard ML)/sml.tmLanguage",
               "external_id": "sml"
          }  
        }  
    ]
    

  • 我们已经完成了。现在,您只需按 CTRL+J,K(即按 Ctrl+Alt+J,然后松开键并按 K)即可打开 SML REPL。如果您当前正在处理 SML 文件,则可以按 CTRL+J,M 将其发送到新的 SML REPL session 。

    第 4 步:构建系统

    Sublime Text 提供的配置允许您解析代码文件并确定是否有问题,并让您确切知道问题出在哪里。为了做到这一点,我们必须配置一个“构建系统”。配置只是一个文件,告诉 sublime text 要运行什么命令以及如何解释输出。如果 sml 解析器无法解析或执行您的程序,则输出会告诉您问题出在哪里。构建系统让我们定义一个正则表达式来解析这样的输出并帮助 Sublime text 找到包含问题的行和列。

    转到 Preferences -> Browse Packages 并在 User 文件夹下创建一个名为 SML.sublime-build 的新文件。并定义文件如下:
    {  
      "cmd": ["/usr/local/bin/sml","$file"],  
      "selector": "source.sml",  
      "working_dir": "$file_path",
      "file_regex": "^(.*\\.sml):(\\d+)\\.(\\d+)(\\-(\\d+)\\.(\\d+))?\\s(.*)$"
     } 
    

    确保用系统中的有效路径替换命令路径。保存文件后,您可以转到菜单并选择工具 -> 构建系统 -> SML。然后,要检查您的文件,您可以执行 Tools -> Build 来解析您的文件并查找任何错误。通过使用菜单选项 Tools -> Build Result -> Next Result 和 Previous Result 您可以在构建系统选项检测到的错误之间导航,Sublime Text 会将光标定位在 SML 编译器报告的错误的确切位置.

    我上面的正则表达式可能不是最好的,所以请随时根据您的需要改进它。

    就是这样。您已经准备好开始使用 SML 和 Sublime Text 进行编码了。

    关于ide - 适用于 Windows 或 Linux 或 Mac 的 ML IDE 和编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2036744/

    相关文章:

    go - golang scheduler 如何以及为什么在 runtime/proc.go :execute? 中递归运行 goroutines

    python - 使用 python 远程编码和执行 : what IDE?

    c++ - 函数内部的静态变量如何工作?

    programming-languages - 并发计算的示例问题

    .net - 我正在尝试使用 System.Reflection.Emit 编写 .NET 编译器 我该如何进行类型解析?

    java - Scala反射: how do I define a case class at runtime and then reference to it?

    programming-languages - 建议用词来描述您简历中的语言能力水平

    php - 我可以在不使用本地主机服务器的情况下在本地解析 PHP 吗?

    c++ - 快速定位MSCV 2010中的错误信息

    intellij-idea - Intellij Idea 代码编辑器右侧的行