Здравствуйте, para, Вы писали:
P>под "нечего" я подразумеваю отсутсвие этого токена и отсутствие информации от расположении токена в исходной разбираемой строке.
P>на вход парсеру подашь "1 / 2" P>вызовется гененрирующий метод с параметрами: ("1", ["2"])
P>так что сейчас буду заниматься тем, чтоб "/" после парсинга добавлялось к "АСТ" P>и на вход методу шло: ("1", ["/","2"])
Ты меня не слышишь.
Давай еще раз по порядку. Дай свое описание термина "АСТ" и объясни зачем оно тебе нужно.
P>когда будет создаватьтся корректное АСТ, буду переходить на прямые вызовы.
Не нужно ни формировать АСТ, ни дожидаться того когда он стане корректным. Надо тупо вызвать методы-обработчики для всех для всех разобранных правил, а промежуточные результаты просто держать в стеке. Если результат некоторого метода в дальнейшем не понадобится, то и фиг бы с ним. Это следствие выбранного алгоритма.
Посторайся понять, промежуточное АСТ будет существенно тормозить скорость парсера, так как создание объектов — это дорогая операция.
P>Кстати. P>если неправильно составить грамматику, парсер может уйти в бесконечный цикл. P>Есть ли планы/алгоритмы проверки корректности семантики грамматики?
ЗЫ
Постарайся все же понять, что построение АСТ это не нужная, вредная операция. От нее нужно отказаться. Это возможно и даже не очень сложно.
Да, но сначала нужно качественно реализовать основной алгоритм и вызов методов-обработчиков.
Прямую левую рекурсию нужно переписывать, а не прямую детектить и сообщать об ошибке.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.