Бизон - дополнительный параметр для push и чистого парсера - PullRequest
6 голосов
/ 15 апреля 2011

Как передать один дополнительный параметр (не младший токен типа YYSTYPE) в функцию yypush_parse()?

Парсер действительно реентерабельный, но эта дополнительная переменная имеет решающее значение для безопасности потока приложения, в которое мне нужно интегрировать мой парсер (это расширение PHP, поэтому мы говорим о TSRM ).

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

Я пытался взломать YYPUSH_DECLS, и это работает, поскольку объявление функции касается, НО несколько тысяч LOC'ов заканчиваются реализацией yypush_parse, и я не вижу никакого способа перезаписать сигнатура функции, с которой начинается реализация yypush_parse.

YYPARSE_PARAM используется только тогда, когда анализатор не является принудительным (насколько я могу судить), но в моем случае мне НУЖНО, чтобы он был push из-за того, что я должен делать в цикле обработки после лексирования и до добавления нового токена в стек анализа.

Поэтому мне интересно, есть ли %directive или что-то, что может помочь.

С другой стороны, я действительно считаю, что YYPARSE_PARAM следует использовать настолько, насколько он определен, независимо от того, какой это синтаксический анализатор. Жаль, что это не так.

1 Ответ

1 голос
/ 17 апреля 2011

%parse-param.YYPARSE_PARAM устарело и не должно использоваться.

...