如何使用Doxygen与Prolog

时间:2015-06-27 20:18:01

标签: c prolog doxygen

我一直在努力让doxygenprolog合作。

起初我只是试图包含一个"外部和未知的"文件,但正如doxygen用户所知,如果它找不到有用的(记录的)功能,它就不会打印出来。

搜索两个标签的stackoverflow没有给出单一的答案,所以我决定问,即使我已经解决了这个难题,所以在搜索的情况下人们会受到打击。

我会在这里提出这个问题,因为人们可以建议简单的解决方法,我们可能会对这个主题有更多的了解,但是我会在经过一些(艰苦的)努力后使用它来注册我自己的答案。感谢。

解释我开始的地方:

我的第一个(几乎)成功的方法在同时使用CPROLOG的程序中运行良好。

它几乎起作用,因为后者我看到这种方法在仅PROLOG项目中不起作用。

无论如何,我所做的只是添加这个

INPUT = README.md groups.dox c-and-pl.c c-and-pl.pl
FILE_PATTERNS = *.pl
EXTENSION_MAPPING += pl=c
EXTRACT_ALL = YES
EXTRACT_STATIC = YES
SOURCE_BROWSER = YES

PROLOG代码如下:

/**
 * @file cpl.pl
 * @ingroup GroupUnique
 * @brief CPL - C calls Prolog (Prolog module)
 * @cond SKIPPROLOG
 */

 /* brief explanation in a normal (non-doxygen) comment */
 clause(A) :- 
     rule(X),
     test(A, X).

 and(so, on).

 /** @endcond */

这可行,因为C无论如何都会创建网站,而PROLOG页面只是一个简短的条款,而是一个查看完整代码的链接,正常的注释解释了这些条款。

为什么这对纯PROLOG项目不起作用?怎么做?

1 个答案:

答案 0 :(得分:0)

我第二次尝试解决此问题涉及创建新文件,原始PROLOG来源的副本,但是使用doxygen格式的评论,并转换PROLOG条款C-like

调用来源source.pl和第二个副本source.dox。您可以像往常一样编写PROLOG程序,在第一次出现每个子句,原子,模块等之前使用doxygen

然后cp source.pl source.dox并修改source.dox转换所有子句,例如:

/**
 * \file source.pl
 * \ingroup GroupUnique
 */

/**
 * \ingroup GroupUnique
 * \brief Defining factorial module
 */
module(fatorial, [fatpl/2]);

这需要时间并且容易出错,但这是一种解决方法。问题是doxygen现在列出source.pl两次。但是可以记录这些功能。使用此配置:

INPUT = README.md groups.dox source.pl source.dox

你需要保留source.pl,因为它有真正的来源。而source.dox更像是C header file

不好。手动将source.pl转换为source.dox的工作使我编写了自己的编译器(技术上是filter,仅使用词法标记)。

该程序在github上是开源的:

https://github.com/drbeco/doxygenprolog

并在其他过滤器的官方页面中引用:doxygen helpers

这里有一点点说明,在官方的SWI-Prolog网站上: SWI-Prolog news

使用您需要的未知语言进行doxygen工作:

  • 在某个地方安装此过滤器PATH可以找到。
  • 编辑您的doxygen .cfg以获得:
      

    OPTIMIZE_OUTPUT_FOR_C =否

         

    INPUT = README.md groups.dox source.pl

         

    EXTRACT_ALL = YES

         

    EXTRACT_STATIC = YES

         

    FILE_PATTERNS = * .pl * .prolog * .swipl

         

    FILTER_PATTERNS = * .pl =“dox4pl”

  • 现在,您可以像平常一样使用其他语言运行doxygen