Семантический редактор обретает рабочие очертания.
Пацан очень заинтересован, пишет и рефакторит практически не переставая. Обсуждаем регулярно.
Пацан защитил на этом бакалавра, собирается в магистры. Выиграл Умника.
Работа четко разбивается на несколько подсистем.
- собственно редактор. Вчерашнее обсуждение показало, что операция copy-paste - не соответствует сущности семантического редактора. Эту операцию можно разрешить только в очень определенных местах программы и документа. А редактор должен выполнять высокоуровневые операции типа рефакторинга. Подключили пацана 3 курса - будет этим вопросом заниматься.
- интерпретатор семантического дерева. Первая версия работает. Пока только на процедурах. Далее будет добавляться ОО-часть. Сюда же - всякие конвертеры в известные языки. Здесь мы внимательно смотрим в стороны ББ. Вчера речь зашла о линкере - я тут же ему указал на динамическую загрузку модулей и автоматическое извлечение интерфейсов в ББ. Пацан проникся...
Пока у меня на этом компе не установлена Студия 2010 (пацан делает на том, что у него "в пальцах" сидит). Кроме того, реально хочет сделать сервис в инете для наших школьников (есть идея организовать в сети что-то вроде школьной ИТ-академии конкретно от нашей кафедры).
Поэтому пока сохраняет проги вот в таком виде:
Код:
<?xml version="1.0" encoding="utf-16" ?>
- <модуль NameWord="НовыйМодуль" BodyWord="НовыйМодуль" SelectionWord="НовыйМодуль">
- <процедура FirstWord="Главная" Expression="" NameWord="Главная" BodyWord="Главная" SelectionWord="Главная">
<переменная Type="целое" NameWord="и" SelectionWord="целое" />
<присвоить Left="и" Expression="1" SelectionWord="и" />
<пустая_строка FirstWord="" KeyWord="" EnterWord="" BodyWord="" EndWord="" EndEnterWord="" />
- <цикл Expression="и<10" BodyWord="и<10" SelectionWord="и<10">
<вывести Expression="стр(и) + "! = " + стр(Факториал(и)) + "\n"" SelectionWord="стр(и) + "! = " + стр(Факториал(и)) + "\n"" />
<присвоить Left="и" Expression="и + 1" SelectionWord="и" />
</цикл>
</процедура>
<пустая_строка FirstWord="" KeyWord="" EnterWord="" BodyWord="" EndWord="" EndEnterWord="" />
- <функция FirstWord="целое" Type="целое" Expression="целое б" NameWord="Факториал" BodyWord="Факториал" SelectionWord="целое">
- <если Expression="б==0" SelectionWord="б==0">
<вернуть Expression="1" SelectionWord="1" />
</если>
<вернуть Expression="Факториал(б-1)*б" SelectionWord="Факториал(б-1)*б" />
</функция>
</модуль>
Как только установлю студию - скрины выставлю.
Но могу добавить - получается лучше, чем КуМир - абсолютно точно! Язык - существенно лучше: с Дейкстриным if и циклом.
Кстати, сильно сомневаемся о включении в язык механизма исключений. С одной стороны, вроде как знакомить студней надо. Но с другой стороны - вот не нравятся мне это на интуитивном уровне. И интерпретатор, возможно, усложнится.
Мне очень понравился if с assert(), который привел Евгений Темиргалиев - это прям паттерн, который надо вбивать в головы студней...