2016-08-04 57 views
0

我對解析器有個疑問,無論何時用戶輸入像(a+b*c(d-e)這樣的表達式,他忘記輸入另一個右大括號,並且程序應該給出像It's a wrong Expression這樣的錯誤。請幫助我做這個程序,我不知道如何開始。如何從數學方程中解析令牌?

+0

解析輸入,只要開口「(」被發現,如果將其推到棧中彈出堆棧。「)」。輸入令牌全部處理後,檢查堆棧是否爲空。如果空輸入正確,否則表達錯誤。確切地說, – JavaHopper

回答

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