OberonCore
https://forum.oberoncore.ru/

Программирование на русском языке в школе
https://forum.oberoncore.ru/viewtopic.php?f=3&t=1339
Страница 1 из 1

Автор:  rus.24bb.ru [ Среда, 04 Февраль, 2009 20:02 ]
Заголовок сообщения:  Программирование на русском языке в школе

Есть желание при обучении программированию детей в школе использовать русский язык. Для обучения естественно желательно использовать современный язык с современной концепцией, чтобы привить хороший стиль программирования. Да и вообще я считаю что наши дети ничем не хуже американских и должны иметь возможность учится программировать на родном языке. В общем, хотелось бы добавить в БлэкБокс возможность использования параллельно с английскими - и русские конструкции ЕСЛИ ТО ИНАЧЕ. Насколько я понял
это можно сделать в Процедуре DevCPS.Get. Я не очень хорошо разбираюсь в компиляторах. поэтому ищу тех кто сможет помочь реализовать это возможность или хотя бы проконсультирует как это сделать.

Для начала вопрос: в тексте процедуры DevCPS.Get.
.....
| "I": Identifier(s); IF name = "IF" THEN s := if
....
достаточно ли исправить на (добавить синоним IF -> ЕСЛИ)
....
| "I": Identifier(s); IF name = "IF" OR "ЕСЛИ" THEN s := if
....
для корректной работы компилятора


PS В качестве встроенного редактора блок-схем есть желание использовать Дракон-редактор.

Сайт проекта -> http://rus.24bb.ru - Языки программирования с русским синтаксисом - раздел "БлэкБокс (Компонентный Паскаль)" или в этой ветке.

Автор:  Александр Ильин [ Среда, 04 Февраль, 2009 21:09 ]
Заголовок сообщения:  Re: Программирование на русском языке в школе

rus.24bb.ru писал(а):
Для начала вопрос: в тексте процедуры DevCPS.Get.
.....
| "I": Identifier(s); IF name = "IF" THEN s := if
....
достаточно ли исправить на (добавить синоним IF -> ЕСЛИ)
....
| "I": Identifier(s); IF (name = "IF") OR (name = "ЕСЛИ") THEN s := if
....
для корректной работы компилятора?
Только в том случае, если у вас слово "ЕСЛИ" будет начинаться на букву "I". Также см. процедуру Identifier для выяснения, какие буквы приемлемы в идентификаторах. В целом копаете в правильном направлении.
Для знакомства с устройством компилятора можно почитать "Compiler Construction" Вирта.

Автор:  Илья Ермаков [ Среда, 04 Февраль, 2009 21:20 ]
Заголовок сообщения:  Re: Программирование на русском языке в школе

Вообще, ещё надо документацию на OP2 Compiler. Где-то она болталась у нас тут?

Автор:  Geniepro [ Четверг, 05 Февраль, 2009 07:20 ]
Заголовок сообщения:  Re: Программирование на русском языке в школе

rus.24bb.ru писал(а):
Есть желание при обучении программированию детей в школе использовать русский язык.

http://glagol.nad.ru/
http://dic.academic.ru/dic.nsf/ruwiki/106869

Автор:  rus.24bb.ru [ Вторник, 10 Февраль, 2009 13:30 ]
Заголовок сообщения:  Re: Программирование на русском языке в школе

Большое спасибо за советы, по Глагол я знаю, но мне не нравится:
1. Сокращённый синтаксис ЦЕЛ вместо Целый и т.п.
2. Отдел вместо процедура и т.п.
3. нет редактора под windows, редактора форм
Хочется нормальный современный язык , а не игрушечный.

Автор:  rus.24bb.ru [ Вторник, 10 Февраль, 2009 13:38 ]
Заголовок сообщения:  Re: Программирование на русском языке в школе

