Позволю себе ишшо немножечко покомментировать.
Итак, что делает программа Реконструктора после открытия входного потока? Прежде всего - разбивает на отдельные операторы, т.е. пытается получить вместо одного входного потока массив строк (в каждой строке - отдельный оператор). А конец оператора определяется по наличию/отсутствию символов ":","{","}",";". Уже видно нетривиальный подход, не так ли? Похоже, что стандарная схема сканера типа "nextToken()" Реконструктору просто неизвестна. Следствия из гениальной схемы не заставили себя ждать - Реконструктор, к сожалению, забыл, что по спецификациям ';' разделяют операторы, а не заканчивают. Или просто не врубился, когда списал код откуда-то. И потому тесты типа
{
if(1) {
print(5)
}
}
у нас не проходят - ибо мы просто не видим, что print(5) существует - после него ведь нет точки с запятой! Я уж не говорю, что если, не дай бог, позднее придется парсить не только double, но и string константы, этот код просто придется выкидывать и писать по новой (ибо в константах могут быть те самые "волшебные" символы разделения операторов).
Что делаем потом? Потом каждый "оператор" мы пытаемся распарсить. Как? А вот так:
мы берем строчку и сначала пытаемся найти в ней литеру "{" или "}" и если находим - выдаем соответствующий код. Если не нашли - пытаемся найти литеру '=' (и тогда это присваивание), потом ищем '(' - это будет оператор, если опять промахнулись - ищем ':' (тогда это метка). Вот такой вот офигительный парсер у нас получился. Да-да, мало того, что уродливо, так каждую строку (которая была уже просканирована на этапе "разделения операторов" мы сканируем и сканируем и сканируем снова и снова - то один символ там ищем, то другой. Не стоит говорить, как от этого повышается скорость компиляции.
Я думаю, комиссии было бы неплохо натравить конкурсные задания на очень длинные тесты и посмеяться, глядючи на время "компиляции" Реконструкторова варианта. Но, к счастью, Реконструктор благоразумно ограничил максимальный размер программы 256 строками и поэтому такого рода тесты невозможны (в смысле - умирают по GPF).
Также нельзя не отметить изящность кода при разборе выражений вида:
print(a==5)
Реконструкторов вариант полагает, что здесь мы видим оператор присваивания (ну как же, есть символ '=', а его мы проверяем перед символом '(' ). И, соответственно, выпинывает ошибку. От так вот! На самом деле, даже хитрее, Реконструктор полагает, что параметром может быть только переменная, а выражение - низзя!
Также интересен разбор ошибок вида:
{
();
}
Реконструкторов вариант полагает, что мы тут видим вызов функции (ведь есть '(' ! ) И очень обижается, когда не находит такой - прям вплоть до GPF. Впрочем, если сказать:
{
tratata();
}
то ситуация ничуть не лучше - где-то там в глубине на запрос "найти tratata" выдается NULL и Реконструктор этот NULL ничтоже сумнящеся выдает на исполнение.
Вот так вот. Дальше мне было влом смотреть. Но что можно сказать точно - проблемы Реконструктора вовсе не в том, что у него времени не было. Проблемы в том, что он просто не умеет это делать, он - да - полный ноль в программировании.
Это не проблемы нехватки времени, это проблемы полнейшего неумения делать дизайн. Это убожество он еще называет "более чистым кодом", чем у меня.
Видимо, контролы в формочки он накидывать умеет (или регистры переслать туда-обратно). Тем и живет.
По этому поводу претензии Реконструктора про какие-то недостатки кодирования в моем проекте - это просто ирония судьбы какая-то.
Однако, это ишшо одно дополнение к "Дилетантизму". Вот ведь пишет чего-то человек, типа про компьютеры, типа притворяется профессионалом. А ведь если бы не этот конкурс - то никто бы и не узнал, хто есть Реконструктор.