Страница 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 элементов могут вызвать проблемы, некогда в этом разбираться. Поэтому пришлось подобрать похожие значки с небольшими числовыми кодами.
Думается, что такое добавление довольно тривиально.
Предлагаю обсуждать.