Haskell 风格注释的 ELisp 语法表注释

问题描述 投票:0回答:2

我正在尝试使用 ELisp Syntax-Table-Comments 设置 Haskell 风格的注释,但我不太明白。

在 Haskell 中,有两种基本类型的注释

--
表示以
\n

结尾的单行注释

{-
表示以
-}
结尾的多行注释,需要注意的是,这些是可以嵌套的

多行注释可以这样完成:

(defvar my-syntax-table
  (let ((st (make-syntax-table)))
    (modify-syntax-entry ?{ ". 1n" st)
    (modify-syntax-entry ?- ". 23n" st)
    (modify-syntax-entry ?} ". 4n" st)
   st))

单行注释可以这样完成:

(defvar my-syntax-table
  (let ((st (make-syntax-table)))
    (modify-syntax-entry ?- ". 12" st)
    (modify-syntax-entry ?\n ">" st)
   st))

根据文档,我可以使用

b
设置替代方案。但是,
b
适用于序列的第二个字符,在两种情况下都是
-
。因此,当我尝试使用替代方案组合这些时,不可能进行多行和单行注释。

我已经看到了这件事,所以我知道这是可能的。但是,我不知道该怎么做。如有任何帮助,我们将不胜感激。

haskell emacs elisp font-lock haskell-mode
2个回答
2
投票

Haskell 模式使用

       (modify-syntax-entry ?\{  "(}1nb" table)
       (modify-syntax-entry ?\}  "){4nb" table)
       (modify-syntax-entry ?-  "_ 123" table)))
       (modify-syntax-entry ?\n ">" table)

0
投票

我自己在实现带有 Haskell 风格注释的模式时遇到了这个问题,这似乎是解决方案:

(modify-syntax-entry ?- ".123" table)
(modify-syntax-entry ?\{ "(}1nc" table)
(modify-syntax-entry ?\} "){4nc" table)
(modify-syntax-entry ?\n ">" table)

haskell-mode
中的定义不太正确;他们使用标志 1 和 4 设置“b”注释样式,但“b”仅适用于 2 和 3。使用较新的(尽管绝不是新的)“c”样式,您可以创建一种注释类型:任何角色都可以区分,而不仅仅是内在的角色。

通过将

-
标记为标点符号而不是评论起始符,您可以避免用单个破折号开始评论。

有关注释语法标志如何工作的更多详细信息,请参阅文档

© www.soinside.com 2019 - 2024. All rights reserved.