Русские вычислители

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Русские вычислители » Русский язык программирования: от слов к делу » Русификация существующих ЯП


Русификация существующих ЯП

Сообщений 1 страница 52 из 52

1

Выдумывать свой язык программирования - это весёлое занятие. Я и сам порой люблю помечтать. Но возможно и другое направление мысли: русификация уже существующих ЯП. Это даёт ряд преимуществ. В частности возможность использовать готовые библиотеки (которые, правда, тоже нужно русифицировать).
Пока я встречал только проект русификации С.
Далее я рассматриваю ряд шагов, которые может проходить программа, написанная на русифицированном ЯП от ввода исходного кода, до исполняемого файла. Буду рад, если кого-то эта тема заинтересует.

Ввод текста программы.
Для удобной работы с кириллицей необходимо создать специальный текстовой редактор. Идея состоит в том, чтобы можно было вводить всякие закорючки не переключаясь всё время на латиницу. Для этого предлагаю использовать сочетания Контрол+ и Альт+. Например, для ввода символа «<» необходимо будет нажать Контрол+«Б», а для «,» Альт+«Б». Текстовой редактор выделяет цветом служебные слова, комментарии и т. п. Кроме того полезной будет функция дописывания слова при нажатии Контрол+Пробел. Т. е. при нажатии этого сочетания клавиш, редактор собирает по всему тексту уже введённые имена, прибавляет к ним имена из библиотек, сортирует и выдаёт соответствующие началу слова варианты.

Трансляция в целевой ЯП.
Служебные слова транслируются в соответствии со словарём служебных слов. В принципе этот словарь может быть реализован в виде текстового файла с записями вроде:
if  если
else иначе
switch выбор

Тут есть некоторые тонкости. Например, в Java слово final используется в трёх ипостасях. В первом случае оно может пониматься как объявление константы. Т. е. русифицироваться как «конст». Во втором случае оно используется для предотвращения перекрытия и может быть переведено как «неперекр». И, наконец, предотвращает наследование класса и может быть переведено как «ненаслед». Хотя это под вопросом, стоит ли вводить зоопарк имён или всегда заменять final на «заверш». Всё это я к чему. В словаре может быть несколько вариантов перевода, например:
final конст
final неперекр
final ненаслед

Имена переменных транслируются в транслит. Я изучил разные системы транслитерации. Там либо используются буквы, которых нет на клавиатуре, либо используются кавычки вместо твёрдого и мягкого знака. Поэтому предлагаю следующую систему трансляции кириллицы на латиницу:

А - A
Б - B
В - V
Г - G
Д - D
Е - E
Ё – OQ
Ж - GQ
З - Z
И - I
Й - J
К - K
Л - L
М - M
Н - N
О - O
П - P
Р - R
С - S
Т - T
У - U
Ф - F
Х - X
Ц - C
Ч - CQ
Ш - H
Щ - HQ
Ь - W
Ы - Y
Ъ - WQ
Э - EQ
Ю - UQ
Я - AQ

При такой системе кодирования можно однозначно переводить кириллицу в латиницу и обратно. Вот пример текста на транслите:

Rusifikacyaq, o kotoroj tak dolgo govorili programmisty, sverhilasw!

В случае с языком программирования переведённое имя будет начинаться с «qqq», вот несколько примеров:

ДлиннаФайла - qqqDlinnaFajla
УказательЗапроса - qqqUkazatelwZaprosa
СтроковойБуфер - qqqStrokovojBufer

Имена библиотек, библиотечных классов, функций и т. д. транслируются в соответствии со словарём библиотечных объектов. Кто и как будет формировать этот словарь, под большим вопросом. Как идеальный вариант, предположим, что у нас есть некоторый сервер где в базе данных хранится весь словарь. Если кто-то захочет использовать библиотеку, которая ещё не русифицирована, он может самостоятельно её перевести и пополнить словарь. В реальности, скорее всего, будет множество словарей, созданных разными авторами. Словари можно будет хранить, и передавать вместе с исходным кодом.
Следует обратить внимание, что  при трансляции имён, словарь библиотечных объектов имеет больший приоритет по сравнению с переводом на транслит. Предположим, что нам захотелось завести целочисленную переменную с именем «длинна»:

цел длинна;

В словаре библиотечных объектов наверняка уже есть перевод этого слова:

length - длинна

поэтому вышеприведённый текст будет оттранслирован как:

int length;

а не как:

int qqqdlinna;

Компиляция после трансляции производится как обычно.
Значительную проблему представляет русификация сообщений об ошибках и предупреждений. Для некоторых реализаций ЯП достать список ошибок не так-то просто. Кроме того, разные сообщения могут иметь разный формат, поэтому русификация сообщений это довольно кропотливый труд. Да, и ещё, есть ведь ошибки времени выполнения.

0

2

Это костыли. Конечно, это быстрее, чем создавать свой собственный язык программирования. Но всё равно у русских людей есть желание иметь именно свой, русский язык программирования. К тому же, несколько таких полноценных языков уже есть. Тот же Глагол, например. Это переведённый Оберон. Юрий — участник нашего сообщества — занят разработкой своего. Другие участники тоже имеют или ведут свои разработки. Так что мало кто захочет такой язык. Если бы хотели, то уже давно сделали бы сами для себя. За себя могу сказать, что мне такой язык не нужен. Но если есть желание, то делайте. Подобрать названия для функций и постоянных кто угодно может помочь.

0

3

