我使用 flex 和 bison 在 c 中创建了一个小型解析器。解析器将结果写入一些全局变量,调用函数从那里读取它。
我正在尝试将我的解析器打包为 php 扩展。根据我从 php 文档中了解到的情况,不建议使用真正的全局变量,因为它们不是线程安全的,我必须改用模块全局变量。
为了使用模块全局变量,您必须传入函数 TSRMLS_DC 作为其最后一个参数。
你知道我是否可以修改 yyparse 以接受 TSRMLS_DC 作为参数。或者如果有另一种访问全局变量的方法?
我使用 flex 和 bison 在 c 中创建了一个小型解析器。解析器将结果写入一些全局变量,调用函数从那里读取它。
我正在尝试将我的解析器打包为 php 扩展。根据我从 php 文档中了解到的情况,不建议使用真正的全局变量,因为它们不是线程安全的,我必须改用模块全局变量。
为了使用模块全局变量,您必须传入函数 TSRMLS_DC 作为其最后一个参数。
你知道我是否可以修改 yyparse 以接受 TSRMLS_DC 作为参数。或者如果有另一种访问全局变量的方法?
我不会使用全局变量,而是使用更现代的解析器生成器,它也是可重入的。例如,看看我是如何为元扩展完成的(我使用了稍微改变的柠檬和 re2c)。