Страница 1 из 1

Имена с пробелами и знаками препинания и name mangling

Добавлено: 18.04.21 14:55
БудДен
Хочется попробовать внедрить с минимальными трудозатратами имена с пробелами и знаками препинания. Вижу только такой вариант:
  • имена задаются в кавычках-ёлочках - „Посещается Маша“
  • внутри имени допустимы подчёркивание, пробел и запятая
  • на этапе лекс. разбора имена, содержащие пробел и запятую, преобразуются в соответствующие АО по следующим правилам:
    • подчёркивание превращается в _ч
    • пробел превращается в _п
    • запятая превращается в _з
Здесь я немного зашёл в тупик, т.к. нужно, чтобы имена просто с подчёркиваниями не сломались. Возможно, нужно отдельно обрабатывать имена с кириллицей и без.

Re: Имена с пробелами и знаками препинания и name mangling

Добавлено: 18.04.21 14:58
БудДен
В реальности нам больше всего не хватает одного значка - а именно, запятой. Пробел удовлетворительно имитируется подчёркиванием. Простейший вариант добавить запятую - это взять в юникоде знак, похожий на неё, с кодом менее 04FFH.

Re: Имена с пробелами и знаками препинания и name mangling

Добавлено: 18.04.21 16:43
БудДен
Итак, общая идея: к допустимым для идентификатора значкам добавляются следующие:

Код: Выделить всё

ˉ˛¿«»¡
И применяются они так:

Код: Выделить всё

МеханикˉВодитель (* предпочтительный вариант вместо тире и дефиса *)
Привет˛Маша (* предпочтительный вариант замены запятой *)
КтоЗдесь¿ (* препочтительный вариант замены вопросительного знака *)
Стой¡ (* замена восклицательного знака *)
Предписание«Если» (* кавычки *)
А вот отвергнутые альтернативы и варианты, с которыми можно перепутать нашу новую запятую:

Код: Выделить всё

Привет¨Маша
Привет¤Маша
ПриветjМаша
ПриветʻМаша
Привет,Маша
Привет˳Маша


Значки не идеальны, но они позволяют не расширять диапазон допустимых значков. Иногда приходится составлять массивы размером, равным максимальному значению имеющего смысл в грамматике значка юникода. Раньше он был размером в 100, после добавления кириллицы стал порядка 1000. Большинство красивых значков расположены не ниже 8000. Массивы размером в 8000 элементов могут вызвать проблемы, некогда в этом разбираться. Поэтому пришлось подобрать похожие значки с небольшими числовыми кодами.

Думается, что такое добавление довольно тривиально.

Предлагаю обсуждать.