自从历史问题被考虑为主题,我想我应该问一个困扰我很长一段时间的问题,但我认识的人似乎都不知道答案。有谁知道前缀 yy 的历史意义是什么? lex 生成的大多数变量和函数都以它开头,例如yylval
、 和yylex()
。我还记得yyrsa
在某处看到过一个名为的实用程序,但现在无法在任何地方找到它的引用。好奇心想知道!
答案1
我认为这与 yacc 有关,它的文件以 结尾.y
,并且需要一个名为 的函数yylex
。
答案2
正如其他人在这里和上指出的那样堆栈溢出y
,它可能只是实用程序名称的双重yacc
,用于生成唯一的名称空间。
POSIX 标准保留以 Bothyy
和YY
for yacc
with开头的命名空间以下段落:
名称的长度是任意的,由字母、句点 (
.
)、下划线 (_
) 和非开头数字组成。大写和小写字母是不同的。符合要求的应用程序不得使用以yy
或开头的名称,YY
因为yacc
解析器使用此类名称。许多名称出现在 的最终输出中yacc
,因此应选择它们以符合要使用的 C 编译器创建的任何附加规则。特别是它们出现在#define
声明中。
不幸的是,POSIX 文档非常不擅长将任何形式的历史与事情为何会变成现在这样联系起来。