属性语法中的实际值和期望值是什么?
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
是有意义的;换句话说,赋值需要的值的类型。
我是学属性文法的,讲到每条句法规则的语义规则时,会出现实际值和期望值这两个词。但我不知道在什么情况下使用 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
是有意义的;换句话说,赋值需要的值的类型。