Regex 以下语法的语法分析器程序
编写一个使用以下产品和操作的Yacc和Lex文件解析器:Regex 以下语法的语法分析器程序,regex,compiler-construction,yacc,lex,Regex,Compiler Construction,Yacc,Lex,编写一个使用以下产品和操作的Yacc和Lex文件解析器: S -> cSS {print “x”} S -> a {print “y”} S -> b {print “z”} 指示输入为cacba时将打印的字符串 我得到了这个错误:当我给它输入时,它说的是有效输入,还说的是语法错误 我的扫描代码是这个 %{ #include "prac.h" %} %% [c] {return C; } [a] {return A; } [b] {return
S -> cSS {print “x”}
S -> a {print “y”}
S -> b {print “z”}
指示输入为cacba时将打印的字符串
我得到了这个错误:当我给它输入时,它说的是有效输入,还说的是语法错误
我的扫描代码是这个
%{
#include "prac.h"
%}
%%
[c] {return C; }
[a] {return A; }
[b] {return B; }
[ \t] ;
\n { return 0; }
. { return yytext[0]; }
%%
int yywrap(void) {
return 1;
}
我的yacc代码是:
%{
#include <stdio.h>
%}
%token A B C
%%
statement: S {printf("Valid Input"); }
;
S: C S S {printf("Print x\n");}
| A {printf("Print y\n");}
| B {printf("Print z\n");}
;
%%
int main()
{
return yyparse();
}
yyerror(char *s)
{
printf("\n%s\n",s);
printf("Invalid Input");
fprintf(stderr,"At line %d %s ",s,yylineno);
}
如何解决此问题?
@克里斯多德写道:
最佳猜测-您正在windows上运行,因此在换行符之前\r将获得一个回车符,这将导致您的错误。尝试将\r添加到[\t]模式以忽略它 @旋风写道: 将fprintf语句更改为fprintfstderr,在第%d%s行,yylineno,s;这并不能解决你的问题 OP写道: 您的意思是我应该将\r\t添加到\t中,以便它的新正则表达式为[\r\t],对吗 @里希写道: @chris建议[\r\t]。如果你在循环中的某个地方有窗口,我同意
您将给出什么输入?最佳猜测-您正在windows上运行,因此在换行符之前会得到一个\r回车符,这将导致您的错误。尝试将\r添加到[\t]模式以忽略它。我删除了我的答案,因为它似乎不适合您。仍将第%d%s行yylineno,s处的fprintf语句更改为fprintfstderr;并不是说它能解决你的问题。@rici我给它输入cacba,但它说syantaxerror@UsamaLucky-我可以向您发送为我工作的完整代码,遗憾的是,有些人很快就投了反对票=是的,您可以按照我在lex中展示的方式使用regularexpression,但是有些人。。。。