Что означает S / L / l в YYSTYPE / YYLTYPE / yylval / yylloc? - PullRequest
0 голосов
/ 07 февраля 2019

В flex / bison есть два типа данных и соответствующие статические переменные:

  • ГГ S ТИП / гг l val
  • ГГ Л ТИП / ГГ Л ЛОК

Мне интересно, что стоит S/L/l?

Я предполагаю:

  • S обозначает symbol (т. Е. Семантические типы символов)
  • L обозначает location, а
  • l обозначаетдля 'лексера' (имеется в виду переменная, которая будет использоваться совместно с лексером).

1 Ответ

0 голосов
/ 07 февраля 2019

Вопросы формы "почему это историческое имя написано Х?"почти всегда безответственны, так как трудно вернуться на 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.

...