Обязательно займусь этим проектом, причём целевым языком будет Ява. Вот, к примеру русификация одной функции:
общдост пуст СохрТаб () {
    Строка таб = "";
    цел а, б = 0;
    цикл (а = 1; а <= счётчикНот; ++а) {
        если (ноты[а].выс < 0) {
            продолжить;
        }
        если (ноты[а].функ == 1 || ноты[а].функ == 3) {
            таб += "-";
        }
        таб += ""+(транспоз+ноты[а].поз+1);
        если (ноты[а].функ > 1) {
            таб += "\"";
        }
        таб += " ";
        если (++б == 10) {
            б = 0;
            таб += "\н";
        }
    }
    таб += "\н\н";
    цикл (а = 1; а <= счётчикНот; ++а) {
        if (ноты[а].выс < 0) {
            продолжить;
        }
        Строка номер;
        если (а < 10) {
            номер = ""+а+"  ";
        }
        иначе если (i < 100) {
            номер = ""+а+" ";
        }
        иначе {
            номер = ""+i;
        }
        симв сетка[] = {
            '|', ' ', '.', ' ', '.', ' ', '.', ' ',
            '|', ' ', '.', ' ', '.', ' ', '.', ' ',
            '|', ' ', '.', ' ', '.', ' ', '.', ' ', '|'};
        сетка[ноты[i].поз*2+1] = (
            ноты[i].функ == 0 ? '+' :
            ноты[i].функ == 1 ? '-' :
            ноты[i].функ == 2 ? '#' :
            '='
        );
        таб += номер+(созд Строка(сетка))+"\н";
    }
    текст.устТекст(таб);
}

0

4

продолжить лучше заменить на пропустить. Что значит "продолжить"? Продолжить выполнение текущего прохода? Можно ведь и так понять, т.е. неправильно. Так что лучше именно пропустить, подразумевая пропуск текущего прохода.

0

5

john_head, нам явно есть о чём поговорить. Жалко, что спать пора, а завтра на работу... Вы мой русификатор С/С++ смотрели? Строка для Яндекса: "Утилита транслитерации русского C/C++ в стандартный".

продолжить лучше заменить на пропустить

Лучше всего заново ;)

0

6

Юрий написал(а):

Лучше всего заново


Возможно.

0

7

Юрий написал(а):

нам явно есть о чём поговорить. Жалко, что спать пора, а завтра на работу... Вы мой русификатор С/С++ смотрели? Строка для Яндекса: "Утилита транслитерации русского C/C++ в стандартный".

Я обязательно посмотрю ваш русификатор.
Буду рад обсудить перспективы разработок по данной теме.

0

8

john_head написал(а):

Для удобной работы с кириллицей необходимо создать специальный текстовой редактор. Идея состоит в том, чтобы можно было вводить всякие закорючки не переключаясь всё время на латиницу. Для этого предлагаю использовать сочетания Контрол+ и Альт+. Например, для ввода символа «<» необходимо будет нажать Контрол+«Б», а для «,» Альт+«Б».

Этотъ этапъ уже реализованъ мной редактированіемъ раскладки  http://yadi.sk/d/pFcoHkki1VKxe правый Alt + сѵмволъ, а для ввода {} надо Alt + Shift + сѵмволъ... Въ общемъ нуженъ просто редакторъ работающій съ юникодомъ...

utkin295 написал(а):

john_head, я бы хотел Вас предостеречь и относиться более серьезно к переводу слов. Есть риск получить вторую 1С.

А что плохого въ 1С? Въ отличіи отъ нѣкоторыхъ 1С бурно развивается, уже подерживаетъ мультіязычность и мультиплатформеность... Кстати въ 1С какъ разъ циклъ продолжается операторомъ Продолжить, Пропустить звучитъ не плохо но ни чѣмъ ни хуже и не лучше, а вотъ Заново короче и логичнѣе  :cool:

Отредактировано Е.В.Геній (11.10.2013 06:30:52)

0

9

Это было въ семёркѣ. И кстати не Visual Basic, а Visual FoxPro если быть буквоѣдомъ... Или для Васъ всё что отличается отъ С++ это бейсикъ? Ну тогда любой ЯП можно назвать клономъ другого. На счётъ визуальныхъ средствъ въ 1С пошли собственной дорогой и даже семерка была особнячкомъ отъ всякихъ бейсиковъ и фоксовъ, а восьмерка это свой собственный и главное русскій ЯП, который къ тому же непрерывно развивается - на нёмъ уже и на планшеты можно писать приложенія.

Къ стати слюной въ сторону 1С всегда капаютъ изъ зависти, кто ещё въ нашей странѣ можетъ съ Oracle на равныхъ воевать? Остальныя нервно курятъ въ сторонкѣ - наблюдая за битвой титановъ, и занимаютъ - пока ещё занимаютъ, нишу системнаго и веб программированія, тамъ драйверокъ наваять, библіотечку сообразить, либо сайтикъ... Хотя въ вебе 1С имъ уже на пятки наступаетъ своимъ вебкліентомъ... Въ общемъ какъ только въ 1С рѣшатъ, что пора появится компилятору пусть и библіотеки въ 1С пишутъ и исполнимыя файлы, многимъ придется:
http://s5.uploads.ru/t/ropiA.jpg

0

10

john_head

Служебные слова транслируются в соответствии со словарём служебных слов

Служебные слова транслируются в соответствии со словарём служебных слов
Идея состоит в том, чтобы можно было вводить всякие закорючки не переключаясь всё время на латиницу. Для этого предлагаю использовать сочетания Контрол+ и Альт+. Например, для ввода символа «<» необходимо будет нажать Контрол+«Б», а для «,» Альт+«Б».

Об этом писал: Русский язык и программирование. У нас схожие мысли, на одной волне :)

переведённое имя будет начинаться с «qqq»

Гм... А зачем?

При такой системе кодирования можно однозначно переводить кириллицу в латиницу и обратно

А зачем обратно? Где это может пригодиться? Или

русификация сообщений об ошибках

- как для для этого?

utkin295

люди софт пишут, а не воюют с ораклом

1С уже имеет международный вес и авторитет!

0

11

Юрий написал(а):

переведённое имя будет начинаться с «qqq»Гм... А зачем?

При такой системе кодирования можно однозначно переводить кириллицу в латиницу и обратноА зачем обратно? Где это может пригодиться? Или

русификация сообщений об ошибках- как для для этого?


Да, это для того, чтобы в сообщениях об ошибках всё по-русски было. Т. е. транслятор увидит, что слово с qqq начинается, и отображает его по-русски.

