说,我想稍微改变一些语言的行为。
这可以做到吗?以前做过吗?
UPD:Typescript 使用属性名称的可能性非常有限(例如,您不能在 typescript 的帮助下创建一个派生自另一个属性名称的属性名称,例如大写或前缀前缀),而 Javascript(这是 Typescript 编译的to) 非常灵活。所以我想在 LSP 的帮助下修改一些带有自动补全选项的 Typescript 的 LSP 消息。
说,我想稍微改变一些语言的行为。
这可以做到吗?以前做过吗?
UPD:Typescript 使用属性名称的可能性非常有限(例如,您不能在 typescript 的帮助下创建一个派生自另一个属性名称的属性名称,例如大写或前缀前缀),而 Javascript(这是 Typescript 编译的to) 非常灵活。所以我想在 LSP 的帮助下修改一些带有自动补全选项的 Typescript 的 LSP 消息。
是的,但如何做到这一点取决于操作系统。从编译器的角度来看,代理将显示为您的 IDE。LSP是一种网络协议
我想稍微改变一些语言的行为。
所以你想改变某种语言的语义(你不知道是哪一种)。那么 LSP 并不是这样做的最佳场所。
例如,在一些简单的情况下,使用GCC编写 GCC插件更合适。
在大多数情况下,改变“行为”实际上就是改变语言本身。然后,您可能需要自己实现该语言。有时,您可能会修补原始语言的现有免费软件实现。在其他情况下,您需要自己实现语言。然后阅读Dragon Book并考虑在您的语言实现中编译或转译为您的语言。请务必先在纸上注明。
不要将编程语言(这是一种规范,通常用英语编写 - 可能在某些特定符号中进行一些形式化,例如C11 的n1570 ,Scheme 的R5RS)与其实现(这是一个软件)混淆。阅读 Scott 的Programming Language Pragmatics。
不要将 IDE 与语言实现混淆。例如,我所知道的所有 C 或 C++ 编译器都没有任何 IDE,并且都是命令行程序(例如GCC、Clang等...),其中大多数甚至不知道 LSP。IDE 可能会启动C++ 编译器,但它不是编译器。您可以使用普通的源代码编辑器(甚至是简单的与语言无关的编辑器,例如 Windows 上的记事本或 Linux 上的 Leafpad 或 nano)进行编码(使用 C、C++、Java、C#、Ocaml等)。
大多数编程语言将源程序定义为一组“翻译单元”,实际上是“源文件”,每个都是具有一些复杂语法和语义的字符序列。这些源文件的创建方式超出了编程语言规范的范围(您可以使用编辑器,也可以为这些源文件编写自己的生成器,......)
LSP 是“IDE”和语言实现之间的协议提案。
请注意,自动完成(在您的评论中提到)不是编程语言的功能(并且不是 C 或 C++ 语义的一部分)。它可能是某些 IDE(不是全部)的一个特性。它可以以一种语言中立的方式完成(例如在Emacs中)。