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 для выяснения, какие буквы приемлемы в идентификаторах. В целом копаете в правильном направлении...... | "I": Identifier(s); IF name = "IF" THEN s := if .... достаточно ли исправить на (добавить синоним IF -> ЕСЛИ) .... | "I": Identifier(s); IF (name = "IF") OR (name = "ЕСЛИ") THEN s := if .... для корректной работы компилятора? Для знакомства с устройством компилятора можно почитать "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 для выяснения, какие буквы приемлемы в идентификаторах. В целом копаете в правильном направлении...... | "I": Identifier(s); IF name = "IF" THEN s := if .... достаточно ли исправить на (добавить синоним IF -> ЕСЛИ) .... | "I": Identifier(s); IF (name = "IF") OR (name = "ЕСЛИ") THEN s := if .... для корректной работы компилятора? что то я действительно сглупил д.б. примерно: .... | "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) ??? Не понял вопроса! А!... Вы, вероятно, - Си-шник !? |
Автор: | 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/ |