我不知道这个语法定义在说什么。
我正在查看此处提供的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'的语法定义。也许有人可以解释它真正涵盖的内容?我最困惑的是所有转义字符,以及语法中实际引用的内容。