1

好吧,这就是我所做的:

[a] returns A
[b] returns B

yacc

%toke A B
%%
s: B | a B;
a: A | a A;

现在我如何只接受那些字符串 where n>=10

我想到了:

s : B | A A A A A A A A A a B

还有其他想法吗?

4

1 回答 1

1

您可以为此使用 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;
%%
于 2012-11-27T21:38:36.323 回答