     return Precidence.negate(true).modify(rule)    
 }
 
+/**
+ Creates a new instance of the rule which skips.
+ 
+ // Creates a skipping version of of the rule
+ let skipLetters = -CharacterSet.letters.scan(.zeroOrMore)
+ 
+ - Parameter rule:The rule to apply to
+ - Returns: A new version of the rule
+ */
 public prefix func -(rule : BehaviouralRule)->BehaviouralRule{
     if rule.behaviour.cardinality == .one {
         return rule.instanceWith(behaviour: Behaviour(.skipping, cardinality: rule.behaviour.cardinality, negated: rule.behaviour.negate, lookahead: rule.behaviour.lookahead), annotations: rule.annotations)

    return Precidence.lookahead(true).modify(rule)
}

public prefix func !(rule:BehaviouralRule)->BehaviouralRule{
    if rule.behaviour.cardinality == .one {
        return rule.newBehaviour(nil, negated: true, lookahead: nil)

}

public extension Token {
    /**
     Creates a rule which will generate this token if matched
     
     - Parameter rule:The rule which must be matched in order to generate the tokekn
     - Returns: An instance of the rule
     */
    func `if`(_ rule:BehaviouralRule)->BehaviouralRule{
        if rule.behaviour.cardinality == .one {
            return rule.instanceWith(behaviour: Behaviour(.structural(token: self), cardinality: rule.behaviour.cardinality, negated: rule.behaviour.negate, lookahead: rule.behaviour.lookahead), annotations: rule.annotations)
