我正在使用Coq 8.6.1中的XML协议。当我尝试PrintAst调用时,我没有获得AST,但得到了一个" todo"代替。这是故障还是我做错了什么?我应该如何从打印AST调用中获取AST?
这是我的情况:
我使用coqtop -toploop coqidetop -main-channel stdfds
打开了一个ideslave进程,然后从coq-8.6.1/theories/FSets/FSetCompat.v
输入Coq代码。
在这里,我使用"<<<<<<<<"如果你想重复我的实验,请附上一些详细的程序。
<<<<<<<<<<<<<<<<<<<<<<<&LT ;<<<<<<<<<<<<<<<<<<<<
首先,我输入
<call val="Add"><pair><pair><string>(***********************************************************************)
(* v * The Coq Proof Assistant / The Coq Development Team *)
(* <O___,, * INRIA-Rocquencourt & LRI-CNRS-Orsay *)
(* \VV/ *************************************************************)
(* // * This file is distributed under the terms of the *)
(* * GNU Lesser General Public License Version 2.1 *)
(***********************************************************************)
(** * Compatibility functors between FSetInterface and MSetInterface. *)
Require Import FSetInterface FSetFacts MSetInterface MSetFacts.
</string><int>1</int></pair><pair><state_id val="1"/><bool val="true"/></pair></pair></call>
然后
<call val="Add"><pair><pair><string>Set Implicit Arguments.
</string><int>1</int></pair><pair><state_id val="2"/><bool val="true"/></pair></pair></call>
然后
<call val="Add"><pair><pair><string>Unset Strict Implicit.
</string><int>1</int></pair><pair><state_id val="3"/><bool val="true"/></pair></pair></call>
最后
<call val="Add"><pair><pair><string>
(** * From new Weak Sets to old ones *)
Module Backport_WSets
(E:DecidableType.DecidableType)
(M:MSetInterface.WSets with Definition E.t := E.t
with Definition E.eq := E.eq)
<: FSetInterface.WSfun E.
</string><int>1</int></pair><pair><state_id val="4"/><bool val="true"/></pair></pair></call>
&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT ;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;
此时,我打电话给<call val="PrintAst"><state_id val="5"/></call>
,我希望返回
Module Backport_WSets
(E:DecidableType.DecidableType)
(M:MSetInterface.WSets with Definition E.t := E.t
with Definition E.eq := E.eq)
<: FSetInterface.WSfun E.
令我失望的是,我得到了
<value val="good"><gallina begin="42" end="228"><todo begin="42" end="228">Module Backport_WSets (E: DecidableType.DecidableType)
(M: MSetInterface.WSets with Definition E.t := E.t with Definition
E.eq := E.eq)<: FSetInterface.WSfun E.</todo></gallina></value>
通过漂亮的打印是
<value val="good">
<gallina begin="42" end="228">
<todo begin="42" end="228">Module Backport_WSets (E: DecidableType.DecidableType)
(M: MSetInterface.WSets with Definition E.t := E.t with Definition
E.eq := E.eq)<: FSetInterface.WSfun E.</todo>
</gallina>
</value>
但这仅仅是代码的副本!它甚至没有应用词法分析器......为什么会发生这种情况?有人可以帮忙吗?非常感谢你!
答案 0 :(得分:2)
bar_plot <- function(.dt, .tit="U.S. Personal Income Distribution by Quartile",
.sub = NULL, .xl = "Income Quartiles", .yl = "Mean Income",
...){
ggplot(data =.dt) +
geom_col(mapping = aes(y = list(1st, 2nd, 3rd, 4th)), stat = identity) +
labs(title = .tit, subtitle = .sub)
}
gr1 <- bar_plot(.dt = t1, .sub = "pop subgroup name")
来电从未完成,并且已在较新的Coq版本中删除。
如果您需要Coq数据的结构化表示,我建议使用基于自动序列化的Coq SerAPI。 [免责声明:我是作者]
编辑:如何在SerAPI中执行此操作:
print_ast
从AST中删除位置信息后产生[非常详细]:
echo '
(Add () "From Coq Require Import FSetInterface FSetFacts MSetInterface MSetFacts.
(** * From new Weak Sets to old ones *)
Module Backport_WSets
(E:DecidableType.DecidableType)
(M:MSetInterface.WSets with Definition E.t := E.t
with Definition E.eq := E.eq)
<: FSetInterface.WSfun E.")
(Query () (Ast 3))
' | ./sertop.native --printer=human
更重要的是,Coq和SerAPI现在提供了一个通用的映射系统,从AST到输入缓冲区位置。