Variables can be treated as numbers or strings if their type can be inferred -
    however, that can be difficult, so instead, we can just treat them all as values
    and be a bit looser on the typing we allow in our grammar. Here we just remove
    all references to number and string from the grammar, replacing them with value.

def update_grammar_with_untyped_entities(grammar_dictionary: Dict[str, List[str]]) -> None:
    """
    Variables can be treated as numbers or strings if their type can be inferred -
    however, that can be difficult, so instead, we can just treat them all as values
    and be a bit looser on the typing we allow in our grammar. Here we just remove
    all references to number and string from the grammar, replacing them with value.
    """
    grammar_dictionary["string_set_vals"] = ['(value ws "," ws string_set_vals)', 'value']
    grammar_dictionary["value"].remove('string')
    grammar_dictionary["value"].remove('number')
    grammar_dictionary["limit"] = ['("LIMIT" ws "1")', '("LIMIT" ws value)']
    grammar_dictionary["expr"][1] = '(value wsp "LIKE" wsp value)'
    del grammar_dictionary["string"]
    del grammar_dictionary["number"]