除了Dijkstra分流碼算法將中綴轉換爲RPN之外,有沒有其他方法?我試圖通過將其與另一種轉換方法進行比較來研究分流碼算法的弱點和優點。任何鏈接到分流碼算法的日記非常感謝。謝謝將中綴轉換爲Reverse Polish Notation(Postfix)的方法
0
A
回答
1
當然有,LR解析,解析器組合器,可能很多其他kinds of parsers。
1
在現實生活中,我總是遞歸地解析表達式。
在Python中,基本的算法是這樣的:
import re
import sys
def toRpn(infixStr):
# divide string into tokens, and reverse so I can get them in order with pop()
tokens = re.split(r' *([\+\-\*\^/]) *', infixStr)
tokens = [t for t in reversed(tokens) if t!='']
precs = {'+':0 , '-':0, '/':1, '*':1, '^':2}
#convert infix expression tokens to RPN, processing only
#operators above a given precedence
def toRpn2(tokens, minprec):
rpn = tokens.pop()
while len(tokens)>0:
prec = precs[tokens[-1]]
if prec<minprec:
break
op=tokens.pop()
# get the argument on the operator's right
# this will go to the end, or stop at an operator
# with precedence <= prec
arg2 = toRpn2(tokens,prec+1)
rpn += " " + arg2 + " " +op
return rpn
return toRpn2(tokens,0)
print toRpn("5+3*4^2+1")
#prints: 5 3 4 2^* + 1 +
這種形式很容易適應處理該關聯從右到左,如賦值運算符括號,一元運算符,和運營商。
請注意,上述代碼不能正確處理語法錯誤。
相關問題
- 1. RPN(Reverse Polish Notation)或Postfix Notation可以通過正則表達式得出
- 2. C++將Postfix轉換爲中綴
- 3. 中綴到Postfix轉換
- 4. 將中綴轉換爲後綴,然後解決方程
- 5. 將中綴轉換爲Postfix時掃描多位數字
- 6. 將中綴轉換爲PostFix括號問題
- 7. 將中綴轉換爲profix
- 8. 中綴到Postfix轉換錯誤
- 9. 將前綴轉換爲後
- 10. 將Postfix表達式轉換爲中綴並計算後綴並給出答案
- 11. 將中綴轉換爲python中的前綴
- 12. 中綴後綴轉換器
- 13. 將中綴表達式轉換爲後綴表達式
- 14. 將Infix轉換爲Postfix並評估Postfix表示法
- 15. 將中綴轉換爲後綴:無法識別堆棧錯誤
- 16. 如何將前綴轉換爲中綴
- 17. 如何將j2me中的應用程序轉換爲j2me-polish?
- 18. 使用堆棧將前綴轉換爲後綴
- 19. 將中綴表示法轉換爲後綴表示法
- 20. Postfix中綴
- 21. 中綴後綴轉換程序(java)
- 22. 中綴到Postfix轉換括號中的錯誤
- 23. 如何將方法調用轉換爲後綴表示法?
- 24. 如何將中綴轉換爲多位數操作數的後綴表達式?
- 25. 從後綴堆棧轉換到中綴
- 26. 將二進制樹的中綴轉換爲後綴
- 27. 使用Java將中綴表達式轉換爲前綴和後綴表達式
- 28. 如何將中綴表達式轉換爲後綴表達式?
- 29. 將中綴轉換爲Rpn(分流碼)
- 30. 中綴到前綴轉換方案
LL解析,各種運算符優先級解析器... – EJP