嗯,这就是我所做的:
莱 克 斯
[a] returns A
[b] returns B
亚克
%toke A B
%%
s: B | a B;
a: A | a A;
现在我如何只接受那些n>=10
的字符串?
我想到了:
s : B | A A A A A A A A A a B
还有其他想法吗?
您可以使用 YYFAIL 或 YYERROR 来实现:
%{
#include <stdio.h>
int aCount=0;
%}
%token A
%token B
%%
s : aList B {
if (aCount<10) {
YYFAIL;
}
}
anA: A {aCount++};
aList: anA | aList anA;
%%