public ParseTreeNode rexp2() throws SyntaxError {
		ParseTreeNode node = new ParseTreeNode("<rexp2>");
		if (accept('(')) {
			node.addChild(String.valueOf('('));
			node.addChild(rexp());
			if (accept(')')) {
				node.addChild(")");
			}
			node.addChild(rexp2Tail());
			return node;
		} else if (isReChar()) {
			// accept(symbol);
			node.addChild(String.valueOf(symbol));
			accept(symbol);
			node.addChild(rexp2Tail());
			return node;
		} else if (symbol == '.' || symbol == '[' || isDefinedClass()) {
			node.addChild(rexp3());
			return node;
		} else {
			throw new SyntaxError("Invalid rexp3");
		}
	}