LPEG - ошибка "Правило может быть леворекурсивной", несмотря на то, что это грамматика, которую можно прекратить

Я пытаюсь использовать LPEG для создания препроцессора для GLSL. Мне удалось заставить работать операторы #define и #undef без проблем, но мои проблемы возникают, когда я пытаюсь работать с операторами #ifdef.

Я думал, что смогу создать правило, которое будет инкапсулировать шейдер, ограниченный операторами #ifdef и #endif, например:

S -> include | define | ifdef | code
ifdef -> "#ifdef" + var + S + "#endif"

Ясно, что эта грамматика может быть прекращена, поскольку правило ifdef требует записи #ifdef и имени макроса перед рекурсивным вызовом. Однако LPEG не согласен, утверждая, что это правило "может быть рекурсивным".

Кто-нибудь знает, что я могу с этим сделать?

Благодарю.

0 ответов

Другие вопросы по тегам