jflex等scanner/lexer中yy的意义

Significance of yy in scanner/lexer such as jflex

词法分析器中前缀 yy 的意义是什么?

我看到methods/fields如yylineyycolumnyytext、e.t.c

在词法分析器的世界中,前缀 yy 是否具有某些历史意义?

PS:我对编译器完全陌生

yy 前缀命名约定实际上来自解析器生成器 Yacc。 Lex 最初是为使用 Yacc 构建的解析器进行词法分析而编写的,因此它为生成的扫描器选择了名称 yylex,因为这是 Yacc 期望扫描器被调用的名称。

为了简化代码生成,Yacc 和 Lex 都使用全局变量来传达大部分信息,包括词素的语义值及其物理位置。再次,动力来自 Yacc,它期望在全局变量 yylval 中找到每个标记的语义值(你可以认为它的意思是 yy-lexeme-value)。

从那里开始,只要求扫描器和解析器生成器的用户避免 所有 名称以 yy 开头的带有外部链接的符号,将它们留给生成的代码。这并没有被看作是一个很大的限制,因为程序员使用名称以 yy 开头的变量是非常不常见的。即使是现在,这似乎也不太可能——我不记得曾经在 SO 上看到过与名称以 yy 开头的变量相关的问题与 Lex/Yacc 生成的代码中的内部变量冲突。

除了作为不寻常的名称前缀外,yy 还意在与“Yacc”中的“y”相关。碰巧的是,Yacc so-named 是“Yet Another Compiler Compiler”的首字母缩写词,这是一个 self-deprecating 和讽刺的评论,基于 1970 年代早期构建自动解析器生成器的尝试次数。由于各种原因,Yacc 在这个竞争激烈的领域中脱颖而出,因此它的接口决策,无论好坏,都成为了未来产品的一种非正式标准。