为了更好地理解C++语言和语法的一些细节,我希望能够编写一个小的C++程序,并查看编译器从中生成的AST.
看起来clang过去有这个功能(-emit-asm),但它已经删除了.
今天有一个简单的方法吗?
我想要一个python脚本来打印C/C++文件中定义的所有函数的列表.
例如,abc.c定义两个函数:
void func1() { }
int func2(int i) { printf("%d", i); return 1; }
我只想搜索文件(abc.c)并打印其中定义的所有函数(仅限函数名).在上面的例子中,我想打印func1,func2使用python脚本.
在脱离背景阅读时,问题标题可能会产生误导.让我先解释一下我想要建立什么.
我正在构建一个脚本,它将需要我的学生编写的100个非常简单的C程序,并检查一些非常基本的属性,如.
如果这是某种脚本编程语言,那可能会容易得多.我可以简单地使用include或eval然后完成检查.
但是当谈到C编程时,我会说这很难.我该怎么做 ?
我很好奇 C/C++ 词法分析器和解析器如何协同工作。我知道解析器通常需要至少一个标记的前瞻。我的问题是,在生产编译器(例如 gcc 或 clang)中:
1)词法分析器是否先运行,对整个文件进行词法分析,然后让解析器生成 AST。这意味着词法分析器会生成一个标记列表。
或者
2) 词法分析器是否只生成一小部分足以让解析器完成其工作的标记。这意味着词法分析器和解析器轮流运行。
我绝对认为使用选项 1,因为像 C++ 这样的语言有时需要任意前瞻,因为语法不是上下文无关的,但这会占用大量内存。