================
Simple reference
================

rule one {
    condition:
        true
}

rule two {
    condition:
        one
}

---

(yara_file
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (bool_literal)    
        )
    ) 
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (identifier)
        )
    )   
)


================================
References in boolean expression
================================

rule one {
    condition:
        true
}

rule abc {
    condition:
        true
}

rule two {
    condition:
        one or abc
}

---

(yara_file
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (bool_literal)    
        )
    ) 
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (bool_literal)    
        )
    ) 
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (or
                (identifier)  
                (identifier)  
            )
        )
    )   
)


===========
Rule set #1
===========

rule one1 {
    condition:
        true
}

rule one2 {
    condition:
        true
}

rule two {
    condition:
        all of (one1, one2)
}

---

(yara_file
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (bool_literal)    
        )
    ) 
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (bool_literal)    
        )
    )
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (of
                (all)
                (rule_set
                    (identifier)
                    (identifier)    
                )
            )
        )
    )   
)


======================
Rule set #2 (wildcard)
======================

rule one1 {
    condition:
        true
}

rule one2 {
    condition:
        true
}

rule two {
    condition:
        all of (one*)
}

---

(yara_file
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (bool_literal)    
        )
    ) 
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (bool_literal)    
        )
    )
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (of
                (all)
                (rule_set
                    (rule_wildcard
                        (identifier)    
                    )  
                )
            )
        )
    )   
)


================================
Rule set #3 (percent quantifier)
================================

rule one1 {
    condition:
        true
}

rule one2 {
    condition:
        true
}

rule one3 {
    condition:
        false
}

rule two {
    condition:
        50% of (one1, one2, one3)
}

---

(yara_file
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (bool_literal)    
        )
    ) 
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (bool_literal)    
        )
    )
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (bool_literal)    
        )
    )
    (rule
        (rule_head
            (identifier)    
        )    
        (rule_body
            (of
                (percent_quantifier
                    (uint_literal
                        (dec_uint_literal_value)
                    )
                )
                (rule_set
                    (identifier)
                    (identifier)
                    (identifier)
                )
            )
        )
    )   
)