0

12

utkin295
Всякие там АВАР\4 и 1С это кошмарные сны любого внедренца.

Это языки программирования ERP-систем, R/3 и 1С соответственно. Или Вы знаете хорошие ЯП для них? Я отметил факт иностранных разработок под нашу 1C, что является несомненным фактом признания роли и места отечественного продукта.

john_head
транслятор увидит, что слово с qqq начинается, и отображает его по-русски.

Можно начать приставкой "rus" ;)
А Ваши идеи привели к появлению такого русификатора? Или есть такое в планах? Мне, если честно, такой "обратный" перевод не особо нужен. Сообщения об ошибках и так понятны (лично мне, за остальных не могу сказать ;) ).

0

13

Юрий написал(а):

А Ваши идеи привели к появлению такого русификатора? Или есть такое в планах?

Если честно, идея этого проекта появилась после того, как я понял, что интерес к русскоязычному программированию существует. А это неделя-две, не больше. Сейчас я изучаю Java, JavaScript и написал несколько тренировочных приложений http://java-developer.ucoz.ru/start/ . Мне как раз нужны идеи для разработки. Русификацией Явы планирую заняться после окончания текущего проекта: программируемого калькулятора онлайн (на JavaScript). Там будет реализован простенький язык программирования. Сейчас уже работает синтаксический разбор и расстановка скобок в соответствии с приоритетом операторов.

0

14

utkin295 написал(а):

Вообще 8.2 сыровата (8.3 не смотрел). Но я именно о синтаксисе. Явный перевод надмозгом. Именно это я и хотел сказать автору темы

На счетъ сырости согласенъ, но не сырѣе другихъ ЯП высокаго уровня. Во всякомъ случаѣ мнѣ идеальныхъ не встрѣчалось. А про синтаксисъ въ точку - но это уже стандартъ. И дѣло тутъ касается даже не синтаксиса самого РЯП, а перевода встроенныхъ процедуръ и функцій - большинство изъ нихъ переведены еще въ семеркѣ.

Надѣюсь разговоръ не про  ФункцияДелаетЧеготоТам и Функция_Делает_Чегото_Там?

utkin295 написал(а):

Так что если надо найти можно, просто особо никто не занимается поиском альтернатив, считая что их просто нет.

Найти то можно, къ примѣру трепыхается еще "Галактика", но изъ нутри это не РЯП, а очередной мутантъ сдѣланный русскими программистами и безъ знаній анлійского вѣрнѣе ломанаго русскоанглійского гдѣ къ примѣру поле "Пол сотрудника" могутъ назвать POL или SEX или даже SEKC...

utkin295 написал(а):

Всякие там АВАР\4 и 1С это кошмарные сны любого внедренца.

Ну во первыхъ мы говоримъ о РЯП, во вторыхъ я ка-то имѣлъ опытъ работы во франчайзи съ полъ года, велъ 120 предпріятій изъ нихъ три крупныхъ, въ основномъ возникали вопросы у крупныхъ предпріятій, на мелкихъ проблемъ не было - вовремя обновляй, подъ горячо любимое Россіянское законодательство и проблемъ не возникаетъ. на крупныхъ предпріятіяхъ свои заморочки въ основномъ связныя съ особенностью вѣдѣнія учёта - вотъ онѣ такъ привыкли и иначе не желаютъ...

0

15

john_head написал(а):

Обязательно займусь этим проектом, причём целевым языком будет Ява.

Къ стати очень хорошая тема, выкладывай сразу списокъ необходимыхъ для Явы инструментовъ, будетъ интересно не спеціалистамъ по Яве.

0

16

utkin295 написал(а):

кстати, какой русскоязычный аналог можно использовать вместо XML?)

Это вопросъ къ Создателю, а также сюда же Sin, Cos, Tan и т.п. - я вотъ честно не знаю какъ къ этому относится - вродѣ какъ международные стандарты, да и когда имѣешь дѣло съ математикой то проще переключать клавіатуру или поленивому удерживая Ctrl мышкой однажды накаляканое растаскивать...

0

17

Е.В.Геній написал(а):

Пропустить звучитъ не плохо но ни чѣмъ ни хуже и не лучше

Евгений, прежде чем писать, лучше подумать сначала. Продолжить — продолжить что? Выполнение текущего прохода, то есть дальше по исходнику, начиная со следующей строчки? Вот, что приходит на ум в первую очередь! Поэтому пропустить однозначно будет лучше, чем продолжить!

0

18

Е.В.Геній написал(а):

, а также сюда же Sin, Cos, Tan и т.п. - я вотъ честно не знаю какъ къ этому относится


Вы XML ставите в один ряд с тригонометрическими функциями? Может, и к "ПЭВМ" вы брезгливо относитесь, считая правильным только "PC"? Или, может, нам США нужно называть "USA", или зря "CIA" как "ЦРУ" перевели? "Международные стандарты"... Тьфу! По этим "международным стандартам" скоро нашей страны и существовать-то не должно будет.
Что касается тригонометрических функций, то sin, cos и т.д. можно в крайнем случае записывать русскими буквами: син, кос, танг (тг), котанг (ктг)... Или вам даже сами русские буквы уже противны? А вообще, если по-хорошему, можно и придумать свои, русские обозначения этих функций. Переводили же наши великие учёные Ломоносов и Менделеев (и другие) латинизмы на русский язык, и очень даже успешно! А чем мы хуже? Возьмите, например, limit в исчислении бесконечно малых, то бишь в дифференциальном исчислении: там это перевели как предел, осталось только набраться духу и начать записывать не lim, а пр, пред или предел.

0

19

Что касается XML, то это, буквально, расширяемый язык разметкиРЯР, или ЯРРязык разметки расширяемый.

0

20

utkin295 написал(а):

Ну вот, как бы и вариант решения есть. Просто я понимаю есть неудачные сокращения, это одно. Но когда используются в качестве обозначения команда включающая в себя латинские и русские символы это уже ни в какие ворота.


