前缀yy在词汇中的意义是什么?
我看到方法/字段,如yyline、yycolumn、yytext、e.c。
在词汇世界中,前缀yy是否具有一定的历史意义?
PS:我对编译器完全陌生。
发布于 2020-09-23 15:26:32
yy前缀命名约定实际上来自解析器生成器Yacc。Lex最初是为使用Yacc构建的解析器进行词法分析而编写的,因此它为生成的扫描器选择了名称yylex,因为这正是Yacc所期望的扫描器将被调用的。
为了简化代码生成,Yacc和Lex都使用全局变量来传递大部分信息,包括词汇的语义值和它们的物理位置。同样,这一推动力来自于Yacc,它期望在全局变量yylval (您可以认为是yy-lexeme)中找到每个令牌的语义值。
从这里开始,只需要使用扫描仪和解析器生成器的用户就可以方便地避免所有具有外部链接的符号,这些符号的名称启动了yy,将它们留给生成的代码处理。这并不是什么限制,因为对于程序员来说,使用名为yy的变量是非常罕见的。即使现在,似乎也不太可能--我从来没有见过这样一个问题,它涉及到一个名为yy的变量与Lex/Yacc生成的代码中的一个内部变量相冲突。
除了作为一个不寻常的名称前缀,yy意在与"Yacc“中的"y”相关。恰巧,Yacc被命名为“又一个编译器编译器”的首字母缩写,这是一篇自嘲和讽刺的评论,基于上世纪70年代初试图构建自动解析器生成器的次数。由于种种原因,Yacc在这个拥挤的领域中脱颖而出,因此它的界面决定,无论好坏,成为未来产品的一种非正式标准。
https://stackoverflow.com/questions/64025360
复制相似问题