【发布时间】:2020-04-18 05:14:28
【问题描述】:
这是一个 yacc 程序,用于识别所有以 b 结尾、前面有 n a 的字符串,使用语法 a n b(注意:输入 n 值)。
%{
#include "y.tab.h"
%}
%%
a {return A;}
b {return B;}
\n {return 0;}
. {return yytext[0];}
%%
yacc 部分
YACC PART
%{
#include <stdio.h>
int aCount=0,n;
%}
%token A
%token B
%%
s : X B { if (aCount<n || aCount>n)
{
YYFAIL();
}
}
X : X T | T
T : A { aCount++;}
;
%%
int main()
{ printf("Enter the value of n \n");
scanf("%d",&n);
printf("Enter the string\n");
yyparse();
printf("Valid string\n");
}
int YYFAIL()
{
printf("Invalid count of 'a'\n");
exit(0);
}
int yyerror()
{
printf("Invalid string\n");
exit(0);
}
输出
invalid string
即使对于 n 值为 2 的 aab 等有效字符串,它也会显示无效字符串。 对于我输入的每个字符串,都会调用 yyerror()。 请帮我解决这个问题! TIA
【问题讨论】:
标签: c++ bison flex-lexer yacc lex