当前位置: 首页 > news >正文

Assignment

1 Statement 里面包含了Expression。

对Statement 的interpret 里面包含了 对Expression 的interpret。

2 Expression 可以下降出Assignment

3 单个token前瞻递归下降解析器在解析完左侧操作数并偶然发现 = 之前,无法看清是否在解析赋值。毕竟,在解析完左操作数后,我们才知道自己在解析一个 + 表达式。

不同之处在于,赋值的左侧不是一个求值表达式。它是一种伪表达式,会求值到一个可以赋值的 “东西”。如下

由于字段赋值的接收方可以是任何表达式,而表达式的长度可以随心所欲,因此可能需要花费大量的查找符才能找到 =。

我们只有一个token,并前瞻一下,我们应该做什么?

解析赋值表达式的大部分代码与其他二元运算符(如 +)的代码相似。我们解析左侧,它可以是任何优先级较高的表达式。如果找到 =,我们就解析右侧,然后将其全部打包到赋值表达式树节点中。

这个和binary的处理不同。binary都是循环, 因为可能1+1+1+1.。。。

assignment是右结合。a=b=c=d。 

4 根据assignment的代码,这个式子会报错。

因为a+b 左侧到最后,并不是Variable。

5 对于assignment,我们不会evaluate左侧的value。

如下,第二行我们不想得到"before"。而是想的到“evaluates” a to a storage location that you can assign into.

这也就是为啥 Expr.Assign node 左侧是个Token 而不是Expr。

如果不hit到=,我们不知道这是个l-value。

6 Assignment 最后需要返回赋值的值。

才能实现 下面的功能。

7 为了实现变量的作用域。代码实现的environment变成了一个链表。inner的environment都会指向outer的environment。

变量声明的时候,自动用最内侧的environment。

但是读取和赋值时,需要考虑链上的变量。

8 使用链式的环境Environment。

运行每个block的时候,都会新建一个environment变量,创建的同时,链接上外层environment。

开始this指的是外层的。try里面换成了新赋值的。

运行结束后,还会设置回来。用finally是为了异常抛出也会运行这句。

这个是在哪里开始嵌套的?

这里

几个问题:

1 expression是equality的例子有吗

2 Assignment 和equality 什么关系?

就是语法上等级挨着。没有其他关系。

原文:这就是说,赋值要么是一个标识符,后面跟一个 = 和一个值表达式,要么是一个相等表达式(以及任何其他表达式)。

有时把英文扔到翻译里,再看一遍就理解了。

3 declaration 和 assignment 什么关系

好像确实不一样。

declaration需要var在前面

assignment直接赋值就好了。


http://www.mrgr.cn/news/24434.html

相关文章:

  • Meme“淘金”热潮下:Meme发射平台的安全风险分析
  • 果蔬识别系统性能优化之路(一)
  • appium server gui详细按照步骤
  • Mongodb Error: queryTxt ETIMEOUT xxxx.wwwdz.mongodb.net
  • word文档的读入(5)
  • 转行人员想做网络安全工程师有哪些要求?
  • 基于SpringBoot+Vue+MySQL的志愿服务管理系统
  • [SDOI2010] 地精部落(简单dp)
  • 多个时间序列的滞后相关性
  • JAVA学习-练习试用Java实现“最小覆盖子串”
  • 东土科技加码芯片业务投资,携手神经元共建新型工业生态
  • 编码与实现
  • 体育数据API纳米足球数据API:足球数据接口文档API示例⑩
  • 基于ts写法的一些 项目中会有所用到的功能函数
  • 区块链当前发展和未来展望
  • JavaScript高级——关于语句分号的问题
  • 如何在Windows系统上使用谷歌浏览器进行远程工作
  • Agent引领“ComfyUI全新升级” | 用户简单描述需求,“自动生成”完美工作流图,绝对吸睛!
  • Java——多态
  • MySQL内置函数