Так это буквальный перевод. Можно и дальше думать. Можно, например, обозвать его МЕТОЯЗом (корень -мет- отвечает за разметку, а корень -яз- — за то, что это язык).

0

21

Е.В.Геній написал(а):

Этотъ этапъ уже реализованъ мной редактированіемъ раскладки  http://yadi.sk/d/pFcoHkki1VKxe правый Alt + сѵмволъ, а для ввода {} надо Alt + Shift + сѵмволъ... Въ общемъ нуженъ просто редакторъ работающій съ юникодомъ...


Я скачал с узла Мелкомягких приложение для составления своих раскладок и сделал также, только { и } у меня на круглых скобках, ~ на единичке, а — (тире) на минусе. Кстати, "символ" — это знак по-русски, Евгений! Как же вы ненавидите русские слова, но при этом косите под славянщика, я просто поражаюсь этому! Или вы просто тролль тонкий?

0

22

Создатель написал(а):

Вы XML ставите в один ряд с тригонометрическими функциями?

Что за тонъ молодой человѣкъ - Вы меня за откровеннаго дибила считаете? Или сами не далекаго ума?

Создатель написал(а):

Что касается тригонометрических функций, то sin, cos и т.д. можно в крайнем случае записывать русскими буквами: син, кос, танг (тг), котанг (ктг)... Или вам даже сами русские буквы уже противны?

О чёмъ Вы уважаемый? У васъ маніакальная тенденція цѣплять мнѣ ярлыки, вы снова недопоняли мой посылъ - конкретно я имѣлъ ввиду что вы таки навѣрное можете придумать звучное новое "русское" слово къ устоявшимся уже на текущій моментъ времени стандартамъ.

Стандарты придумывали безъ насъ мы тутъ въ хвостѣ, то есть вынуждены повторять уже устоявшееся, въ случаѣ къ примѣру если я скажу XML или ХМЛ то меня поймутъ 99% программистовъ, а вотъ РЯР, или ЯРР даже спецы въ этомъ дѣлѣ покрутятъ у виска. Это къ сожалѣнію такъ и чтобы заставить общественную мысль думать по другому тутъ ужъ нужна политическая воля не мое или твое желаніе...

0

23

john_head Я бы ещё Вам посоветовал обратить внимание не только на Java, но и на язык Kotlin. Он транслируется в коды Java-машины. Главная его особенность в том, что он - детище нашего разработчика Андрея Бреслау и нашей компании JetBrains. Вот только язык требует русификации. Это я Вам намекаю на поле деятельности :)

Сейчас уже работает синтаксический разбор и расстановка скобок в соответствии с приоритетом операторов.

А какой разбор - через стек или расстановкой скобок (типа алгоритма Рутисхаузера, только с учётом приоритетов)? А посмотреть на код можно?

0

24

Е.В.Геній написал(а):

Что за тонъ молодой человѣкъ - Вы меня за откровеннаго дибила считаете? Или сами не далекаго ума?

О чёмъ Вы уважаемый? У васъ маніакальная тенденція цѣплять мнѣ ярлыки, вы снова недопоняли мой посылъ - конкретно я имѣлъ ввиду что вы таки навѣрное можете придумать звучное новое "русское" слово къ устоявшимся уже на текущій моментъ времени стандартамъ.

Стандарты придумывали безъ насъ мы тутъ въ хвостѣ, то есть вынуждены повторять уже устоявшееся, въ случаѣ къ примѣру если я скажу XML или ХМЛ то меня поймутъ 99% программистовъ, а вотъ РЯР, или ЯРР даже спецы въ этомъ дѣлѣ покрутятъ у виска. Это къ сожалѣнію такъ и чтобы заставить общественную мысль думать по другому тутъ ужъ нужна политическая воля не мое или твое желаніе...


Специалисты покрутят у виска точно также, если вы предложите им перейти на РЯП. У нас же есть возможность употреблять русские названия и обозначения между собой — в кругу русских программистов-роднолюбов. Ничего сложного здесь нет. Что же касается "устоявшихся стандартов", то наши великие учёные-химики (в т.ч. Менделеев) называли перекисями то, что сейчас называют пероксидами, окисями — оксиды, и другие слова употребляли (недокись, докись, первокись, второкись, трёхокись, надперекись, закись, окисел и т.д.). Но потом пришли латинизаторы и начали русские слова менять на латинские. Или вы и это считаете возвращением забытых русских слов?

0

25

Юрий
Действительно попадаются интересные идеи у отечественных разработчиков. Мне вот довелось познакомиться с RS-L (лет пятнадцать тому назад). Это язык программирования, разработанный фирмой RStile (сейчас уже и фирмы-то такой нет). Довольно складный язык.
Но Ява, всё-таки, промышленный стандарт. От её русификации больше толку. Хотя, интересно, что будет, если на форуме Ява разработчиков написать об этом:)))).
Исходный код вышлю на почту, напишите её мне в личку.
Алгоритм расстановки скобок я изобрёл сам. Суть в том, что сначала мы проходим по всему выражению и запоминаем операторы, которые попадаются (стр.458-556). Потом сортируем получившийся список (стр. 560). Дальше, берём оператор с наименьшим приоритетом, и проходим ещё раз по выражению. Когда натыкаемся на него, то, что справа и слева от него заключаем в скобки (стр.561-599, 438-455) (это для инфиксных операторов). Следует отметить, что порядок прохождения выражения (от начала к концу или от конца в начало) зависит от того правый это или левый оператор. Далее берём следующий по приоритету оператор и т. д. Ну там ещё попутно кучу ошибок обрабатываем и ещё тонкости есть, поэтому код навороченный весьма получился, но работает! (на Мозилле и Гугл Хроме работает, а на MS IE нет).

0

26

Про Rstyle Вы заблуждаетесь: вот и вот ;) Я свой ноутбук как-то туда носил на ремонт.

Хотя, интересно, что будет, если на форуме Ява разработчиков написать об этом

Даже весьма интересно ;) . Или на Хабре ;)

