如何使用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
相关产品推荐
相关产品推荐

