SQLite 源代码 parse.y - nm
SQLite source code parse.y - nm
我正在阅读 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 文档说
Typically the data type of a non-terminal is a pointer to the root of
a parse-tree structure that contains all information about that
non-terminal
%type expr {Expr*}
我应该理解{Token}
实际上代表一个句法分组,它是"is a parse-tree structure that contains all.."的非终结符吗?
这里面的nm是什么的缩写,是不是就是"name"?
每个 nm(A) 声明结束的句号(点 .
)是什么?
- 不是,你应该明白
Token
是一个C对象类型,用于nm
的语义值。
(它在 sqliteInt.h
中定义,由指向非空终止字符数组的指针和该数组的长度组成。)
nm
定义上方的注释以 "the name" 开头,这对我来说肯定表明 nm
是 [=29 的缩写=], 是的。那也符合它的语义类型,如上,基本就是一个名字(或者至少是一串字符)
所有柠檬作品都以点结尾。它告诉 lemon 产生式的结束位置,就像分号向 C 编译器指示语句结束的位置一样。这使得解析连续产生式变得更容易,否则解析器将不得不提前查看几个符号才能看到 ::=
我正在阅读 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 文档说
Typically the data type of a non-terminal is a pointer to the root of a parse-tree structure that contains all information about that non-terminal
%type expr {Expr*}
我应该理解
{Token}
实际上代表一个句法分组,它是"is a parse-tree structure that contains all.."的非终结符吗?这里面的nm是什么的缩写,是不是就是"name"?
每个 nm(A) 声明结束的句号(点
.
)是什么?
- 不是,你应该明白
Token
是一个C对象类型,用于nm
的语义值。 (它在sqliteInt.h
中定义,由指向非空终止字符数组的指针和该数组的长度组成。) nm
定义上方的注释以 "the name" 开头,这对我来说肯定表明nm
是 [=29 的缩写=], 是的。那也符合它的语义类型,如上,基本就是一个名字(或者至少是一串字符)所有柠檬作品都以点结尾。它告诉 lemon 产生式的结束位置,就像分号向 C 编译器指示语句结束的位置一样。这使得解析连续产生式变得更容易,否则解析器将不得不提前查看几个符号才能看到
::=