protected PseudoExpression expression() throws ParserException {
        
        List<Item> items = new ArrayList<Item>();
        StringBuilder sb = new StringBuilder();
        int initialPos = pos;
        
        if (current == '\'' || current == '"') {
        	//string
        	Character quote = current;
            StringValue s = string();
            sb.append(quote);
            sb.append(s.getContext().toString());
            sb.append(quote);
            items.add(new Item(Type.STRING, s.getActualValue()));
            
            return new PseudoExpression(items, null, s.getActualValue(), new Context(content, sb.toString(), initialPos, pos));
        } else {
        	
        	while (!end()) {
	            if (current == '+') {
	                items.add(new Item(Type.SIGNAL, "+"));
	                sb.append(current);
	                next();
	            } else if (current == '-') {
	                items.add(new Item(Type.SIGNAL, "-"));
	                sb.append(current);
	                next();
	            } else if (Character.isLetter(current)) {
	                //identifier
	                String ident = simpleIdentifier();
	                sb.append(ident);
	                items.add(new Item(Type.IDENTIFIER, ident));
	            } else if (Character.isDigit(current)) {
	                //number or dimension
	                String number = number();
	                sb.append(number);
	                items.add(new Item(Type.NUMBER, number));
	            } else {
	                break;
	            }
	            ignoreWhitespaces();
	        }
        	
        }
        return new PseudoExpression(items, PseudoExpressionEvaluator.evaluate(items), sb.toString(), new Context(content, sb.toString(), initialPos, pos));
        
    }