我對解析器有個疑問,無論何時用戶輸入像(a+b*c(d-e)
這樣的表達式,他忘記輸入另一個右大括號,並且程序應該給出像It's a wrong Expression
這樣的錯誤。請幫助我做這個程序,我不知道如何開始。如何從數學方程中解析令牌?
0
A
回答
0
使用stack
數據結構來驗證括號匹配。
如果字符是'(','{','['
推字符到堆棧如果字符分別是')','}',']'
用於匹配打開托架然後彈出。繼續操作直到堆棧清空。
代碼:遇到
import java.util.*;
class ParenthesisMatching
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
Stack<Integer> stk = new Stack<Integer>();
System.out.println("Enter expression");
String exp = scan.next();
if(isValid(exp))
System.out.println("matched");
else System.out.println("unmatched");
}
public static boolean isValid(String s) {
HashMap<Character, Character> map = new HashMap<Character, Character>();
map.put('(', ')');
map.put('[', ']');
map.put('{', '}');
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
char curr = s.charAt(i);
if (map.keySet().contains(curr)) {
stack.push(curr);
} else if (map.values().contains(curr)) {
if (!stack.empty() && map.get(stack.peek()) == curr) {
stack.pop();
} else {
return false;
}
}
}
return stack.empty();
}
}
+0
!這是一個palenthesis匹配問題 – JavaHopper
+0
是否有任何代碼,並使我的程序運行.. – Akon
+0
如果找到沒有第二個操作數的「+」會怎麼樣?或者這不是問題的一部分? – TsundereBug
相關問題
- 1. 數學解析器 - 令牌結構
- 2. 數學解析器/詞法分析器 - 令牌接口設計
- 3. 解析Java中的數學方程
- 4. 在Beanshell中解析令牌
- 5. java中的令牌解析
- 6. 化學方程式解析
- 7. 如何解析從科學記數法
- 8. saml令牌解析器無法解析令牌引用
- 9. 如何從C中的字符串解析令牌?
- 10. 解析計算令牌
- 11. 無效令牌解析
- 12. 解析LocalDate hashMap令牌
- 13. 解析EOF令牌CUP
- 14. 如何從解析安裝檢索設備令牌
- 15. 如何從Perl中的用戶輸入解析數學函數?
- 16. 檸檬分析器解析0令牌
- 17. ANTLR中的Mediawiki解析:處理'令牌
- 18. 在Java中解析ADFS令牌
- 19. 在Python中解析令牌列表
- 20. C++/CLI中的未解析令牌
- 21. 如何從C++中的字符串解析數學公式
- 22. 如何解密SAML令牌
- 23. 在Java中的CSV解析:我如何分割這個令牌?
- 24. JMeter是不正確解析令牌變量吉拉令牌
- 25. Laravel - JWT Auth無法從請求中解析令牌
- 26. 從Scala解析器組合器中過濾令牌
- 27. 斯卡拉:解析匹配令牌
- 28. 簡單的Antlr3令牌解析
- 29. 的Drupal:令牌解析問題
- 30. ESLint:解析錯誤:意外的令牌':'
解析輸入,只要開口「(」被發現,如果將其推到棧中彈出堆棧。「)」。輸入令牌全部處理後,檢查堆棧是否爲空。如果空輸入正確,否則表達錯誤。確切地說, – JavaHopper