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