Алгоритм расстановки скобок я изобрёл сам. Суть в том, что сначала мы проходим по всему выражению и запоминаем операторы, которые попадаются (стр.458-556). Потом сортируем получившийся список (стр. 560). Дальше, берём оператор с наименьшим приоритетом, и проходим ещё раз по выражению. Когда натыкаемся на него, то, что справа и слева от него заключаем в скобки (стр.561-599, 438-455) (это для инфиксных операторов). Следует отметить, что порядок прохождения выражения (от начала к концу или от конца в начало) зависит от того правый это или левый оператор. Далее берём следующий по приоритету оператор и т. д. Ну там ещё попутно кучу ошибок обрабатываем и ещё тонкости есть, поэтому код навороченный весьма получился, но работает!

Ну были похожие мысли :)  Вот только мне кажется, надо начинать с наибольших приоритетов. Наибольший - т.е. выполняется в первую очередь. Вы тут какие-то номера страниц указываете. "Наверно, книга", - подумал Штирлиц. "Да, это я", - подумала книга.

(на Мозилле и Гугл Хроме работает, а на MS IE нет).

Гм... Это как? Вы имеете в виду не Джаву, а ДжаваСкрипт? Тут один наш коллега по форуму (Алексей) оставлял ссылку проект интернационализации JS: cсылка. Сейчас на почту напишу Вам, чтобы был обратный адрес.

0

27

Юрий написал(а):

Ну были похожие мысли   Вот только мне кажется, надо начинать с наибольших приоритетов. Наибольший - т.е. выполняется в первую очередь. Вы тут какие-то номера страниц указываете. "Наверно, книга", - подумал Штирлиц. "Да, это я", - подумала книга.


Да нет же, не с наибольших, а с наименьших.
Допустим, нам надо расставить скобки в выражении a+b*c.
Если начинать с наибольшего приоритета получится (a+b)*(c) (не правильно), а если с наименьшего, то (a)+(b*c) (правильно).
А "стр." - это номера строк в коде, который я вам выслал.

0

28

utkin295 написал(а):

А зачем он нужен?

Но нужен для того, что бы преобразовать выражение из инфиксной формы в постфиксную: A*B+C -> (A*B)+C -> A B * C +

Отредактировано john_head (17.10.2013 11:12:25)

0

29

utkin295 написал(а):

Рекурсией можно сразу получать нужное  выражение без промежуточного этапа в виде расстановки скобок.

???
Нельзя ли поподробней

0

30

utkin295
Хотел бы к Вашим рассуждениям  добавить несколько вещей. Ведь они описывают основы, помимо которых есть и другие моменты, которых на практике не избежать.
1) У операций ещё есть приоритеты, это было опущено, по-видимому, для придания большей простоты рассуждениям.
2) Операции бывают не только инфиксные бинарные, но и унарные и тернарные.
3) Некоторые операции имеют одинаковое обозначение, что не упрощает разбор выражений. Например, минус инфиксный бинарный  и минус унарный. В Си звездочка применяется как для умножения, так и для разыменования (опять же инфиксный бинарный и унарный способ записи). И т.д.
4) Унарные операции бывают как префиксные, так и постфиксные. Инкремент и декремент, например.
5) Тернарные операции имеют 2 знака операции, которые располагаются между 3 операндами. Тернарный оператор «?:» из Си-подобных языков уникален и его легко распознать. Но вот в Питоне есть несколько тернарных операторов, обозначения которых повторяют бинарные: A < B <= C.
6) Операции могут употребляться не только в правых, но и в левых частях выражений. При разборе это надо учитывать. Например: A ? B : C = D
7) В некоторых языках (например, Алгол-68) набор операций не фиксирован и в программах можно определять новые операции. Если в языке нет, к примеру, операции возведения в степень, то её можно ввести. Более того, в Алгол-68 новой операции можно назначить её приоритет!

0

31

utkin295

остальные операции по вкусу


Вовсе не по вкусу, а по строго определённым правилам. Должна быть, по идее, некоторая таблица, в которой описаны все характеристики операций: унарная, бинарная или тернарная, приоритет, употребляется ли в левой части или нет.
Ещё одну характеристику я упустил – это ленивые операнды. Например, второй операнд операций «и» и «или».

= это такой же оператор как while, if, for и т.д


Это верно для языков типа Паскаль. В Си-подобных языках присвоение – это тоже операция. Эта операция может как выдавать значение, так и принимать его. Она полноправно присутствует в справочнике операций С/С++. Более того, в некоторых языках (как правило, функциональных) всякого рода if тоже являются не операторами, а операциями: они могут как выдавать значение, так и принимать. Вот справочник операций С++:
http://s5.uploads.ru/64wOl.png

Вы не рассмотрели это разбор логических выражений в условиях

Отчего ж не рассмотрел? В Си логические операции – такие же обычные операции, как и арифметические. Ну за исключением ленивых операндов. Но в С++ «ленивость» операндов не наследуется, она применяется только к базовым типам. Ну а в языке D есть ключевое слово «lazy» для ленивых операндов.

я противник всяких тернарных извратов

Всё таки выражения типа A < B <= C представляют некоторое удобство для программиста. Хотя для разработчика компилятора – некоторая головная боль :)

0

32

Вы путаете семантику и реализацию.

Да ничего я не путаю. Есть синтаксис: таблица приоритетов приведена, там операция присваивания такая же, как все. Есть семантика, которую в С++ можно переопределить:

Код:
op_class&  operator=(op_class& operand1, op_class operand2) {…};

Ну а реализация – это многоточие внутри { }.

Я такой дуализм не встречал. Обычно есть жесткое разделение на условный оператор и функцию, либо просто функции.

В Си изначально были некоторые вещи из функционального программирования. Поэтому там есть тернарная условная операция, которую можно записать хоть так

Код:
a = b ? c : d;	// операция выдаёт значение

хоть эдак:

Код:
b ? c : d = a;	// операция принимает значение

Тернарная условная операция – по сути if, который в Лиспе работает точно так же:

