获取Coq';类似于AST输出的丰富XML

获取Coq';类似于AST输出的丰富XML,coq,Coq,在旧版本的Coq(

在旧版本的Coq(<8.5)中,主coqtop进程将使用字符串与IDE交换数据

这应该是最近发生的变化——如何查询表示AST的更丰富的类似XML的结构


用例:我想以不同的方式解释Coq计算的任何内容——也就是说,我需要在执行操作(如调用策略)后以一种不是我需要解析的字符串的形式得到它的结果。

注意:这个答案已经过编辑,以使其最新。

截至2018年底,唯一合理的选择是,一个支持Coq文档完全序列化的Coq语言服务器。使用SerAPI,您可以获得任何Coq文件或内部结构的完整表示:

$ rlwrap sertop --printer=human
(Add () "Lemma u n : n + 0 = n.")
> (Answer 0 (StmAdded 2 (...) NewTip))
(Query ((sid 2)) Ast)
> (Answer 1(ObjList
>  ((CoqAst
>    (VernacStartTheoremProof Lemma
>     ((((((Id u)) ()))
>       (((LocalRawAssum
>          (((Name (Id n))))
>          (Default Explicit)
>          (CHole () IntroAnonymous ())))
>        (CNotation
>         "_ = _"
>         (((CNotation
>            "_ + _"
>            (((CRef
>               (Ident
>                 (Id n)))
>               ())
>              (CPrim
>               (Numeral (Ser_Bigint 0))))
>             () ()))
>           (CRef
>            (Ident
>              (Id n)))
>            ()))
>          () ()))
>        ())))
>     false)))))

请注意,SerAPI是实验软件,我是主要作者。

您能更具体地说明您的用例是什么吗?您可以使用XML协议(但这不会提供AST序列化数据)或coq serapi。顺便说一句,我认为旧版本的Coq对这个xml插件的支持非常有限,但我现在不确定……请注意,如果您想要构建一个Coq IDE,那么您的问题非常具体,关于查询更丰富的表示AST的类xml结构,那么答案就有点不同了。这是什么东西的一部分?这是一个XML协议调用,请参阅以获取更多详细信息。但是请注意,它还远未完成,很可能会被删除。哦,哇,我已经做了很多天了,但我没有偶然发现你提到的链接。谢谢。您仍然没有解释您的用例是什么,因此可能很难给出更准确的答案。因此,您有两个选择:使用XML协议,它有已知的缺陷,但更稳定;或者使用SerAPI,这将在许多方面使您的生活更轻松,但很快将改变,使您作为IDE开发人员的生活更轻松,所以你必须适应。因此,这是您的电话,但是SerAPI协议的规范应该很快就会上线。