SQL语法定义,令人困惑的符号

时间:2019-01-14 20:05:02

标签: python yacc ply

我不知道这个语法定义在说什么。

我正在查看此处提供的BNF for SQL语法:https://docs.jboss.org/author/display/TEIID/BNF+for+SQL+Grammar

我在这里不了解“ quoted_id”的语法:

quoted_id = <id_part> | "\"" ("\"\"" | ~["\""])+ "\""

我想出了一个'id_part'的(看似)可行的实现,它通过了十几个测试用例:

# id_part = ("@" | "#" | <letter>) (<letter> | "_" | <digit>)*
def p_id_part(p):
    """
    id_part : AT
            | POUND
            | LETTER
            | AT id_end
            | POUND id_end
            | LETTER id_end
    """
    if len(p) == 3:
        p[0] = p[2]
    else:
        p[0] = p[1]


def p_id_end(p):
    """
    id_end : LETTER id_end
           | USCORE id_end
           | DIGIT id_end
           | empty
    """
    if len(p) == 3:
        p[0] = p[2]
    else:
        p[0] = p[1]

我拥有所需的所有标记,但是我似乎无法理解'quoted_id'的语法定义。也许有人可以解释它真正涵盖的内容?我最困惑的是所有转义字符,以及语法中实际引用的内容。

0 个答案:

没有答案
相关问题