首页 > 解决方案 > 属性语法中的实际值和期望值是什么?

问题描述

我是学属性语法的,说到每条语法规则的语义规则,就会出现实际值和期望值这两个词。但我不知道在什么情况下使用实际或预期。例如,当有一个创建规则时

<assign> → <id> = <expr>
<id> → A|B|C
<expr> → <id> + <expr> | <id> * <expr> |( <expr>)| <id>

语法规则:<assign> → <id> = <expr>

语义规则:<expr>.expected_type ← <id>.actual_type

语法规则:<expr> → <id>

语义规则:<expr>.actual_type ← <id>.actual_type

起初,我认为如果它在生产规则的左侧是actual_value,如果它在右侧是expected_value,但确认每个生产规则都是不同的。究竟是什么actual_value 和expected_value 以及何时使用它们

标签: attributesgrammarsemantics

解决方案


它们只是名字。

当你写一个属性语法时,你需要给属性命名,就像你写一个程序时,你需要给你的变量命名一样。

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

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

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

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


推荐阅读