У меня есть эта грамматика, которая должна генерировать java-байтовый код из Java-кода. Я знаю, что это предупреждение было рассмотрено ранее во многих вопросах, но я не мог найти проблему, похожую на мою. выводит из этого предупреждения для этих двух правил, в частности:Bison: правило бесполезно в парсере из-за конфликтов [-Wother]
statement_list:
{
$<stmt_type>$.next = $<stmt_type>0.next;
}
statement
|
{
$<stmt_type>$.next = strdup(genLabel().c_str()); //generate label for statement and assign it to statement list next
}
statement_list
{
$<stmt_type>$.next = $<stmt_type>0.next;
fout<<$<stmt_type>1.next<<":"<<endl; //mark statement with statement list next label
}
statement
;
и это один
b_expression:
expression RELA_OP expression
{$$ = $<bexpr_type>0;relaCast(string($2),$$.nTrue,$$.nFalse);}
|{/* addding some strings to this action */ } b_expression BOOL_OP b_expression
мне нужно здесь отметить каждое заявление с его следующей перед разбором его, чтобы использовать его в генерации кода. , когда я удаляю семантические действия из statement_list, его ошибка исчезает, но я не пытаюсь сделать то же самое для b_expression.
Если вы не выполняете действия, ваше правило 'b_expression':' b_expression:/* empty */| выражение RELA_OP выражение | b_expression'. Пустое производство почти наверняка ошибочно, и последнее производство, очевидно, бесполезно, поскольку оно является чистой рекурсией. Проблема с вашей постановкой 'statement_list', безусловно, рассматривается в руководстве bison и, вероятно, в некотором дублирующем вопросе о SO. – rici
Например [эти вопросы] (http://stackoverflow.com/search?q= [yacc] + или + [bison] + mid-rule + action + conflict) и [эта глава руководства] (https: // www. gnu.org/software/bison/manual/bison.html#Mid_002dRule-Conflicts) – rici
первое спасибо за руководство, я, должно быть, передал эту часть. для b_expression произошло что-то неправильное при копировании вопроса, теперь у него есть правильная грамматика. – mohRamadan