作为参考,这是我的代码:http ://hpaste.org/86949
我正在尝试解析以下表达式:if (a[1].b[2].c.d[999].e[1+1].f > 3) { }
. 播放的方法是varExpr
,它解析变量成员链。
语境
在我正在解析的语言中,点可以指定访问成员变量。由于成员变量可以是另一个对象,因此可以生成链,即:a.b.c
或本质上(a.b).c
。不要假设这些点是功能组合。
执行
逻辑是这样的:
首先,
before <- many vocc
收集 的所有实例varname .
及其可选数组表达式,只留下一个标识符this <- vtrm
收集剩余的标识符加上数组表达式——唯一没有以点开头的标识符
问题
我有两个问题:
首先,第一个术语 [出于我无法确定的原因] 似乎总是要求将其括在括号中以便解析器接受它,即:(a[1]).b[2].c...
-- 后续术语不需要这个。
其次,many vocc
不会停止解析。它总是需要另一个标识符和另一个点,我无法终止表达式来捕捉最后一个vtrm
.
我正在寻找可以帮助我解决问题/头痛的提示或解决方案。谢谢。