【发布时间】:2021-02-21 05:56:39
【问题描述】:
我正在尝试使用 lex & yacc 来实现本练习的语法,但它会引发此冲突:警告:5 次移位/减少冲突 [-Wconflicts-sr]时间> 并将每个字符串都视为无效,我认为它必须具有优先级: 它应该接受如下字符串: ba#ababadada#bad#dabbada 并拒绝: 爸爸#ad#abaadad#badadbaad 这是我尝试过的:
%{
#include <stdio.h>
int flag=0;
%}
%{
void yyerror();
%}
%token A B D NL
%%
str1 : Oracion NL { printf("\n Sequence accepted");return(0);}
;
Oracion : Oracion '#' Parrafo { }
| Parrafo { }
;
Parrafo : Silaba Parrafo Silaba { }
| Silaba { }
;
Silaba : Explosion Alto { }
| A Explosion { }
| A Alto { }
| Explosion { }
;
Explosion : Alto A { }
;
Alto : B { }
| D { }
;
%%
void main()
{
printf("\n write a sequence\n");
yyparse();
if(flag == 0)
printf("\n Valid sequence");
}
void yyerror()
{
printf("\n Invalid Sequence\n\n");
flag=1;
}
【问题讨论】:
-
注意:
return (0)在操作str1: Oracion NL { printf("\n Sequence accepted");return(0);}中不正确。你的导师有没有告诉你这样做?或者你是从某个在线教程中得到的(这可能表明教程不是很好)。 -
请不要删除已回答的问题。它对那些免费贡献时间回答的人表现出极大的不尊重。
-
昨天有人对
return 0和一个名为flag的变量有着同样好奇的用法,删除了一个我正在回答的问题。也许他们是你的同学,我不知道。但这超级烦人。不管怎样,我真的很想知道这个成语是从哪里来的。