[Конкурс] Транслятор языка

 
1 2 3 4 5 6 7 13
US Сергей-4030 #05.08.2008 23:03  @Kernel3#05.08.2008 22:34
+
-
edit
 

Сергей-4030

исключающий третье
★★

Сергей-4030>> Она мне говорит - ашипка в строке 13, неверный символ IF, ждем ';'. А я не врубаюсь - с какой стати. :lol: Ищу багу, ищу... А вы видите? ;)
Kernel3> Ээээээ... А в какой момент эта штука вообще должна из цикла выйти? %(

Это не тест исполнения, это тест парсера и "генератора кода".
 
EE Татарин #05.08.2008 23:10  @Сергей-4030#05.08.2008 22:26
+
-
edit
 

Татарин

координатор
★★★★☆
Сергей-4030> Гы. Только что моск сломал, думаючи, где у меня баг. Запускал такой тест:
Сергей-4030> Она мне говорит - ашипка в строке 13, неверный символ IF, ждем ';'. А я не врубаюсь - с какой стати. :lol: Ищу багу, ищу... А вы видите? ;)
Точки с запятой нет. Это ж не С.
Парзер работает отлично, бага в тесте. :)
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  
EE Татарин #05.08.2008 23:14  @Реконструктор#05.08.2008 21:48
+
-
edit
 

Татарин

координатор
★★★★☆
Реконструктор>>> Как насчет выполнения кода? Построчно или обработка перед выполнением, типа JIT compilation?
Татарин>> Это лично твой выбор - ТЗ и критерии его оценки тебе известны.
Татарин>> Ты ж не кодер, а программист. Выбор структуры программы и способов решения задач - за тобой.
Реконструктор> Супер. :D
Реконструктор> Насчет ^, пологаю, что правый операнд может быть что угодно, не только целочисленое?
Я предлагаю на степеень вообще забить болт. Лишнее усложнение, в смысле построения программы и изобретения алгоритмов это ничего не даёт (всё равно сами вы над математикой думать не будете, а кто будет - тот проиграет :)).

Если Сергей не против, я перепишу спецификацию.
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  
US Сергей-4030 #05.08.2008 23:51  @Татарин#05.08.2008 23:14
+
-
edit
 

Сергей-4030

исключающий третье
★★

Реконструктор>>>> Как насчет выполнения кода? Построчно или обработка перед выполнением, типа JIT compilation?
Татарин> Татарин>> Это лично твой выбор - ТЗ и критерии его оценки тебе известны.
Татарин> Татарин>> Ты ж не кодер, а программист. Выбор структуры программы и способов решения задач - за тобой.
Реконструктор>> Супер. :D
Реконструктор>> Насчет ^, пологаю, что правый операнд может быть что угодно, не только целочисленое?
Татарин> Я предлагаю на степеень вообще забить болт. Лишнее усложнение, в смысле построения программы и изобретения алгоритмов это ничего не даёт (всё равно сами вы над математикой думать не будете, а кто будет - тот проиграет :)).
Татарин> Если Сергей не против, я перепишу спецификацию.

Я только за. Мне было б идеально хранить константы в "исходном" виде, но для всех арифметических действий переводить их в обычный double или long - и потом вычислять. Тогда можно было б и степень не убирать. Если Реконструктор не против - я бы изменил таким образом, а то страдать с этой математикой больно долго.
 
US Сергей-4030 #05.08.2008 23:53
+
-
edit
 

Сергей-4030

исключающий третье
★★

Кстати, унарного минуса я не делал - нет в спецификации. :) Конечно, нивапрос (С), но уже поздно. ;)
 
US Сергей-4030 #05.08.2008 23:55
+
-
edit
 

Сергей-4030

исключающий третье
★★

Если бесконечную арифметику выкидываем, то обязуюсь сегодня вечером доделать и сдать. :) Понятно, что это будет не релиз и даже не преальфа, но думаю, что на такой хорошо определенной задаче проблем не возникнет.
 
US Сергей-4030 #05.08.2008 23:56
+
-
edit
 

Сергей-4030

исключающий третье
★★

Однако, не такая маленькая задачка получается. 25 килобайт кода уже наклепалось не считая прошлых использованных наработок. :( А ишшо не конец.
 
US Сергей-4030 #05.08.2008 23:59
+
-
edit
 

Сергей-4030

исключающий третье
★★

Кстати, у меня print() принимает не один аргумент, а сколько угодно, через запятую - не заметил, автоматически наклепал. Это проблема, надо убрать, или комиссия не будет сильно карать за такое несоответствие спецификациям? Опять же, нивапрос, но если комиссия закроет глаза - сэкономлю сто ударов по клавишам. :)
 
US Сергей-4030 #05.08.2008 23:59
+
-
edit
 

Сергей-4030

исключающий третье
★★

