Should this check the size of the path expression to ensure there are just a child name and a property? Also, might want to make sure that it is a relative path expression. If not, the code should throw a ParsingException with a description of what's allowed, e.g., 

    Expected either 'jcr:score(tableName)', '@<propertyName>', or '<childName>/@<propertyOnChild>' but found " + tokens.consume()