我试图使用LPEG为GLSL构建预处理器。我设法让#define和#undef语句没有问题,但是当我尝试使用#ifdef语句时,我的问题出现了。
我的想法是我可以构建一个封装着色器的规则,以#ifdef和#endif语句为边界,如下所示:
S -> include | define | ifdef | code
ifdef -> "#ifdef" + var + S + "#endif"
显然这个语法是可终止的,因为ifdef规则需要在递归调用之前捕获#ifdef和宏名称。然而,LPEG不同意,声称这条规则可以保留递归"。
有谁知道我能做些什么呢?
感谢。