Гайзы, давайте ответ про бесконечную арифметику, а то я уже собираюсь реализовывать. Больно уж не хочется. :)
 
US Сергей-4030 #06.08.2008 00:39
+
-
edit
 

Сергей-4030

исключающий третье
★★

В общем, я "упростил" арифметику - оставил только double. Если "упрощенная" сойдет, то мой интерпретатор вполне работает, тока графику осталось приделать. Давайте, говорите, чего там решили. :)
 
US Сергей-4030 #06.08.2008 00:41
+
-
edit
 

Сергей-4030

исключающий третье
★★

Во как:

code text
  1. {
  2.         c=0;
  3.         b=1;
  4.         while(c<5) {
  5.                 b=b*2;
  6.                 c=c+1;
  7.                 if(c>3)
  8.                         print(1000,c);
  9.         };
  10.         print(b,c);
  11. }
  12. 1000 4.0
  13. 1000 5.0
  14. 32.0 5.0


:)
 
US Сергей-4030 #06.08.2008 00:43
+
-
edit
 

Сергей-4030

исключающий третье
★★

Вечером plot/unplot доделаю и пошлю, если будет добро. Реконструктор, в порядке добрососедского сотрудничества - вы как на такое упрощение? Или вам прикольно делать бесконечную арифметику?
 
US Сергей-4030 #06.08.2008 01:08
+
-
edit
 

Сергей-4030

исключающий третье
★★

О как:

code text
  1. {
  2.         i=0;
  3.         c=0;
  4.         b=1;
  5.         while(c<5) {
  6.                 :next:;
  7.                 b=b*2;
  8.                 c=c+1;
  9.                 i=i+1;
  10.                 if(c>3)
  11.                         print(1000,c);
  12.         };
  13.         print(1001,b,c,i);
  14.         c=0;
  15.         if(i<20)
  16.                 goto next;
  17.         print(1002,b,c,i);
  18. }
  19. 1000 4.0
  20. 1000 5.0
  21. 1001 32.0 5.0 5.0
  22. 1000 4.0
  23. 1000 5.0
  24. 1001 1024.0 5.0 10.0
  25. 1000 4.0
  26. 1000 5.0
  27. 1001 32768.0 5.0 15.0
  28. 1000 4.0
  29. 1000 5.0
  30. 1001 1048576.0 5.0 20.0
  31. 1002 1048576.0 0.0 20.0


:)
 
US Сергей-4030 #06.08.2008 01:25
+
-
edit
 

Сергей-4030

исключающий третье
★★

О как:

code text
  1. {
  2.         a=5;
  3.         b[a]=10;
  4.         a=a+1;
  5.         b[a]=9;
  6.         b[a][0]=0;
  7.         b[a][1]=1;
  8.         print(b[5],b[5+1],b[a][0],b[a][1],b[a][2]);
  9. }
  10. 10 9 0 1 NaN


:)
 
US Сергей-4030 #06.08.2008 01:29
+
-
edit
 

Сергей-4030

исключающий третье
★★

Типа, осталось минуток на тридцать графики и потом ишшо на тридцать все запаковать и написать немного документации. Куда слать, товарищи? :)
 
US Сергей-4030 #06.08.2008 06:12
+
-
edit
 

Сергей-4030

исключающий третье
★★

Во как:
code text
  1. {
  2.         a=1;
  3.         b=4;
  4.         c=0-5;
  5.  
  6.         d=b^2-4*a*c;
  7.  
  8.         if(d<0) {
  9.                 println(0);
  10.                 goto end;
  11.         };
  12.         if(d==0) {
  13.                 x=(0-b)/(2*a);
  14.                 println(1,x);
  15.                 goto end;
  16.         };
  17.         x[1]=(0-b+sqrt(d))/(2*a);
  18.         x[2]=(0-b-sqrt(d))/(2*a);
  19.         println(2,x[1],x[2]);
  20.         :end:;
  21. }
  22. 2 1.0 -5.0
 
US Сергей-4030 #06.08.2008 06:13
+
-
edit
 

Сергей-4030

исключающий третье
★★

Во как:
code text
  1. {
  2.         i=0;
  3.         while(i<10) {
  4.                 println(random(10));
  5.                 i=i+1;
  6.         }
  7. }
  8. 5.778421337861937
  9. 3.072370721210306
  10. 3.3617694000628418
  11. 3.5238200674427302
  12. 0.9943411212723374
  13. 9.964525647700416
  14. 3.4707146431000058
  15. 0.11221336876472088
  16. 4.8263574090883825
  17. 4.089106186459528
 
US Сергей-4030 #06.08.2008 06:48
+
-
edit
 

Сергей-4030

исключающий третье
★★

Хотелось бы уточнений здесь:

