相关疑难解决方法(0)

为什么不能用LR(1)解析器解析C++?

我正在阅读解析器和解析器生成器,并在维基百科的LR解析页面中找到了这个语句:

可以使用LR解析器的一些变体来解析许多编程语言.一个值得注意的例外是C++.

为什么会这样?C++的哪个特定属性导致无法使用LR解析器进行解析?

使用谷歌,我只发现C可以用LR(1)完美解析,但C++需要LR(∞).

c++ grammar parsing formal-languages

147
推荐指数
6
解决办法
3万
查看次数

从c ++代码中获取人类可读的AST

为了更好地理解C++语言和语法的一些细节,我希望能够编写一个小的C++程序,并查看编译器从中生成的AST.

看起来clang过去有这个功能(-emit-asm),但它已经删除了.

今天有一个简单的方法吗?

c++ abstract-syntax-tree

20
推荐指数
3
解决办法
1万
查看次数

如何在编译器中管理符号表

我想知道是否只有一个符号表存储有关源文件的所有信息,还是有多个符号表相互堆叠,并且仅在当前作用域与该表相关时才获取。

例如说我有两种方法

int foo(int a){
    int b;

    bar(b);
    ...
}

double bar (int a){
   int b;
   ...
}
Run Code Online (Sandbox Code Playgroud)

这里两个中的a和b的作用域不同,因此,如果符号表堆叠在一起,则在执行foo时会首先获取与foo相关的符号表。但是,在执行bar时,bar的符号表堆叠在foo的上面,因此当前符号表包含bar的a和b的信息。

如果符号表是集中式的,则foo的信息和bar的信息都驻留在一个符号表中,但是可能有一些条目指定foo中的a,b属于foo的范围,而bar中的a,b属于bar。没有其他符号表可参考

以上是我对符号表的假设。请告诉我哪一个是真实的案例,并在其中填入更多详细信息。

谢谢

compiler-construction symbol-table

3
推荐指数
1
解决办法
974
查看次数