2013-04-17 32 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

啊哈!這是完全合理的。謝謝。 –