Александр Ильин писал(а):
rus.24bb.ru писал(а):
Для начала вопрос: в тексте процедуры DevCPS.Get.
.....
| "I": Identifier(s); IF name = "IF" THEN s := if
....
достаточно ли исправить на (добавить синоним IF -> ЕСЛИ)
....
| "I": Identifier(s); IF (name = "IF") OR (name = "ЕСЛИ") THEN s := if
....
для корректной работы компилятора?
Только в том случае, если у вас слово "ЕСЛИ" будет начинаться на букву "I". Также см. процедуру Identifier для выяснения, какие буквы приемлемы в идентификаторах. В целом копаете в правильном направлении.

что то я действительно сглупил д.б. примерно:
....
| "I": Identifier(s); IF name = "IF" THEN s := if
....
заменить на:
....
| "I": Identifier(s); IF name = "IF" THEN s := if
| "Е": Identifier(s); IF name = "ЕСЛИ" THEN s := if
....
Судя по этой строке с кириличискими операторами проблем быть не должно?
| "G".."H", "J", "K", "Q", "S", "X".."Z", "a".."z", "_", "А".."я", "ё", "Ё": Identifier(s)

---
PROCEDURE Identifier(VAR sym: BYTE);
VAR i: SHORTINT;
BEGIN i := 0;
REPEAT
name[i] := ch; INC(i); DevCPM.Get(ch)
UNTIL ~National.IsIdentChar(ch) OR (i = MaxIdLen);
IF i = MaxIdLen THEN err(240); DEC(i) END ;
name[i] := 0X; sym := ident
END Identifier;
--------------------
Честно говоря ничего не понял?? что делает эта процедура??

Автор:  Wlad [ Вторник, 10 Февраль, 2009 14:03 ]
Заголовок сообщения:  Re: Программирование на русском языке в школе

rus.24bb.ru писал(а):
PROCEDURE Identifier(VAR sym: BYTE);
VAR i: SHORTINT;
BEGIN i := 0;
REPEAT
name[i] := ch; INC(i); DevCPM.Get(ch)
UNTIL ~National.IsIdentChar(ch) OR (i = MaxIdLen);
IF i = MaxIdLen THEN err(240); DEC(i) END ;
name[i] := 0X; sym := ident
END Identifier;
--------------------
(Скорее всего - считывается идентификатор.)
Честно говоря ничего не понял?? что делает эта процедура??

Заполняет из источника букафф некую строку до максимальной длины MaxIdLen и пока это - разрешённая для идентификаторов буква.
Если длина идентификатора больше предопределённого реализацией (MaxIdLen), то он обрезается до этой длины (с фиксацией ошибки где-то).
Результат возвращается в sym
Внешний name скорее всего или статически объявленный или где-то заранее NEWed...

Автор:  rus.24bb.ru [ Среда, 11 Февраль, 2009 14:06 ]
Заголовок сообщения:  Re: Программирование на русском языке в школе

А если вообще исключить проверку на соответствие символов?
~National.IsIdentChar(ch)
и оставить так:
UNTIL (i = MaxIdLen);
Решение конечно кривое но, работать будет??

откуда это
~National.IsIdentChar(ch) ???

Автор:  Евгений Темиргалеев [ Среда, 11 Февраль, 2009 14:40 ]
Заголовок сообщения:  Re: Программирование на русском языке в школе

Код:
UNTIL (i = MaxIdLen);
IF i = MaxIdLen THEN err(240); DEC(i) END ;
Работать будет. Вот так:
Код:
UNTIL (i = MaxIdLen);
err(240); DEC(i);
Кажется, Вам стоит чуток отложить переделку компилятора....

Автор:  Wlad [ Среда, 11 Февраль, 2009 15:48 ]
Заголовок сообщения:  Re: Программирование на русском языке в школе

rus.24bb.ru писал(а):
А если ... , работать будет??

Скорее - функционировать...

rus.24bb.ru писал(а):
откуда это
~National.IsIdentChar(ch) ???

