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