如何解决在我的情况下,通过chargetc读取或通过块fgets读取更有效 在其他操作系统和编译器上,请阅读其文档
我在大学的团队正在使用C语言对编译器进行编程。编译器以Goland的子语言获取源代码,并以类似于汇编程序的语言输出字节代码。我的问题是–哪种方法更有效,请按字符(getc)读取源文件char,并根据当前字符更改FSM的状态,或按块(fgets)读取,然后调用包含FSM的辅助函数来处理单个词素和输出令牌?
解决方法
我在大学的团队正在使用C语言对编译器进行编程。
在我的情况下,由char(getc)读取或由块(fgets)读取更有效的方法
在实践中,应该没关系。
由于CPU比大多数磁盘(包括SSD磁盘)快得多。而且由于page cache。
编写应用程序,对其进行调试,然后在编译器(编译C代码的一种)中启用优化,然后对其进行基准测试。它是特定于操作系统和编译器的。
在Linux上,阅读GCC,GDB,gprof(1),time(1),syscalls(2),fopen(3),fflush(3)的文档,setvbuf(3),fgetc(3),fgets(3),getline(3),readline(3),time(7)和Advanced Linux Programming
如果您正巧使用 GCC,请研究其源代码以获取灵感,并阅读其internals的文档,并以invoke的形式{ 1}};您会发现编译器花费的大部分时间都在optimizations上,而不是解析上。
您应该考虑元编程方法:为编译器项目使用(或开发)生成C程序的程序(受ANTLR,GNU bison,iburg,SWIG,{ {3}}等)。观察到GCC有许多专门的RPCGEN和相应的代码生成器。考虑将domain specific languages(或在2020年11月,GPP)用于此类目的。
大多数编译器都应转换内部编译器表示形式(例如,简化的RefPerSys,可能受abstract syntax trees的启发,如果您的老师愿意考虑使用GIMPLE允许)
在其他操作系统和编译器上,请阅读其文档。
当然要读libgccjit。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。