属性语法中的实际值和期望值是什么?

what is actual value and expected value in attribute grammar?

我是学属性文法的,讲到每条句法规则的语义规则时,会出现实际值和期望值这两个词。但我不知道在什么情况下使用 actual 或 expected。 例如,当有像

这样的创建规则时
<assign> → <id> = <expr>
<id> → A|B|C
<expr> → <id> + <expr> | <id> * <expr> |( <expr>)| <id>

syntax rule: <assign> → <id> = <expr>

semantic rule: <expr>.expected_type ← <id>.actual_type

syntax rule: <expr> → <id>

semantic rule: <expr>.actual_type ← <id>.actual_type

一开始我以为在产生式规则左边是actual_value,右边是expected_value,后来证实是这样的每个生产规则都不同。 actual_value 和 expected_value 到底是什么以及何时使用它们

他们只是名字。

编写属性语法时,需要为属性命名,就像编写程序时,需要为变量命名一样。

因此,编写该语法的人都认为那些特定的标识符对阅读代码的人有意义。

事实上,这种情况很少见,这就是为什么对代码进行注释很重要的原因。写那个语法的人应该这样做。

无论如何,我们可以猜出它们的意思(尽管我不相信这是最好的解决方案)。表达式的 actual_type 大概是该表达式产生的值的类型。所以如果表达式是一个id,表达式的类型就是id所代表的变量声明的类型。 (更有趣的是看看他们如何设置需要转换的表达式的实际类型,例如 2 + 3.5。)

如果变量已声明类型,则对变量的赋值可能涉及转换。 (例如,如果 x 具有浮点类型而 i 具有整数类型,则 x = i + 2 需要编译器发出一条指令来更改从 i+2 计算的整数值转换为浮点值。)编写该属性语法的人认为将所需的转换记录为表达式的 expected_type 是有意义的;换句话说,赋值需要的值的类型。