Код:
a = (if  … then … else …)

или

Код:
(if  … then … else …) = a

Жёсткое разделение, наверное уходит. Идёт уклон к большему применению функционального программирования. В том же С++ нововведения в стандарт касаются прежде всего этого.

Вы смешиваете представления - операторы, операнды в выражениях и конечные элементы (конкретно путаете функции)

Да это не я смешиваю и путаю. Их суровая реальность бытия (то бишь развитие ЯП) их смешивает.

Не  вижу никаких удобств. Краткость не только сестра таланта, но существенно усложняет понимание многих вещей.

В ряде фирм в корпоративных стандартах на код есть запрет на употребление условного тернарного оператора по причине его «корявости». Но x < y < z мне видится вполне симпатичным.

0

33

Возьмём код:

Код:
	double  d = 2.6;
	cout << d << "\n";
	int     i;
	cout << ((i=d)+=10) << "\n";

Этот код для компилятора правильный, потому что операция = может употребляться в левой части выражения. Он выдаёт:

Код:
2.6
12

Это правильно, так и было задумано. Но если операцию = заменим на операцию +, которую нельзя употреблять в левой части выражения

Код:
	cout << ((i+d)+=10) << "\n";

то компилятор выдаст "Lvalue required".

Один из принципов который не был указан - это безадресность результата в стеке.

Как видите, переменной i присваивается значение d, приведённое к целому, а результат помещается в стек. Затем значение в стеке увеличивается на 10 и выводится в cout.

Что такое лексический анализ? Это когда синтаксический анализатор вызывает функцию "взять очередную лексему(...)" и получает эту лексему: это или идентификатор, или константа, или знак операции, или ключевое слово или ещё что-то. Функция "взять очередную лексему(...)" не производит разбора выражений (этим займётся синтаксический анализатор), она лишь выделяет следующую лексему. Это я описываю то, как обычно устроено. Хотя на самом деле разбиение компиляции на фазы лексического, синтаксического и семантического анализ достаточно условно. Определённые действия могут переноситься из одной фазы в другую.

Разбор математических выражений можно проводить в один проход, тогда сразу же придётся проверять выражения "от и до". Например, выражение

Код:
const  int  a = 0;
a += 10;

будет незаконным. Но для этого надо анализировать контекст. Можно этот разбор разложить на несколько проходов. На первом проверять на соответствие формальным признакам, и на этом этапе "a += 10;" вполне законно. А на последующих проводить анализ контекста, и ошибка будет выявлена как раз в это время.

0

34

Не хочется больше с Вами спорить в виду отсутствия результата у этого занятия. Замечу только, что лексический анализ занимается регулярными грамматиками (по классификации Хомского) – простейшими выражениями. Никакая рекурсивность там не нужна, эти грамматики слишком примитивны. Так что Вы неправы насчёт:

это делается рекурсивно вызовом из лексического анализатора

Зачем лексическому анализатору вызывать самого себя? Его назначение – выдать синтаксическому анализатору что-то типа {тип лексемы, «строка, содержащая лексему»}. И всё, его миссия закончена. Посмотрите в Википедии страницу «лексический анализ», там именно так пишут.

И о каком «математическом разборе» Вы говорите? Видимо, о разборе арифметических операций? Так это частный случай операций вообще. Достаточно сделать разбор операций, и арифметические операции тоже будут разобраны.

Общее представление даст лексический разбор (что перед нами инициализация, а следующая строка присвоение)

Да нет, это задача синтаксического анализатора. Если, конечно, придерживаться классического разбиения на лексический/синтаксический/семантический анализы.

0

35

А, голая теория, книги я тоже читал.

Если теория хорошо проработана (и разжёвана в учебниках!), то самое разумное – это пользоваться ею.

В реальности же круг задач лексического анализатора очерчен по-другому.

Да неужели? А отчего тогда в Lex/Flex лексемы языка описываются регулярными выражениями (сухая и голая теория, не правда ли?)? Да для того, чтобы сделать классический, с точки зрения теории, лексический анализатор. А потом наступает черёд Yacc/Bison. Для него описывается синтаксис языка. На основании этого описания строится компилятор, который уже в свою очередь, включает как синтаксический анализатор, так и лексический. Связь между ними такая: когда синтаксическому анализатору требуется очередная лексема, он вызывает просто функцию лексического анализатора с именем (если не ошибаюсь) get_token().
Вот и всё. С одной стороны, сухая теория, с другой – живейшая практика. Lex/Yacc и его бесплатный аналог Flex/Bison, наверное, держат мировой рекорд по числу компиляторов, созданных с его помощью. Евгений Зуев писал, что свой компилятор они делали с использованием Flex/Bison.
Так что реальность имеет много граней. В зависимости от точки обозрения видны те, что ближе. Андрей Хохов делал несколько вариантов компилятора своего языка Context, один из них – с помощью Flex/Bison (вот, полюбопытствуйте). На мой вопрос «как легче и проще», он ответил, что трудоёмкость (как ему показалось, хотя он не стремился заметить это) примерно одинакова.

но обычно синтаксический разбор более прост - разбиение на лексемы, то есть задача более низкого уровня.

Сударь! Вы путаете синтаксический и лексический анализ. Разбиение на лексемы (то есть выделение следующей лексемы из входного потока) – это лексический анализ.

0

36

Вы подтверждаете мои слова. Все это справедливо только для контекстно-свободных грамматик. ЯК и Бизон могут строить только ограниченные парсеры. Даже для Валентины они построить компилятор не могут.

Опять неправда Ваша. С помощью Yacc/Bison делаются компиляторы таких монстров, как С++. А почему это получается? Там, где грамматика выходит за рамки контестно-свободной, Yacc/Bison позволяют делать вставки на Си для анализа контекстных зависимостей. Таким образом Yacc/Bison позволяют решить очень широкий класс в области компиляции языков. Другое дело, что их надо знать – только в этом случае они могут помочь :(

Мы и так сильно отклонились от разбора математических (ах, пардон, Вы их называете арифметическими) выражений.

Ну да, язык не поворачивался назвать операции «+-*/» математическими. Математика – это производные, интегралы, ряды Фурье, а не эта мелочь пузатая :) Но Вы правы, арифметика – подраздел математики.
http://www.compiler.su/_I/kompyuternyj-yumor.jpg

