需要帮助使用 yacc 构建语法 (a^nb),更具体地说是使用 n>=10 等条件



嗯,这就是我所做的:

莱 克 斯

[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;
%%

相关内容

最新更新