在較早版本的Coq(< 8.5)中,主要進程將使用字符串與IDE交換數據。訪問Coq豐富的類似於XML的AST輸出
這應該是最近發生了變化 - 如何查詢代表AST的更豐富的類似於XML的結構?
使用案例:我想以不同的方式解釋任何Coq計算 - 也就是說,我需要在執行操作(例如調用策略)後以不需要解析的字符串的形式得到它的結果。
在較早版本的Coq(< 8.5)中,主要進程將使用字符串與IDE交換數據。訪問Coq豐富的類似於XML的AST輸出
這應該是最近發生了變化 - 如何查詢代表AST的更豐富的類似於XML的結構?
使用案例:我想以不同的方式解釋任何Coq計算 - 也就是說,我需要在執行操作(例如調用策略)後以不需要解析的字符串的形式得到它的結果。
使用XML協議,您可以使用Annotate stm
call,其中stm
是您要打印的句子。但是請注意,XML打印機在8.5/8.6版本中功能遠遠不足,可能會被刪除。 你可以看到所有的遺失案例here。另外請注意,它不輸出任何級別的術語的結構化表示。
或者,您可以使用SerAPI,專門用於該特定用途的插件。使用SerAPI,您可以獲得任何Coq結構的完整表示:
$ rlwrap ./sertop.native --printer=human --prelude=/home/egallego/external/coq-v8.6/
(Control (StmAdd() "Lemma u n : n + 0 = n."))
> (Answer 0 (StmAdded 2 (...) NewTip))
(Query() (Ast 2))
> (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是實驗軟件。
這是什麼'Annotate'事物的一部分? – ScarletAmaranth
這是一個XML協議調用,有關更多詳細信息,請參閱https://github.com/siegebell/vscoq/wiki/XML-protocol。不過要注意的是,它遠沒有完成,它可能會被刪除。 – ejgallego
哦,哇,我一直是一個googlin'現在很多天,但我沒有偶然發現你提到的鏈接。謝謝。 – ScarletAmaranth
你可以更具體地說明你的用例是什麼嗎?你可以使用XML協議(但不會給你AST串行數據)或coq-serapi。順便說一下,我認爲老版本的Coq對這個xml插件的支持非常有限,但我現在還不確定... – ejgallego
請注意,您的問題非常具體:_querying代表ASTs的更豐富的類似於XML的結構_如果您想要什麼要構建一個Coq IDE,那麼答案會有點不同。 – ejgallego