0
我一直試圖解析連接字符串,以便表達式也可以連接起來形成字符串。也就是,用於字符串連接的LALR語法
"No, " + 4*(6+5)/(8-4) + " is not equal to " + 75*1.3 + "."
上面應該正確解析。問題是+
導致轉換減少衝突。我一直在使用下面的語法;
<S> ::= <A> '+' <S>
| <A>
<A> ::= <E>
|QUOT
<E> ::= <T> '+' <E>
| <T> '-' <E>
| <T>
<T> ::= <F> '*' <T>
| <F> '/' <T>
| <F>
<F> ::= NUM
| '(' <E> ')'
我還沒有在試圖找到一個語法其中+
不會造成移位減少衝突的任何成功。我希望有一種方法來製作這種語法LALR,我真的很感謝一些幫助,試圖找到它。
是的,從實際的角度來看,我已經在考慮使用'。'或空字符串。但是我很好奇,如果語法中的某些內容可以被修改以允許使用LALR解析器進行解析。這個解決方案非常好,但我仍然很好奇;像JavaScript這樣的語言使用類似的字符串連接限制自己使用類似的LALR語法或他們使用別的東西嗎?謝謝你的幫助! – Rikonator
@Rikonator:Javascript(據我所知,所有其他使用'+ +進行連接的語言)都使用與'+'相同的優先級,無論類型如何。因此,'「a」+ 2 + 2 +「b」'將評估爲「a22b」而不是「a4b」。特定的實現可以使用或不使用LALR(1)解析器,但是這樣的解析器相對容易構建。正如我所說的,試圖讓相同的操作符有兩個不同的綁定優先級,這很困難,而且可能是不明智的。 'awk'風格級聯(無操作符)可能也是不明智的。請參閱http://comments.gmane.org/gmane.comp.gnu.utils.bugs/17162。 – rici
我明白了。謝謝你解釋得這麼好! – Rikonator