Javascript 确定ECMAScript赋值表达式的左侧或右侧
我正在开发一个解析应用程序,它为ECMAScript文件的文本构建一个符号表。我遇到的问题是,在使用Javascript 确定ECMAScript赋值表达式的左侧或右侧,javascript,parsing,antlr4,Javascript,Parsing,Antlr4,我正在开发一个解析应用程序,它为ECMAScript文件的文本构建一个符号表。我遇到的问题是,在使用ParseTreeListener处理标识符时,确定我在赋值运算符的右侧还是左侧 这是一个与官方语法非常接近的用法。有一个名为leftHandSideExpression的解析器规则,但这是一种欺骗,因为当它在TestRig GUI中显示时,它也始终显示在表达式的右侧 这是一项需要访问者模式的任务吗 感谢您的建议。LeftHandside表达式只能出现在以下位置: 在赋值运算符的左侧。请注意,这
ParseTreeListener
处理标识符时,确定我在赋值运算符的右侧还是左侧
这是一个与官方语法非常接近的用法。有一个名为leftHandSideExpression
的解析器规则,但这是一种欺骗,因为当它在TestRig GUI中显示时,它也始终显示在表达式的右侧
这是一项需要访问者模式的任务吗
感谢您的建议。LeftHandside表达式只能出现在以下位置:
- 在
赋值运算符的左侧。请注意,这也可以是右侧,例如
中的表达式x=y=3
y
- 后缀递增/递减运算符的表达式部分(在
或x++
中的x--
)x
- 语句中(…的
的初始值设定项部分
要确定当前是否正在查看赋值表达式的左侧,请检查当前解析树节点及其父节点,以查找父节点为
LeftHandSideExpressionContext
的LeftHandSideExpressionContext
或AssignmentExpressionNoInContext
leftHandSideExpression代码>只能出现在以下位置:
- 位于
的左侧。请注意,这也可以是右侧,例如assignmentOperator
中的表达式x=y=3
y
- 后缀递增/递减运算符的表达式部分(在
或x++
中的x--
)x
- 语句中(…的
的初始值设定项部分
若要确定当前是否正在查看赋值表达式的左侧,请检查当前解析树节点及其父节点是否存在
LeftHandSideExpressionContext
,如果解释器模式不可用,则检查其父节点是否为AssignmentExpressionContext
或AssignmentExpressionNoInContext
足够了,那么解析器应该是下一个解决方案。当解释器模式不够时,那么解析器应该是下一个解决方案。我很确定这就是leftHandSideExpression的意图。然而,我在实践中看到的是,在一个简单的“foo=bar;”,右侧遍历assignmentExpression->conditionalExpression->logicalORExpression->LogicalEndExpression->bitwiseORExpression->bitwiseXORExpression->bitwiseANDExpression->equalityExpression->relationalExpression->shiftExpression->additiveExpression->乘法Expression->unaryExpression->postfixExpression->leftHandSideExpression。所有这些都使我的听者对leftHandSideExpression产生了抵触。@TimClemons在该链中,LeftHandSideExpressionContext
的父项揭示了情况(参见我答案的最后一句话).Aha!这完全有道理。谢谢。我很确定这就是leftHandSideExpression的意图。然而,我在实践中看到的是,在一个简单的“foo=bar,右侧遍历assignmentExpression->conditionalExpression->logicalORExpression->LogicalEndExpression->bitwiseORExpression->bitwiseXORExpression->bitwiseANDExpression->equalityExpression->relationalExpression->shiftExpression->additiveExpression->乘法Expression->unaryExpression->postfixExpression->leftHandSideExpression。所有这一切都让我的听众对leftHandSideExpression产生了反感。@TimClemons在这条链中,LeftHandSideExpressionContext
的父项揭示了情况(参见我答案的最后一句话)。啊哈!这完全有道理。谢谢。