示例#1
0
 private Object parseRecursive(StringTokenizer st) {
   List<Object> currentSequence = new ArrayList<>();
   Object lastParsed = null;
   while (st.hasMoreElements()) {
     String s = st.nextToken();
     switch (s) {
       case " ": // split on blanks
         currentSequence.add(lastParsed);
         break;
       case "?":
         lastParsed = grammar.zeroOrOne(lastParsed);
         break;
       case "*":
         lastParsed = grammar.zeroOrMore(lastParsed);
         break;
       case "(":
         lastParsed = parseRecursive(st);
         break;
       case ")": // current group finished
         return finish(currentSequence, lastParsed);
       case "'":
         lastParsed = Token.getFromDescription(st.nextToken("'"));
         st.nextToken("'?*() "); // '
         break;
       default:
         lastParsed = s; // rule name
         break;
     }
   }
   return finish(currentSequence, lastParsed);
 }