1

さて、これは私がやったことです:

レックス

[a] returns A
[b] returns B

yacc

%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

他のアイデアはありますか?

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 に答える