我有一个棘手的问题(至少在我看来),关于 Scalas 解析器组合器和递归解析。我目前正在构建一个小型解析器,它应该能够解析这样的 PL/1 结构:
dcl 1 data,
3 subData,
5 tmp char(15),
5 tmp1 char(15),
3 subData2,
5 tmp2 char(10),
5 tmp3 char(5);
在这种情况下,我想构建一个 AST,如下所示:
Record(data) -> (Record(subData),Record(subData2))
Record(subData) -> (Char(tmp),Char(tmp1))
Record(subData2) -> (Char(tmp2),Char(tmp3))
这意味着父元素应该连接到它的子元素。在我的世界中,这应该以某种方式导致递归解析器,但是我的问题是如何控制何时停止在子级别中下降。例如,在解析“3 subdata”记录结构时,它应该在遇到本身不低的级别数时停止,在本例中为“3 subData2”行。
有人可以帮助解决这个问题,或者指出一个好的方向。我目前的解决方案是在解析一个未连接的结构后解决这个问题。
提前致谢。
问候斯特凡