0

37

Я бы хотел  прекратить спор.

Да, пожалуй это стоит сделать. Вдохновение иссякло :)

Ждем ТС и его замечаний.

А кто это - ТС?

0

38

Фух! Не осилил всё прочесть, но одно можно точно сказать: всё это дело непростое и довольно запутанное. К тому, что написано, добавлю от себя, что кроме приоритета у операций есть ещё ассоциативность. Т. е. как правильно расставлять скобки в а+б+в+г так (а+(б+(в+г))), или так (((а+б)+в)+г). Для операции «+» разницы нет. Для операции «.» верно только так: (((а.б).в).г), а для «=» только так: (а=(б=(в=г))).

Юрий, а фотография с рядами Фурье, это с монстрации?

0

39

А кто это - ТС?

Допёр, наконец, кто такой ТС. Так называемый "топик стартер" ;) (Пушкин в похожем случае вплёл в свои стихи извинение: "Шишков, прости, не знаю, как перевести"; Вот и я заранее прощу прощения за невынужденную иностранщину).   Но ТС таки появился ;)

кроме приоритета у операций есть ещё ассоциативность

Ну да, я вроде бы тут это пытался это сделать. Но видимо плохо получилось, что Вы этого не заметили. Да и само слово "ассоциативность" я не употреблял. Мы тут с Уткиным, конечно, развели демагогию ;) Но всё осталось в уважительных рамках :)

а фотография с рядами Фурье, это с монстрации?

Это я где-то на просторах Рунета откопал. Студенты просто прикалываются. Можете поискать картинку специальным сервисом: http://www.tineye.com/ Да и Яндекс-картинки недавно запустили очень похожее.

0

40

utkin295
Скобки, это для наглядности. На самом деле строится дерево, где скобками обозначается более глубокий уровень вложенности.

0

41

Для русификации паскаля можно использовать средства литературного программирования.
Сами средства ЛП, а за одно и описание к ним можно скачать здесь ibzh.ts6.ru/tex/literate.htm

0

42

Считаю в корне не верным заниматься русификацией иностранного языка программирования. Это тоже самое, что хотеть чтобы было всё русское, например русская ОС, а разрабатывать всё на зарубежных микроконтроллерах.

0

43

Но фак остается фактом если кто решить перевести язык программирования на Русский столкнется с проблемой нехватки готовых пример кода)))

Тут, на мой взгляд, суть в другом. Практически невозможно просто взять и создать язык программирования из ничего. Поэтому, мне видится несколько этапов:
1. Изучение иностранных ОС, ЯП и прочего на предмет того, как это устроено.
2. Создание русских аналогов
3. Когда появляются русские аналоги, уже легче в принципе всё понимать как это устроено, потому как только на родном языке можно нормально что-то создавать. Можно это делать и на иностранных языках, но такой эффективности нет.
4. И вот тут уже создаются полностью свои технологии с учётом опыта предыдущих пунктов.

Ну это чисто моё видение данной проблемы.

0

44

В конце 70-х начале 80-х Д. Кнут разработал методологию и инструментальные средства литературного программирования для языка Паскаль.
Я выполнил русификацию этих средств и снабдил механизмом транслитерации идентификаторов программы. Это позволяет полностью писать программы на русском языке, получая на выходе программы на стандартном паскале, который можно скормить любому компилятору.

Сами инструментальные средства ЛП и описание к ним можно скачать здесь ibzh.16mb.com/tex/literate.htm

0

45

надеюсь иногда здесь бывают также люди которые, как рядовые программисты готовы действовать согласно ТЗ.

Согласно ТЗ люди, очевидно, согласны действовать за оплату. Бесплатно, максимум, студенты с курсовыми/дипломными, опять же, еще надо найти представителей подходящей кафедры.

0

46

ЗНАК_ВОПРОСА написал(а):

согласен есть ТЗ должна быть ЗП, но пока нет ТЗ все подобные проекты задыхаются от разнообразия : кто в лес, кто по дрова.


И будут задыхаться. Ибо есть вещи, которые естественны для одного человека, но неприемлемы для другого.

ЗНАК_ВОПРОСА написал(а):

каждый девелопер


Это кто такие?

Кому из русских людей, например, это слово будет приемлемо? На мой взгляд, русского человека стошнит от вашего полупиндосовского языка, и он не захочет с вами дело иметь вообще.

Настоятельно советую для начала изучить русский язык, а уже потом заниматься вопросами русского программирования.

0

47

ЗНАК_ВОПРОСА написал(а):

как привлекать и наращивать сообщество?


В условиях преклонения перед английским языком и ненависти к русскости привлечь кого-то к русскому программированию, на мой взгляд, невозможно.
Исключения составляют только единицы, помешанные на этих вещах, — вроде некоторых из местных. И я в их числе.

Поэтому, чтобы привлекать кого-то к русскому программированию, нужно сперва этого кого-то отвадить от англофильства и приобщить к русолюбству, отучить его от инопоклонства и научить творчеству, превратить из обезьянки, которая умеет только подрожать, в созидателя.

0

48

ЗНАК_ВОПРОСА написал(а):

возможно я Вас удивлю, но программирование это не вера и не гражданство и уж точно не национальность.


Возможно, я вас удивлю, но в большинстве случаев отношение к русскому программированию в среде программистов напоминает именно религиозное.

ЗНАК_ВОПРОСА написал(а):

пока за работу на данном языке программирования - новом, удобном, РУССКОМ - не начнут платить, и платить относительно нормально в сравнении с уже существующими языками которые получили свою нишу, никто их изучать и писать на них не будет.


