Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing Bison/Yacc减少特定语法示例的冲突_Parsing_Bison_Yacc_Context Free Grammar_Reduce Reduce Conflict - Fatal编程技术网

Parsing Bison/Yacc减少特定语法示例的冲突

Parsing Bison/Yacc减少特定语法示例的冲突,parsing,bison,yacc,context-free-grammar,reduce-reduce-conflict,Parsing,Bison,Yacc,Context Free Grammar,Reduce Reduce Conflict,我的编译器类有一个解析器项目。我无法解决其中一条规则的reduce/reduce冲突 此语法规则的图形表示在此链接中可用(很抱歉,由于stackoverflow策略,我无法在此发布图像): 其中所有椭圆都是端子符号 因为这个规则看起来有点复杂,我试着把它分解成更小的部分。 以下是我构建语法的尝试: type : id_or_int brackets_or_end ; id_or_int : IDnum | INTnum

我的编译器类有一个解析器项目。我无法解决其中一条规则的reduce/reduce冲突

此语法规则的图形表示在此链接中可用(很抱歉,由于stackoverflow策略,我无法在此发布图像):

其中所有椭圆都是端子符号

因为这个规则看起来有点复杂,我试着把它分解成更小的部分。 以下是我构建语法的尝试:

type    :   id_or_int   brackets_or_end
        ;
id_or_int   :   IDnum
        |   INTnum
        ;
brackets_or_end :   brackets    remainingpartboe
        |
        ;
brackets    :   LBRACnum    RBRACnum    brackets
        |
        ;
remainingpartboe:   DOTnum      type
        |
        ;   
请注意,端子是以后缀num结尾的单词,例如DOTnum。其余的是非终结符

Bison报告了以下冲突

mj-parser.y: conflicts: 1 reduce/reduce
mj-parser.y:122.18: warning: rule useless in parser due to conflicts: 
brackets_or_end: /* empty */
请注意,上面的bison错误指的是括号或结束规则的第二个替代产品

请通过建议另一种书写语法的方法来帮助解决这一冲突。 顺便说一句,我已经查看了Bison的详细输出,但没有太大帮助

谢谢-sas

(在评论中回答的问题。转换为社区wiki答案。请参阅)

@BobDalgleish写道:


请注意,在同一生产树中有两个非终结符可以为空。因此,空字符串可以缩减为括号或括号\u或\u结尾。这行不通

OP写道:


你完全正确,鲍勃。谢谢你的提示:括号不应该有一个ε减少。这将消除冲突,减少冲突


请注意,在同一生产树中有两个非终结符可以为空。因此,空字符串可以缩减为括号或括号\u或\u结尾。这行不通,你说得对,鲍勃。谢谢你的提示:括号不应该有一个ε减少。这将消除冲突,减少冲突。