Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 确定ECMAScript赋值表达式的左侧或右侧_Javascript_Parsing_Antlr4 - Fatal编程技术网

Javascript 确定ECMAScript赋值表达式的左侧或右侧

Javascript 确定ECMAScript赋值表达式的左侧或右侧,javascript,parsing,antlr4,Javascript,Parsing,Antlr4,我正在开发一个解析应用程序,它为ECMAScript文件的文本构建一个符号表。我遇到的问题是,在使用ParseTreeListener处理标识符时,确定我在赋值运算符的右侧还是左侧 这是一个与官方语法非常接近的用法。有一个名为leftHandSideExpression的解析器规则,但这是一种欺骗,因为当它在TestRig GUI中显示时,它也始终显示在表达式的右侧 这是一项需要访问者模式的任务吗 感谢您的建议。LeftHandside表达式只能出现在以下位置: 在赋值运算符的左侧。请注意,这

我正在开发一个解析应用程序,它为ECMAScript文件的文本构建一个符号表。我遇到的问题是,在使用
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
的父项揭示了情况(参见我答案的最后一句话)。啊哈!这完全有道理。谢谢。