【问题标题】:Which language is useful to create a report for a valid C program [closed]哪种语言可用于为有效的 C 程序创建报告[关闭]
【发布时间】:2010-09-10 06:11:21
【问题描述】:

任何人都可以向我推荐一种有用的编程语言,该语言可用于创建一个工具,该工具将分析给定的 C 程序并生成包含给定程序信息(函数列表、变量列表等)的 txt 报告或 html 报告。 我打算构建的程序类似于 doxygen,但我希望它供我个人使用。

【问题讨论】:

    标签: c report parsing


    【解决方案1】:

    研究脚本语言。我推荐 Python 或 Perl。

    【讨论】:

      【解决方案2】:

      ctags,也许?

      Ctags 生成源文件中语言对象的索引(或标记)文件,使文本编辑器或其他实用程序可以快速轻松地找到这些项目。标记表示可以使用索引条目的语言对象(或者,为该对象创建的索引条目)。

      【讨论】:

        【解决方案3】:

        如果它是你想要的编程语言,那么我会说一些以字符串处理能力而闻名的东西,所以这意味着 perl。

        但是,您需要的任务可能相当复杂,因为您需要“了解”该语言,因此您需要遵循编译器所做的相同步骤,对语言进行词法和语法分析(想想 flex,想想 yacc)为了真正“知道”这些字符串的含义。

        也许最好的起点是看一下 doxygen 并尝试尽可能多地重用那里完成的工作

        【讨论】:

          【解决方案4】:

          Haskell 有一个相对较新的语言-c 项目http://www.sivity.net/projects/language.c,它允许分析 C 代码。

          如果您熟悉 Haskell,那么可能值得一看。即使您不是,也可以尝试一下。

          【讨论】:

            【解决方案5】:

            您正在打开一大罐蠕虫,这不是有效利用您的时间,等等等等。

            继续回答,如果您谈论的内容超出了琐碎的分析并且需要准确性,则需要解析 C 源代码。您可以使用任何语言来执行此操作,但您几乎肯定会希望从高级语法生成解析器。有很多工具可以做到这一点。一个现代且特别强大的解析器生成器是ANTLR; C 有许多 ANTLR 语法,包括更易于使用的子集。

            【讨论】:

              【解决方案6】:

              Lex/yacc 适合构建解析器。

              【讨论】:

                【解决方案7】:

                Python 和 Perl 都具有出色的字符串处理能力。

                我建议使用 ctags 之类的东西来解析程序,然后创建一个脚本来读取 ctags 文件并以 txt/html 格式输出。

                ctags 使用的文件格式是明确定义的,以便其他程序可以读取它。有关 ctags 本身及其使用的文件的更多信息,请参阅 http://ctags.sourceforge.net

                【讨论】:

                  【解决方案8】:

                  pycparser 是一个用纯 Python 编写的完整的 ANSI C89/C90 解析器。它被广泛用于分析 C 源代码以满足各种需求。它带有一些示例代码,例如列出文件中的所有函数定义等。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2011-09-07
                    • 2021-12-14
                    • 2012-11-06
                    • 2011-04-24
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-09-17
                    相关资源
                    最近更新 更多