attributes - 属性语法中的实际值和期望值是什么?
问题描述
我是学属性语法的,说到每条语法规则的语义规则,就会出现实际值和期望值这两个词。但我不知道在什么情况下使用实际或预期。例如,当有一个创建规则时
<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 以及何时使用它们
解决方案
它们只是名字。
当你写一个属性语法时,你需要给属性命名,就像你写一个程序时,你需要给你的变量命名一样。
因此,编写该语法的人认为那些特定的标识符对阅读代码的人来说是有意义的。
事实上,这种情况很少发生,这就是为什么注释代码很重要。写那个语法的人应该这样做。
无论如何,我们可以猜到它们的意思(尽管我不相信这是最好的解决方案)。actual_type
表达式的 可能是该表达式产生的值的类型。因此,如果表达式是id
,则表达式的类型正是所表示的变量的声明类型id
。(更有趣的是看看他们如何设置需要转换的表达式的实际类型,例如2 + 3.5
。)
如果变量已声明类型,则对变量的赋值可能涉及转换。(例如,如果x
具有浮点类型和i
整数类型,x = i + 2
则需要编译器发出一条指令,将计算出的整数值更改i+2
为浮点值。)编写该属性语法的人认为记录所需的转换为expected_type
表达式的;换句话说,赋值需要的值的类型。
推荐阅读
- android - 改造中的表单数据请求失败
- java - Android Studio 中的图像资源变得奇怪
- javascript - 正在显示 HTML 图像文本而不是图像
- apache-spark - 在 spark-submit 上获取多条消息“寻求最早并重置分区主题分区的偏移量”
- html - 如何修复文本不对齐?
- html - 将查看区域之间的图像与左右文本对齐
- python - 为什么使用函数 scipy.stats.median_absolute_deviation 计算的 MAD 与我所做的函数不同?
- r - 如何使用 Reticulate 在 R shiny App 中导入 Python 函数以供下载 App
- amazon-dynamodb - 在 DynamoDB 中创建 Web 流量日志的最佳方法是什么?
- javascript - 在 Next JS 中更新路由器查询而不触发页面更改事件