У меня каверзный вопрос (по крайней мере, с моей точки зрения), касающийся комбинаторов парсера 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 подданных» он должен останавливаться при достижении номера уровня, который сам по себе не является более низким, в данном случае это строка «3 subData2».
Может кто-нибудь помочь с этим вопросом или указать мне правильное направление.Мое текущее решение состоит в том, чтобы решить эту проблему после того, как я проанализировал несвязанную структуру.
Заранее спасибо.
С уважением, Стефан