我认为这个问题可能看起来非常愚蠢和不必要,但我真的不知道该如何解决。
由于使用了一些用C编写的测试代码,因此需要制作调用图。
我制作了lex文件和yacc文件来解析语法。
现在,我可以制作一个可执行文件来解析以C语言编写的.l和.y文件。
但是由于可执行文件和输入文件的关系,现在我必须制作一个jpg文件和文本文件
jpg文件和文本文件需要在输入(调用图)中显示函数的调用关系
所以假设有文件
lex.l yacc.y test.c
我需要制作一个可执行文件。
lex lex.l
命令make lex.yy.c
yacc -d yacc.y
命令制作y.tab.c
和y.tab.h
(lex文件的标题)
现在cc y.tab.c lex.yy.c
cammand将制作一个可执行文件a.out
因此,由于a.out < test.c
命令的出现,我必须制作一个jpg文件(.jpg)和文本文件(.txt)
我知道如何使用fprintf()函数制作文本文件。
但是jpg文件是我真的不知道的东西。
我不能使用其他一些工具
我只能在lex文件和yacc文件中键入一些C代码
所以我想我可能会使用一些C库来做到这一点
有什么办法可以做到这一点?
谢谢
答案 0 :(得分:1)
由于使用了一些用C编写的测试代码,因此需要制作调用图。
您可以fork进行一些 other process绘图并使用inter-process communication工具(这可能是最简单的方法,因为它符合Unix philosophy)。考虑运行某些GraphViz或也许GnuPlot进程。您需要掌握Linux系统编程的技能(明智地使用system calls中列出的几个syscalls(2)),因此,您应该阅读ALP或更高版本。
因此,由于
a.out < test.c
命令的出现,我必须制作一个jpg文件(.jpg)和文本文件(.txt)
不要为您的程序a.out
命名,在2019年这太荒谬了。了解如何invoke GCC。并学习use程序参数(您可能想使用parsing program arguments工具)。您将以myprogram test.c
的身份调用程序,但要知道您的shell (您将用来运行程序的shell)会执行globbing。
您还可以使用GUI或{{3}之类的event loop,使您的程序成为某个GUI toolkit应用程序(以该工具包提供的某些GTK为中心) }。如果您只想输出一些图形,则可以考虑使用libSDL。
如果您具有libcairo技能,则可以考虑使用网络技术(例如web programming + SVG + HTML5);如果您想使程序成为一些专用的Web服务器(例如,用户将浏览某些Canvas URL),请考虑使用http://localhost:12345服务器库,例如HTTP。
如果您接受产生带有图纸的其他类型的文件,请考虑发出一些SVG或PDF文件。您也会找到相应的库。顺便说一句,SVG是一种文本格式,您可以直接发出。
最后,您可以找到许多处理JPEG文件的库,例如libonion。
PS。您确实应该在网络上找到一个小型的现有 libjpeg项目(例如在free software,github,gitlab上,等等...)与目标保持精髓,并研究其源代码以获取灵感。这样,您将学到许多实际的知识,并且可以节省大量的工作时间(因为您显然缺乏实践技能)。
顺便说一句,如果您的目标是找到一些现实生活中的C程序的调用图,请考虑编写一些sourceforge。几周前(大约800行C ++代码),我做了一些有关我的GCC plugin研究项目的有趣演示。而且,如果您必须解析C代码,则需要解析它的预处理形式。因此,运行一些cpp
预处理器即可得到该信息。