我正在阅读SQLite的grammar,并对以下段落有一些疑问。
// The name of a column or table can be any of the following:
//
%type nm {Token}
nm(A) ::= id(A).
nm(A) ::= STRING(A).
nm(A) ::= JOIN_KW(A).
nm
已在程序中广泛使用。 lemon parser文档说通常,非终端的数据类型是指向根目录的指针
解析树结构,其中包含有关该树的所有信息
非终端
%type expr {Expr*}
我是否应该理解
{Token}
实际上代表一个语法分组,它是一个非终结符,“是包含所有内容的解析树结构。”?nm在这方面的简称是“名称”吗?
每个nm(A)声明结尾处的句号(点
.
)是什么?
最佳答案
不,您应该了解Token
是用于nm
s语义值的C对象类型。
(它在sqliteInt.h
中定义,由指向非空终止字符数组的指针和该数组的长度组成。)nm
定义上方的注释以“名称”开头,这无疑向我暗示nm
是“名称”的缩写,是的。如上所述,这也与它的语义类型一致,该语义类型基本上是一个名称(或至少一个字符串)。
所有柠檬生产都以点结尾。它告诉柠檬生产的结尾在哪里,就像分号指示C编译器语句的结尾在哪里。这使得解析连续的作品更加容易,因为否则解析器将不得不向前看几个符号才能看到::=
关于sqlite - SQLite源代码parse.y-nm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42917328/