2013-06-12 4 views
1

У меня есть одно определение парсера Bison для применения к нескольким потокам. Каждый поток создается в кусках через определенные промежутки времени, поэтому я хотел бы сохранить состояние данного экземпляра синтаксического анализа, чтобы переключаться между разными потоками, сохраняя при этом состояние (со своими связанными стеками) каждого из экземпляров синтаксического анализа.Как сохранить состояние Bison во время разбора кусков разных потоков?

Я знаю, что есть возможность переключаться между несколькими буферами со сканера, но это не помогает мне с созданием другого дерева синтаксического анализа для каждого потока, который я анализирую.

Есть ли функциональность Bison, которая позволяет выполнять какую функцию yy_switch_to_buffer() делает в flex?

+1

Будьте осторожны при пометке. Тег Flex используется для платформы интерфейса Adobe/Apache. Flex-lexer используется для лексического анализатора. – JeffryHouser

ответ

2

Я думаю, что вы ищете pure (reentrant) parser interface, что позволяет поддерживать отдельные состояния парсера. Вероятно, вы также захотите использовать reentrant flex lexer, так что каждое состояние парсера имеет свое собственное лексерское состояние. (Вы можете использовать один лексер и буферы переключателей каждый раз, когда вы его вызываете, но интерфейс реэкрантного лексера намного чище и более общий, так как он сохраняет все состояние лексера, включая, например, условие запуска и буферные стеки.)