Кто-нибудь знает значение yy?

10

Так как исторические вопросы рассматриваются по теме , я решил задать один вопрос, который беспокоил меня в течение достаточно долгого времени, и никто из моих знакомых, кажется, не знает ответа. Кто-нибудь знает, какое историческое значение имеет префикс yy? Большинство переменных и функций, сгенерированных lex, начинаются с него, таких как yylval, и yylex(). Я также помню, что видел утилиту, названную yyrsaгде-то, но сейчас не могу найти ссылки на нее. Пытливые умы хотят знать!

Тимоти
источник
5
и я подумал, что это был
важный

Ответы:

10

Я думаю, что это как-то связано с yacc, который имеет файлы, оканчивающиеся на .y, и требует вызываемой функции yylex.


источник
6
Этот вопрос, кажется, согласен
Майкл Мрозек
6
Цитируя ответ @ peterb в сообщении SO, связанном с Майклом, «нет никакого очевидного смысла, который обсуждается, кроме простого выбора пространства имен.« Yy »в lex.yy.c указывает, что вывод lex предназначен для парсера yacc». Спасибо ребята!
Тимоти
2

Как уже отмечали другие здесь и в StackOverflow , это может быть просто удвоение yимени yaccутилиты, используемой для генерации уникального пространства имен.

Стандартные запасы POSIX пространств имен , начиная с как yyи YYдля yaccсо следующим пунктом :

Имена имеют произвольную длину, состоящую из букв, period ( .), подчеркиваний ( _) и не начальных цифр. Прописные и строчные буквы различны. Соответствующие приложения не должны использовать имена, начинающиеся с yyили, YYтак как yaccсинтаксический анализатор использует такие имена . Многие из имен появляются в конечном выводе yacc, и поэтому их следует выбирать так, чтобы они соответствовали любым дополнительным правилам, созданным компилятором C, который будет использоваться. В частности они появляются в #defineзаявлениях.

К сожалению, документы POSIX очень плохо связывают любую форму истории с тем, почему вещи стали такими, какими они являются в настоящее время.

Кусалананда
источник