public CommandExecutionResult execute(UmlDiagram diagram, List<String> lines) {
		final Context context = new Context();
		final Matcher mStart = getStartingPattern().matcher(lines.get(0).trim());
		if (mStart.find() == false) {
			throw new IllegalStateException();
		}
		if (mStart.group(1) != null) {
			context.push(mStart.group(1));
		}

		lines = new ArrayList<String>(lines.subList(1, lines.size() - 1));
		StringUtils.trim(lines, true);

		for (String s : lines) {
			assert s.length() > 0;
			if (s.equals("}")) {
				context.pop();
				continue;
			}
			final Matcher m = p1.matcher(s);
			if (m.find() == false) {
				throw new IllegalStateException();
			}
			if (m.group(2) != null) {
				context.push(m.group(1));
			} else if (m.group(3) != null) {
				final String key = context.getFullParam() + m.group(1);
				diagram.setParam(key, m.group(3));
			} else {
				throw new IllegalStateException();
			}
		}

		return CommandExecutionResult.ok();
	}