You need to enable JavaScript to run this app. 如何使用lex与yacc实现习题指定语法 解决shift/reduce冲突及字符串判定问题
优惠活动
大模型
产品
解决方案
定价
更多

如何使用lex与yacc实现习题指定语法 解决shift/reduce冲突及字符串判定问题

基于lex与yacc的语法规则实现问题

现象描述

  • 实现对应习题的语法规则时,解析器编译抛出告警:warning: 5 shift/reduce conflicts [-Wconflicts-sr]
  • 运行时所有输入字符串均被判定为非法,初步排查认为问题可能出在优先级配置环节

规则验收标准

习题对解析器的判定能力有明确要求:

  • 需正确接受合法字符串示例:ba#ababadada#bad#dabbada
  • 需正确拒绝非法字符串示例:dad#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;
}

内容的提问来源于stack exchange,提问作者Juan Posso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.03 03:15:03