Глупости. Есть огромное количество людей, которые программируют, не работая при этом программистами. Программируют учёные, инженеры, строители, ученики и преподаватели, любители.
И чем дальше в лес, тем больше дров: чем дальше в будущее, тем более распространённым становится это занятие.
И все эти люди программируют не на том, за программирование на чём им платят деньги, а на том, что лучше всего подходит именно для них.

Ваше «казнить нельзя помиловать» тяжело и неприятно читать. Вы в школе, что ли, не учились? Изучите, пожалуйста, русский язык хотя бы поверхностно.
А то русского языка не знаем, а рассуждаем о целых отраслях.

0

49

ЗНАК_ВОПРОСА написал(а):

ваше приверженность начинает принимать религиозные или националистические стороны.


Приверженность чему? Знанию родного языка? Ну, тогда вам в ответ могу сказать так: ваша приверженность к незнанию и неуважению языка тоже напоминает мне религиозную или национальную (русоненавистническую).

ЗНАК_ВОПРОСА написал(а):

все о чем вы пишете не подкреплено ничем.


Что именно не подкреплено ничем?

ЗНАК_ВОПРОСА написал(а):

в дальнейшем прошу вас или говорить по делу или представлять доказательства каждого замечания или высказывания.


Доказательства чего вам нужно предоставить? Доказательства того, что вы безграмотен? Так это же очевидно: достаточно просто прочесть ваши сообщения.

ЗНАК_ВОПРОСА написал(а):

Россия язык и идея являются многонациональными.


С какого перепуга язык-то многонациональным является? Русский язык — это язык русского народа. Просто он является ещё и языком межнародностного общения в России.
Не нравятся русские слова — езжайте в СГА, Европу, или что вам там больше нравится.

ЗНАК_ВОПРОСА написал(а):

все о чем говорю я проверено и имеет под собой основание, подкреплено исследованиями в данных облостях  и разработками в смежных областях, остальное не имеет смысла.


Тогда потрудитесь обосновывать свои утверждения, хотя бы предоставляя ссылки на надёжные источники.

ЗНАК_ВОПРОСА написал(а):

в группе из 10 человек, вы пытаетесь быть мерилом


Вы снова за меня решаете, кто я, что делаю, чего хочу добиться? Мне это рано или поздно надоест, и мне придётся вас заблокировать за ваши необоснованные оскорбления.

ЗНАК_ВОПРОСА написал(а):

ваши комментарии не имеют ничего общего с желанием добиться положительного результата


Я твёрдо нацелен на положительный итог. Но, видимо, мы просто разные вещи понимаем под этим.

0

50

Мне пришла мысль насчет русификатора, который предлагают использовать вместо создания русифицированных аналогов существующих языков. Его можно также использовать и при разработке своего нового языка. Насколько мне ощущается, выбор правильных и подходящих специальных слов при создании языка занимает существенное время, может тормозить продумывание самого ЯП. А также после выбора слов они считай жестко встраиваются и исправлять их неудобно, типа "выбрано уже", "все менять", "уже в ходу". Еще могут быть случаи, когда выбранное слово вдруг больше подходит для другого, а для прежнего слово лучше поменять.

Так вот если при разработке ЯП временно использовать "русификатор", вернее просто переводчик слов из одних в другие, то можно наспех быстро обозначить ключевые слова, чтобы можно было заняться реализацией компилятора и прочих утилит, а переводчик слов использовать поверх этого и подставлять, пробовать, менять разные названия ключевых слов, без необходимости перекомпилять новый компилятор. Тоесть разработчик может писать примеры программ с разными наборами ключевых слов, опробывать это на пользователях, а компилятор при этом будет работать на жестком, временно выбранном, наборе. А в конце, когда все вылижется и устаканится, выберется окончательно, можно уже будет перекомпилить сам компилятор и уже не пользовать переводчик слов.

Кстати таким же образом можно постепенно найти замену и таким названиям как sin, cos, lg, tn.

Еще русификатор можно использовать для постепенного приучивания народа к русским словам в программировании, встроив в него возможность использовать как русские слова, так и нерусские. Тоесть компилятор не будет заниматься распознаванием и того и другого и будет ориентирован только на определенный новый набор. Но пользователь может по привычке что-то писать по старому, а переводчик это исправит. Хотя это может наоброт расслабить программиста наверное.

0

51

В своём русификаторе так и сделал - замена ключевых слов - через словарь, который представляет собой текстовый файл, который редактируется любым текстовым редактором.

0

52

john_head написал(а):

Ввод текста программы.
Для удобной работы с кириллицей необходимо создать специальный текстовой редактор. Идея состоит в том, чтобы можно было вводить всякие закорючки не переключаясь всё время на латиницу. Для этого предлагаю использовать сочетания Контрол+ и Альт+.

Есть уже готовый редактор Akelpad его плагин Hotkeys умеет такое делать, также там можно перенастроить подсветку синтаксиса для русифицированной версии языка.

Я предлагаю написать универсальный русификатор для большинства существующих ЯП.
По сути это будет тривиальный прокси или адаптер, который запускается вместо оригинального компилятора, производит трансляцию исходников в доступный для него вид и далее вызывает уже сам компилятор, при этом производя перевод уже в обратном направлении, т.е. русификацию уже сообщений от компилятора к пользователю.
Получаем полноценную русификацию, и главное для русских имен теперь можно использовать кодирование вместо транслитерации!
Не "summa_ayblok" а "___encoded_F1F3ECECE05FFFE1EBEEEA__" (конкретный префикс/постфикс может быть иным в зависимости от текущих соглашений о кодировании), что позволяет избежать возможных конфликтов имен.
для конкретного языка нужно лишь определить:
1. словарь ключевых слов.
2. функцию для лексического разбора исходного "русского" кода, для выделения имен и ключ. слов, а также инструкций метапрограммирования требующих особой обработки (например #include в с/с++).
3. словарь возможных сообщений компилятора.

0


Вы здесь » Русские вычислители » Русский язык программирования: от слов к делу » Русификация существующих ЯП


форум на 24bb Создать форум бесплатно