该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
package lab2.lang;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* The ExpressionFactory
class represents the factory that
* generates expressions.
*
* @author group7
*
*/
public class ExpressionFactory {
private HashMap ops = new HashMap();
private Pattern opPattern = null;
/**
* Set an operator in the rule.
*
* @param op The operator. It cannot be null or empty.
* @param level The priority of the operator. Bigger number represents
* higher priority.
*/
public void setOp(String op, int level) {
if (op == null) {
throw new NullPointerException();
}
op = op.trim();
if (op.length() == 0) {
throw new IllegalArgumentException();
}
ops.put(op, level);
}
/**
* Initialize the instance. Must be called before using the instance.
*/
public void init() {
StringBuffer sb = new StringBuffer();
for (String s : ops.keySet()) {
sb.append(Pattern.quote(s));
sb.append("|");
}
sb.append("\\(|\\)");
opPattern = Pattern.compile(sb.toString());
}
/**
* Build an expression from the string.
*
* @param expression The expression string.
* @return The expression.
* @throws IllegalArgumentException If this expression string is invalid.
*/
public Expression build(String expression) {
if (expression == null) {
throw new NullPointerException();
}
expression = expression.trim();
if (expression.length() == 0) {
throw new IllegalArgumentException("empty expression");
}
Stack opStack = new Stack();
List outputStr = new ArrayList();
List outputOp = new ArrayList();
int start = 0;
Matcher m = opPattern.matcher(expression);