为什么C ++标准中的declaration-seq以这种方式编写?

时间:2017-05-02 12:23:55

标签: c++ parsing c++11 c++14 language-lawyer

declaration-seq:
   declaration
   declaration-seq declaration
不是这样的:

declaration-seq:
   declaration
   declaration declaration-seq

这两个定义是否可以互换?他们之间有什么区别?

1 个答案:

答案 0 :(得分:6)

这是C ++ C传承的遗迹。 C语法(几乎)LALR(1),因此尽可能使用left recursion。 C ++语法甚至不再模糊LALR,但许多规则仍然以LALR解析器更喜欢的形式编写,因为没有理由改变它们 - 任何足以处理C ++的解析器算法都不关心哪种类型的使用句法递归。