Не понял вопроса!
А!... Вы, вероятно, - Си-шник !? :lol:

Автор:  Info21 [ Среда, 11 Февраль, 2009 19:36 ]
Заголовок сообщения:  Re: Программирование на русском языке в школе

Компилятор трогать не стоит.
В Блэкбоксе достаточно сделать новую команду, которая:

-- ловит компилируемый текст с русскими ключ. словами;
-- проходит по нему, создавая другой текст, в котором русские ключевые слова заменяются на английские, при этом строится некий список позиций соответствующих слов в русском и английском варианте;
-- к переведенному тексту с англ. ключ. словами применяется обычная компиляция; при этом компилятор вставляет туда маркеры ошибок (вьюшки);
-- проходом по этому англ. тексту из него извлекаются маркеры ошибок и, используя ранее сгенеренный список соответствий, вставляются в исходный русский текст, видимый школьнику.

Почти все необходимые зацепки с каркасом ББ показаны в модуле Info21sysEdit (где делаются раскрытия конструкций по F5).

Я бы не стал сразу лезть в компилятор (хрупкая вещь), а сначала реализовал именно этот достаточно простой и, главное, надежный способ (отлаживать легко: сразу всё будет видно по положению маркеров ошибок).
А дальше видно будет.
Если оно пойдет в массовом масштабе и будет тормозить неприемлемо -- из народа наверняка выйдет юный герой подраконить компилятор: такого рода неконцептуальные задачки решаются народом быстро.

Автор:  Илья Ермаков [ Среда, 11 Февраль, 2009 19:49 ]
Заголовок сообщения:  Re: Программирование на русском языке в школе

Да с чего бы тормозить - ерунда :) Отличнейшим образом будет работать.
(В Lab-е ведь таким образом и было сделано - и маркеры ошибок ловились, и ссылки трепа корректировались).

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

Автор:  Иван Горячев [ Четверг, 12 Февраль, 2009 01:51 ]
Заголовок сообщения:  Re: Программирование на русском языке в школе

rus.24bb.ru писал(а):
откуда это
~National.IsIdentChar(ch) ???

Это как раз позволяет использовать русские буквы в идентификаторах. В оригинале было так:
Код:
   PROCEDURE Identifier(VAR sym: BYTE);
      VAR i: SHORTINT;
   BEGIN i := 0;
      REPEAT
         name[i] := ch; INC(i); DevCPM.Get(ch)
      UNTIL (ch < "0")
         OR ("9" < ch) & (CAP(ch) < "A")
         OR ("Z" < CAP(ch)) & (ch # "_") & (ch < "À")
         OR (ch = "×")
         OR (ch = "÷")
         OR (i = MaxIdLen);
      IF i = MaxIdLen THEN err(240); DEC(i) END ;
      name[i] := 0X; sym := ident
   END Identifier;

Автор:  rus.24bb.ru [ Четверг, 19 Март, 2009 14:54 ]
Заголовок сообщения:  Re: Программирование на русском языке в школе

Info21 писал(а):
Компилятор трогать не стоит.
В Блэкбоксе достаточно сделать новую команду, которая:

-- ловит компилируемый текст с русскими ключ. словами;
-- проходит по нему, создавая другой текст, в котором русские ключевые слова заменяются на английские, при этом строится некий список позиций соответствующих слов в русском и английском варианте;
-- к переведенному тексту с англ. ключ. словами применяется обычная компиляция; при этом компилятор вставляет туда маркеры ошибок (вьюшки);
-- проходом по этому англ. тексту из него извлекаются маркеры ошибок и, используя ранее сгенеренный список соответствий, вставляются в исходный русский текст, видимый школьнику.

Почти все необходимые зацепки с каркасом ББ показаны в модуле Info21sysEdit (где делаются раскрытия конструкций по F5).

http://rus.24bb.ru/viewtopic.php?pid=488#p488 - обсуждение реализации этой идеи.(Спасибо info21)

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/