
LOX
文章平均质量分 66
地摊书贩
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Resolving and Binding
如果我们找到了变量,我们就解析它,同时传递当前最内层作用域与找到变量的作用域之间的作用域数目。每次访问变量时,它都会告诉解释器在当前作用域和变量定义的作用域之间有多少个作用域。如果我们走遍了所有的代码块作用域,却始终没有找到变量,我们就会让它悬而未决,并假定它是全局变量。你可能会认为我们需要某种嵌套树结构,以避免在有多个表达式引用同一变量时出现混乱,但每个表达式节点都是自己的 Java 对象,有自己的唯一标识。,因此不需要担心变量名称的冲突,直接通过表达式节点的引用来存储和查找作用域深度。原创 2024-09-22 21:15:58 · 863 阅读 · 1 评论 -
Statement 和 Experssion的关系
此外,这里的Statement 也是有子类Expression的。但是并不是Expr那个类,而是Expression。Statement 看似在语法树上,但是他已经不是Expression。思考:我以为这两者会是向下递归的关系。两者的关系也可以从这个语法来看出。所以这里需要新建一个类。原创 2024-09-18 14:12:42 · 247 阅读 · 0 评论 -
Assignment
我们解析左侧,它可以是任何优先级较高的表达式。如果找到 =,我们就解析右侧,然后将其全部打包到赋值表达式树节点中。毕竟,在解析完左操作数后,我们才知道自己在解析一个 + 表达式。原文:这就是说,赋值要么是一个标识符,后面跟一个 = 和一个值表达式,要么是一个相等表达式(以及任何其他表达式)。由于字段赋值的接收方可以是任何表达式,而表达式的长度可以随心所欲,因此可能需要花费大量的查找符才能找到 =。不同之处在于,赋值的左侧不是一个求值表达式。它是一种伪表达式,会求值到一个可以赋值的 “东西”。原创 2024-09-11 15:41:33 · 331 阅读 · 0 评论