gpt4 book ai didi

bison - YACC规则没有减少

转载 作者:行者123 更新时间:2023-12-04 20:54:02 24 4
gpt4 key购买 nike

我正在尝试学习 YACC,但在弄清楚它给我的警告消息时遇到了一些麻烦。这是我的文件的一部分:

define_character: WORD IS STRING COLOR
{
printf("%s's full name is %s and thier color is %s", $1, $3, $4);
};

dialog: WORD COLON STRING
{
printf("%s says %s", $1, $3);
};

change_scene: SCENE SETSCENE WORD
{
printf("%s is the new scene", $3);
};

它给我的警告是:
2 rules never reduced
2 useless nonterminals and 2 useless rules
warning: useless nonterminal: dialog
warning: useless nonterminal: change_scene
warning: useless rule: dialog: WORD SEMICOLON STRING
warning: useless rule: change_scene: SCENE SETSCENE WORD

我该如何解决这些问题?我试过搜索,我发现有人由于转移/减少冲突而出现错误。似乎 YACC 通常会将其添加到警告输出(如果有的话),但只是为了确保我尝试从 change_scene 中删除 WORD,因此它不会寻找与其他标记相同的任何标记,并且它仍然不会减少.我可以测试所有的规则,因为最上面的就是有效的。我是否在第一条规则的末尾遗漏了一些导致其余规则出现问题的语法?

最佳答案

我认为问题在于 yacc 假设第一个作品的左侧是开始符号。在这种情况下,这意味着由于您有

define_character: WORD IS STRING COLOR

yacc 认为 define_character是开始符号。你还有另外两个作品,即
dialog: WORD COLON STRING


change_scene: SCENE SETSCENE WORD

但是请注意,无法导出 dialogchange_scene来自 define_character .因此,yacc 告诉您您有两个无用的非终结符,即这两个,因为它们永远无法导出。出现关于两个无用产生式的错误是因为上述两种产生式实际上都不能被解析器触发。

我不确定我是否理解你想用这段代码做什么,但要解决这个问题,你需要以某种方式使它能够到达这些非终端。你能详细说明你想用 yacc 完成什么吗?

关于bison - YACC规则没有减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6839844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com