我正在研究數學表達式解析器的Bison文件。到目前爲止它基本上都很好,但我正面臨一個隱式乘法的問題。我怎麼能與野牛有一個「隱式乘法」規則?
你好,我想支持這個表達式,如2x sin(4x) cos(4x)
。它應該解析爲2 * x * sin(4 * x) * cos(4 * x)
。沒有什麼太糟糕了這裏,但考慮下面的一組規則:
expr
: /* snip */
| '-' expr { /* negate expression */ }
| expr '-' expr { /* subtract expressions */ }
| expr expr { /* multiply expressions */ }
有了這樣的隱含乘法法則與減法規則將導致不確定性:是x - log(x)
的log(x)
到x
減法或x
通過-log(x)
乘法?
我已經準備好迎接一個簡單的解決方案,比如「這是一個乘法,除非它正在減去」,但我不知道如何告訴Bison。
嗯,它不是'x * l * o * g',因爲我的詞法分析器將「log」(以及所有支持的函數名稱)視爲不同的標記,我的分析器使用特定的規則處理函數。 – zneak
@zneak,是的,我猜對了。因此,在我的語法中使用FUNC作爲詞法標記:) – rici