Вопросы формы "почему это историческое имя написано Х?"почти всегда безответственны, так как трудно вернуться на 30 или более лет назад, чтобы найти того, кто впервые придумал имя переменной, и спросить их, о чем они думают.Даже если они еще живы, они, возможно, не помнят свою первоначальную цепочку мыслей.
Возможно, было бы разумно задать связанный вопрос: «Какое мнемоническое устройство я могу использовать, чтобы держать эти странные имена прямо в моей голове?»?»Конечно, такой вопрос обязательно будет зависеть от культуры, поскольку хорошее мнемоническое устройство для носителя английского языка не обязательно подходит для человека, чей родной язык, например, греческий.Однако, оставляя это в стороне, вот мои мысли (с некоторыми небольшими историческими заметками):
yylval
был в Якке с самого начала, насколько я знаю.Первоначально он был связан с другой внешне видимой переменной: yyval
: yylval
было семантическим значением, «возвращаемым» лексическим сканером, а yyval
было семантическим значением, сгенерированным семантическим действием производственного правила (то естьчто $$
переведено на).Таким образом, yylval
является (семантическим значением) токена предпросмотра, и я почти уверен, что именно отсюда и получен первый l
.Даже если это не исторический смысл, это разумная мнемоника.(К сожалению, лексический тип символа предпросмотра - yychar
, а не yyltype
, поэтому мнемоника не идеальна.)
Я всегда рекомендовал думать о YYSTYPE
в значении « S emantic TYPE », поскольку в руководстве по бизонам упоминаются «семантические значения», создаваемые «семантическими действиями».Я думаю, что использование прилагательного "семантический" здесь также распространено в другой литературе.Возможно, что источник S
произошел от «стека» (как в «типе стека значений»), но, поскольку у синтаксического анализатора есть несколько стеков, это не очень полезная мнемоника.
Bison добавил информацию о местоположении в модель синтаксического анализа, что означало, что должна существовать еще одна глобальная переменная с другим типом данных, используемым для передачи информации о местоположении от лексического сканера в анализатор.Кажется довольно ясным, что YYLTYPE yylloc;
был произведен по аналогии с yylval
, и действительно внутри парсера, созданного зубрами, есть локальная переменная с именем yyloc
, которая играет роль, аналогичную yyval
.Таким образом, L
в YYLTYPE
определенно можно понимать как означающее « L ocation TYPE », в то время как первое l
в yylloc
похоже на первое l
в yylval
, что указывает loc действие l токена ookahead.