问题描述
在词法分析器中,前缀<http://w3.org/ns/temp#pdp>
<http://w3.org/ns/temp#hasLegalBasis>
<http://w3.org/ns/temp#c> ;
<http://w3.org/ns/temp#isLawful>
true .
的含义是什么?
我看到诸如yy
,yyline
,yycolumn
等e / t.c的方法/字段
在词法分析器领域中,前缀yytext
有历史意义吗?
PS:我是编译器的新手
解决方法
yy
前缀命名约定实际上来自解析器生成器Yacc。最初是为对使用Yacc构建的解析器进行词法分析而编写的Lex,因此为生成的扫描程序选择了名称yylex
,因为这正是Yacc希望调用该扫描程序的原因。
为简化代码生成,Yacc和Lex都使用全局变量来传达大多数信息,包括词素的语义值及其物理位置。同样,推动力来自Yacc,它希望在全局变量yylval
中找到每个标记的语义值(您可以将其视为yy
-lexeme-value)。
从那里开始,仅要求扫描仪和解析器生成器的用户避免使用名称以yy
开头的具有外部链接的所有符号,将它们保留下来即可。并没有太大的限制,因为对于程序员来说,使用以yy
开头的变量并不常见。即使到了现在,这似乎也不大可能-我不记得曾经有一个关于SO的问题,该问题与以yy
开头的名称与Lex / Yacc生成的代码中的内部变量冲突。
yy
除了是不寻常的名称前缀外,还旨在与“ Yacc”中的“ y”相关。碰巧的是,Yacc的名字是“ Yet Another Compiler Compiler”的缩写,这是一个自嘲和讽刺的评论,它是基于1970年代初期尝试构建自动解析器生成器的次数而得出的。由于种种原因,Yacc在这个拥挤的领域中脱颖而出,因此,无论是好是坏,其接口决策都成为未来产品的非正式标准。