>我有这些规则:
while: 'while' expr 'do' program;
if: 'if' expr 'then' program 'else' program;
我不在乎expr
包含什么,所以我怎么能把所有东西都带到那里直到then
或do
?
我试过了:
expr: .*?~('then'|'do');
但它不起作用。为什么?
如果内容和结构对您无关紧要,请改用令牌流。遍历所有令牌(从while
令牌开始,直到遇到do
(并跳过所有嵌套循环(。您的解析器确保输入正确,因此可以使用令牌流。