表达式到底是什么?

Hol*_*Cat 10 c++ language-lawyer

考虑x声明中是否int x;有表达式。

我以前以为肯定不是,但是语法id-expression这里把变量名称为an。

那么有人可能会争辩说 onlyexpression是一个表达式,而不是??-expression。但在 中1 + 2,既不匹配1也不2匹配,因为它们分别是additive-expressionmultiplicative-expression,而不是expressions。但常识告诉我们,这些也应该被称为表达式。

我们可以决定any ??-expression(包括expression)是一个表达式,但声明中的变量名也匹配。

我们可以将表达式定义为 any ??-expressionexcept id-expression,但这感觉相当随意。

表达式的正确语法定义是什么?其声明中的变量名是否是表达式?

Hol*_*Cat 4

在查看了 @LanguageLawyer ( 1 , 2 )提供的链接后,我确信共识是这是id-expression一个用词不当,并且并不总是一个表达式(例如,它不是声明中的表达式)。

那么,如果解析树中至少有一个源子字符串被调用,则源子字符串就是一个表达式:

  • expression或者
  • *-expression1但不是id-expression

,并且该父级完全扩展到该子字符串,仅此而已。

这与 @nm 提出的定义相同,只是我也允许*-expression而不是id-expression节点。


1 *是任何字符串的通配符。