jflex等scanner/lexer中yy的意义
Significance of yy in scanner/lexer such as jflex
词法分析器中前缀 yy
的意义是什么?
我看到methods/fields如yyline
、yycolumn
、yytext
、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 在这个竞争激烈的领域中脱颖而出,因此它的接口决策,无论好坏,都成为了未来产品的一种非正式标准。
词法分析器中前缀 yy
的意义是什么?
我看到methods/fields如yyline
、yycolumn
、yytext
、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 在这个竞争激烈的领域中脱颖而出,因此它的接口决策,无论好坏,都成为了未来产品的一种非正式标准。