ВежливыйЛис написал(а):Неразрывный пробел не взлетит.
Можно определить «неразрывный пробел» как обычный пробел между словами одного названия, точно также можно задать разделитель разрядов для числа:
Название = Слово (Пробелы Слово)* .
Число = Цифры (РазделительРазряда Цифры)* .
Основная задача заключается в другом: описать грамматику, с помощью которой можно будет однозначно отобрать отдельные названия, чтобы этим не пришлось заниматься на этапе семантического анализа. В ряде существующих языков программирования это условие соблюдается, в них два названия всегда разделяются каким-либо знаком операции. В других языках названия могут следовать одно за другим, и для них введение «неразрывного пробела» может привести к неоднозначности разбора. Например, разрешив использовать для нетерминальных символов названия с пробелами, возникает ситуация, когда без дополнительных действий непонятно, сколько слов входит в каждое название:
Число = Цифры (Разделитель разряда Цифры)* .
Для устранения неоднозначности разбора применяются различные разделительные и объединительные конструкции. Например, в качестве разделительного знака используется запятая:
Число = Цифры (Разделитель разряда, Цифры)* .
Но использовать дополнительные знаки необязательно, вместо них могут использоваться особые соглашения для написания названий. Например, можно ввести соглашение, что первое слово названия всегда начинается с прописной буквы, а все последующие буквы в словах являются строчными, но такое соглашение не позволит употреблять в названиях имена собственные или аббревиатуры, которые по правилам русского языка также пишутся с применением прописных букв.
Число = Цифры (Разделитель разряда Цифры)* .
Число = Цифры (Разделитель Алексея Цифры)* .
Число = Цифры (Разделитель согласно ГОСТу Цифры)* .
В случае нежелания вводить дополнительные знаки и невозможности описать однозначную грамматику, придётся выбирать всю последовательность слов, из которых затем на этапе семантического анализа отбирать названия. Но и такой подход может столкнуться с трудностями, когда используются названия, которые ещё не определены или будут определены позже, или когда разные названия содержат одинаковые слова, которые препятствуют однозначному отбору.
Так что дело не в пробелах, дело в их грамотном применении.