Определение грамматики SQL, запутанная запись - PullRequest
0 голосов
/ 14 января 2019

Я не могу понять, что говорит это определение грамматики.

Я просматриваю BNF для грамматики 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". Может быть, кто-то может объяснить, что это на самом деле охватывает? Что меня больше всего смущает, так это все экранированные символы и какие цитаты на самом деле есть в грамматике.

...