我正在尝试对点表示法( object.property
(中使用的"点"令牌进行分类。
作为一个自学成才的业余开发器,主要使用JavaScript,我对编程和JavaScript有一个简化(肯定是不完美的(理解。
阅读代码时,我倾向于将令牌分类为五类:
- 标识符( 保留关键字(
- 操作员
- 定界符/点clunctutors
- 单位
- 评论
但是,当涉及根据我的简化模型中使用点表示法中使用的点时,我有疑问,但是尝试以这种方式进行分类不是很有意义的。
我更像是二进制运算符,它采用两个标识符并返回参考(可能是定界线?(。但是我没有设法找到明确建立这一点的来源。(或至少这清楚地建立了它,我能够理解(。
我查看了各种文档,包括ECMA规格。
所以这是我有两个问题:
- 您认为我可以在哪里找到我要寻找的信息,或者我可以使用哪些关键字?
- 您如何看待点分类作为令牌?二进制操作员?你怎么知道?
语法上,它是后缀运算符。也许最好称其为后缀运营商家族,每个法律标识符都可以遵循。
它类似于下标符号 v[a]
,它在句法上也更好地将其视为(划界(后缀运算符,即使它具有两个值作为操作数的值。以同样的方式,我们可以将所谓的三元运营商cond ? alt1 : alt0
称为分界二进制操作员。从语法上讲,"操作员"是? alt1:
这种语法的观点最初可能看起来有些奇怪,它来自操作员语法的描述,该语法基本上具有表单,使用⟨⟩
进行分组和*
进行可选重复(即0或更多实例,如在正则表达式(。
⟨ PREFIX* OPERAND POSTFIX* ⟩ ⟨ INFIX ⟨ PREFIX* OPERAND POSTFIX* ⟩ ⟩*
该配方通过在OPERAND
中包括( EXPRESSION )
(递归(来处理括号,用于分组括号,并在POSTFIX
中包括( EXPRESSION_LIST )
,用于函数调用中使用的括号。
以这种方式看待表达有助于解析。它还有助于阐明优先级和关联的含义,尤其是对于划界的操作员。
运营商优先级的一般规则是,我们首先给所有后缀运营商具有相同的最高优先级。从理论上讲,这不是必需的,但几乎总是导致预期的含义。没有人会将2+sin(0.5)
解释为"函数" 2+sin
的调用。与您的问题更相关,2+s.size
直观地表示.size
首先应用于s
,然后将2添加到结果中。
如果您专注于纯点符号,并且如果您以JS为例,则更多,那么它是分隔符。
当然,它不适用于添加功能的框架或形状。例如,自动化私有属性或类似属性的框架。
为什么?因为点表示法是替代式符号或颠倒的符号。和式式式服务器是定界线。 thing['otherthing']
与thing.otherthing