舉個簡單的語言定義圖表,我有以下衝突的規則的衝突:如何避免換擋/減少與生產幾操作數
rm_arcs: RM ARC VARNAME VARNAME ref_exp ref_exp
{
$$ = new RmArcNodes($3, $4, $5, $6);
}
| RM ARC VARNAME ref_exp ref_exp
{
$$ = new RmArcNodes($3, $4, $5);
}
其中野牛說,這導致3移位/減少衝突。
的ref_exp
規則定義如下:
ref_exp : STRCONST
{
auto symbol = string_table($1);
$$ = new StringExp(symbol);
}
| INTCONST
{
auto symbol = id_table($1);
$$ = new IntExp(symbol);
}
| VARNAME
{
auto varname = var_tbl($1);
if (varname == nullptr)
{
stringstream s;
s << "var name " << $1 << " not found";
$$ = new ErrorExp(s.str());
}
else
$$ = varname;
}
;
是否有爲了消除這些矛盾,而無需修改語言改寫語法什麼簡單的辦法?
Regards
我假設'ref_exp'可以包含'VARNAME'? – Puppy
@Puppy是的,這是正確的 – lrleon
其實我只是誤讀了語法。我認爲你可以分析這一點,但不記得如何正手。 – Puppy