我有这些规则:
while: 'while' expr 'do' program;
if: 'if' expr 'then' program 'else' program;
我不关心expr
包含的内容,因此如何在then
或do
之前将所有内容都包含在内?
我试过了:
expr: .*?~('then'|'do');
但它不起作用。为什么呢?
答案 0 :(得分:0)
如果内容和结构不重要,请使用令牌流。迭代所有标记(从while
标记开始,直到遇到do
(并跳过所有嵌套循环)。您的解析器确保输入正确,因此可以使用标记流。