属性语法中的实际值和期望值是啥?
Posted
技术标签:
【中文标题】属性语法中的实际值和期望值是啥?【英文标题】:what is actual value and expected value in attribute grammar?属性语法中的实际值和期望值是什么? 【发布时间】:2021-11-28 03:28:39 【问题描述】:我在学习属性语法,当我谈到每个语法规则的语义规则时,就会出现实际值和期望值这两个词。但我不知道在什么情况下使用实际或预期。 例如,当有像
这样的创建规则时<assign> → <id> = <expr>
<id> → A|B|C
<expr> → <id> + <expr> | <id> * <expr> |( <expr>)| <id>
语法规则: →
= 语义规则:
.expected_type ← .actual_type
语法规则:
→ 语义规则:
.actual_type ← .actual_type
一开始我以为在生产规则的左边是actual_value,在右边是expected_value,但后来确认每个生产规则都不一样。究竟什么是actual_value 和expected_value 以及何时使用它们
【问题讨论】:
【参考方案1】:它们只是名字。
当你写一个属性语法时,你需要给属性名,就像你写一个程序时,你需要给你的变量名。
因此,编写该语法的人认为那些特定的标识符对阅读代码的人来说是有意义的。
事实上,这种情况很少发生,这就是注释代码很重要的原因。写那个语法的人应该这样做。
无论如何,我们可以猜到他们的意思(尽管我不相信这是最好的解决方案)。表达式的actual_type
可能是该表达式产生的值的类型。所以如果表达式是id
,那么表达式的类型正是id
所代表的变量的声明类型。 (更有趣的是看看他们如何设置需要转换的表达式的实际类型,例如2 + 3.5
。)
如果变量已声明类型,则对变量的赋值可能涉及转换。 (例如,如果x
具有浮点类型而i
具有整数类型,则x = i + 2
要求编译器发出一条指令,将从i+2
计算出的整数值更改为浮点值。)写了属性语法认为将所需的转换记录为表达式的expected_type
是有意义的;换句话说,赋值需要的值的类型。
【讨论】:
以上是关于属性语法中的实际值和期望值是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Binding 语法的 StringFormat 部分中的 括号是啥意思?
Android 的 TTS XML 中音素属性的正确语法是啥?
在 python 中,将函数用作类的属性的正确语法是啥? [关闭]