Размеры окна/экрана вывода - на усмотрение программиста, внутренние "программные" координаты с каждым выводом точки пересчитываются так, чтобы все точки всегда находились внутри экрана, всё изображение всегда внутри окна/экрана. Максимальное значение использованого когда-либо цвета соответсвует белому, минимальное - чёрному, цвета всех точек пересчитываются при каждом выводе.
 


У меня сейчас окно в центре, все вызовы plot() проходят в физические координаты окна. Это неверно? Нельзя ли немного поподробнее?
 
US Сергей-4030 #06.08.2008 07:11
+
-
edit
 

Сергей-4030

исключающий третье
★★

Такс... у меня все закончено. Из "расширений" спецификаций:

print() может принимать список значений, а не одно.

Дополнительные функции:
println(список)
sin(x)
cos(x)
random(max_number)
sqrt(x)
pi() - возвращает значение PI
e() - возвращает значение E
time() - возвращает число тиков.

Дополнительные процедуры:

show() - показывает окно куда выводятся точки
hide() - скрывает окно куда выводятся точки
shutdown() - закрывает окно, куда выводятся точки. Если вызвать эту функцию в конце программы, то программа завершится немедленно. Если не вызвать (и были вызовы plot()) - то после окончания работы интерпретатора окно будет оставаться открытым пока его не закроют

В процедуре plot(x,y,color,index) color кодируется триадой от 0 до 10, таким образом 101010 - это примерно белый (светло-светло серый), а 000000 - черный.

Упрощения спецификаций:

1. Нет бесконечной арифметики, все числа - обычные double
2. Я не понял насчет пересчета координат когда выводим plot (см пост выше). Разъясните, pls.

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

code text
  1. {
  2.         begin=time();
  3.  
  4.         i=0;
  5.         while(i<1000000) {
  6.                 a=random(20)-10;
  7.                 c=random(20)-10;
  8.                 b=random(20)-10;       
  9.                 d=b^2-4*a*c;
  10.                 if(d>0) {
  11.                         d=sqrt(d);
  12.                 };
  13.                 i=i+1;
  14.         };
  15.  
  16.         end=time();
  17.         print(end-begin);
  18. }


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

Ну, вроде все. Говорите, куда слать код. Код очень малокомментирован, правда - боялся, что Реконструктор меня обгонит. ;)
 
US Сергей-4030 #06.08.2008 07:17
+
-
edit
 

Сергей-4030

исключающий третье
★★

Примерный отчетик: накалякано ~48 кб нового кода (25 модулей), использованы кое-какие предыдущие наработки, итого кода примерно килобайт 70.
 
+
-
edit
 

Kernel3

аксакал

Моё мыло вот: fwrdf<сцобако>mail<тчкЪ>ru
Broken Windows® cures my ills and makes me feel alright... ©  
Это сообщение редактировалось 06.08.2008 в 18:06
BG Реконструктор #06.08.2008 15:56
+
-
edit
 
Вообще-то, готовый результат надо выкладывать публично, хотя бы выполнимый код.
Насчет математики, я вообще-то с нее начал. Точнее не начал, а думал с нее начать. :) Сейчас вот думаю - убирать или нет.
 
US Сергей-4030 #06.08.2008 16:09
+
-
edit
 

Сергей-4030

исключающий третье
★★

А что насчет упрощений арифметики? Комиссия/Реконструктор, вы как? То есть, теперь уже ее реализовать не вопрос, только явно сам изобретать велосипед я не буду, поищу реализацию в интернете. И Реконструктор вряд ли будет, насколько я понимаю. Так что если возможно работать в пределах Double, то я бы лучше так и делал.
 
RU Kernel3 #06.08.2008 16:10  @Сергей-4030#06.08.2008 16:09
+
-
edit
 

Kernel3

аксакал

Сергей-4030> А что насчет упрощений арифметики? Комиссия/Реконструктор, вы как?
Ну, я не против :)
Broken Windows® cures my ills and makes me feel alright... ©  
US Сергей-4030 #06.08.2008 16:14  @Реконструктор#06.08.2008 15:56
+
-
edit
 

Сергей-4030

исключающий третье
★★

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

Зачем? Это может быть подсказкой другому участнику. Тем более на Java, где легко сделать декомпиляцию. У комиссии - будет. После выводов комиссии она и опубликует.

Реконструктор> Насчет математики, я вообще-то с нее начал. Точнее не начал, а думал с нее начать. :) Сейчас вот думаю - убирать или нет.

Как хочешь. Страданий там не больно много, но неприятно. Это не проблема реализовать, 100% проще написания собственно интерпретатора, просто не хочется. И на C++ ни грамма не приятнее. Но если есть желание - говори, вернемся к бесконечной арифметике. У тебя уже готов интерпретатор и ты хочешь пострадать с арифметикой?
 
1 2 3 4 5 6 7 13

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru