0

Flex と bison を使用して、c で小さなパーサーを作成しました。パーサーは結果をいくつかのグローバル変数に書き込み、呼び出し元関数はそこからそれを読み取ります。

パーサーを php 拡張機能としてパッケージ化しようとしています。私がphpドキュメントから理解していることから、真のグローバル変数はスレッドセーフではなく、代わりにモジュールグローバルを使用する必要があるため、推奨されません。

モジュール グローバルを使用するには、関数 TSRMLS_DC を最後の引数として渡す必要があります。

TSRMLS_DC を引数として受け入れるように yyparse を変更できるかどうかはわかります。または、グローバル変数にアクセスする別の方法がある場合は?

4

1 に答える 1

2

グローバル変数は使用しませんが、再入可能であるより最新のパーサー ジェネレーターを使用します。たとえば、メタ拡張機能をどのように実装したかを見てください(わずかに変更されたレモンと re2c を使用しています)。

于 2012-03-25T12:19:05.733 に答える