【发布时间】:2016-05-25 07:09:20
【问题描述】:
在 C++ 中,符号“”用于比较以及表示模板参数。因此,代码 sn -p
[...] Foo < Bar > [...]
可能被解释为以下两种方式中的任何一种:
- 带有模板参数 Bar 的 Foo 类型对象
- 将 Foo 与 Bar 进行比较,然后将结果与接下来的结果进行比较
C++ 编译器的解析器如何有效地在这两种可能性之间做出决定?
【问题讨论】:
-
您可以通过检查什么是 LL 语法来很好地了解会发生什么。 ;-)
-
@Caduchon AFAIK C++ 语法既不是 LL 也不是 LR。事实上,我相信它根本不是上下文无关的。答案中暗示了这一点,其中有关上下文的知识似乎是正确解析所必需的。
-
@Bakuriu:大多数传统语法(左侧单非终结符)根据定义都是上下文无关的。 C++ 不会改变这一点。对于大多数语言,语法的解释在实践中不是上下文无关的。 C++ 在这方面没有什么不同。
-
@Askaga:您将狭义的“解析”与确定语法的含义混淆,其中一部分是解析源代码中每个点使用的每个标识符的含义(“名称分辨率”。
标签: c++ parsing syntax compiler-construction