2012-03-24 13 views
0

Ich habe einen kleinen Parser in c mit Flex und Bison erstellt. Der Parser schreibt das Ergebnis in einige globale Variablen und die Caller-Funktion liest es von dort aus.Flex + Bison in einer PHP-Erweiterung

Ich versuche, meinen Parser als PHP-Erweiterung zu packen. Von dem, was ich aus der PHP-Dokumentation verstehe, werden echte globale Variablen nicht empfohlen, da sie nicht Thread-sicher sind und ich stattdessen Modul-Globals verwenden muss.

Um Modul Globals zu verwenden, müssen Sie die Funktion TSRMLS_DC als letztes Argument übergeben.

Zu wissen, wenn ich das Yyparse ändern kann, um TSRMLS_DC als Argument zu akzeptieren. Oder wenn es eine andere Möglichkeit gibt, auf globale Variable zuzugreifen?

Antwort

2

Ich würde keine globalen Variablen verwenden, aber einen moderneren Parser-Generator verwenden, der ebenfalls reentrant ist. Schau zum Beispiel, wie ich es für die meta extension gemacht habe (ich benutze eine leicht veränderte Zitrone und re2c).