什么S / L / L代表在YYSTYPE / YYLTYPE /的yylval / yylloc?

问题描述 投票:0回答:1

在柔性/野牛,有两种数据类型和对应的静态变量:

  • YYSTYPE /的yylval
  • YYLTYPE / yylloc

我想知道S/L/l代表什么?

我的猜测是:

  • S代表symbol(即,符号的语义数据类型)
  • L代表location,和
  • l代表“词法分析器”(意为一个变量与词法分析器共享)。
bison flex-lexer
1个回答
1
投票

形式的问题,“为什么是拼X这个历史的名字吗?”几乎都是无法回答的,因为它是很难回到过去30年或更长时间找到谁首先想到了变量名,并要求他们什么,他们在想什么。即使他们还活着,他们现在可能不记得他们原以为链。

这可能是合理的问一个相关的问题,“什么记忆装置,我可以用它来保持这些奇怪的名字,直在我的头上?”当然,这样的问题必然是文化特有的,因为为第一语言是英语的好记忆装置不一定很好的人的第一语言是希腊语,例如。然而,留下一旁,这里是我的想法(有一些小的历史笔记):

  • 从一开始yylval一直在Yacc的,据我所知。最初,它与其他外部可见的变量配对,yyvalyylval是语义值“返回”词法扫描仪,yyval是由产生式规则的语义动作产生的语义值(即,什么$$翻译成)。因此,yylval是超前记号的(语义值),我敢肯定这就是第一l从何而来。即使它不是历史意义,这是一个合理的记忆。 (遗憾的是,词法型先行符号是yychar而非yyltype,所以记忆是不完美的。)
  • 我一直建议YYSTYPE的意思是“语义类型”的思想,因为野牛手册是指由“语义动作”产生的“语义值”。我觉得用形容词“语义”这里也是其它文学常见。这有可能是S的起源来自“堆栈”(如“值堆的类型”),但因为解析器有几个栈,这不是一个非常有用的记忆。
  • 野牛加入位置信息来解析模型,这意味着有要与用于从词法扫描器给解析器传递位置信息的另一数据类型另一个全局变量需要。它似乎很清楚,YYLTYPE yylloc;通过与yylval类比产生的,确实是野牛生成的解析器里面有一个局部变量叫yyloc起着类似于yyval的作用。因此,在LYYLTYPE绝对可以被认为是意为“位置类型”,而在l第一yylloc类似于l第一yylval,表明超前记号的位置。
© www.soinside.com 2019 - 2024. All rights reserved.