2013-04-17 33 views
1

我正在研究为ECMAScript文件的文本构建符号表的解析应用程序。我遇到的问题是在处理带有ParseTreeListener的标识符时,确定何时位于赋值运算符的右侧或左侧。确定ECMAScript分配表达式的左侧或右侧

这是使用Chris Lambrou's ANTLR grammar,它似乎跟踪ECMAScript specification的官方语法非常密切。有一个解析器规则,称为leftHandSideExpression,但这是具有欺骗性的,因为它在TestRig GUI中显示时也始终显示在表达式的右侧。

这是一个需要访问者模式的任务吗?

欣赏建议。

+0

当解释器模式不够时,解析器应该是下一个解决方案。 –

回答

1

leftHandSideExpression只能出现在以下位置:

  • assignmentOperator的左手侧。请注意,这也可以也是是右手边,例如x = y = 3中的表达式y
  • 后缀增量/减量运算符(x中的x++x--)的表达式部分。
  • for (... in声明的初始化程序部分。

要确定如果你正在寻找一个赋值表达式的左侧,检查了LeftHandSideExpressionContext的父要么是AssignmentExpressionContextAssignmentExpressionNoInContext当前解析树节点和它的父母。

+0

我很确定这是LeftHandSideExpression的意图。然而,我在实践中看到的是,在一个简单的“foo = bar”中,右侧遍历了assignmentExpression - > conditionalExpression - > logicalORExpression - > logicalANDExpression - > bitwiseORExpression - > bitwiseXORExpression - > bitwiseANDExpression - > equalityExpression - > relationalExpression - > shiftExpression - > additiveExpression - > multiplicativeExpression - > unaryExpression - > postfixExpression - > leftHandSideExpression。所有这些都阻碍了我在LeftHandSideExpression上的听众。 –

+1

@TimClemons在那条链中,'LeftHandSideExpressionContext'的* parent *显示了情况(请参阅我的答案的最后一条语句)。 –

+0

啊哈!这是完全合理的。谢谢。 –