Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Бесплатные среды / 25 сообщений из 33, страница 1 из 2
10.09.2007, 17:01
    #34789004
marik_86
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
Всем привет!
Какие существует бесплатные среды для следующих языков:
С++, Java, C#.

И какие бывают бесплатные СУБД?

Т.е., к примеру к Delphi нужна лицензия для продажи программ, написанных на Delphi. Соответственно можно купить лицензию и продавать спокойно.

Заранее спасибо!!!!
...
Рейтинг: 0 / 0
10.09.2007, 17:21
    #34789096
belugin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
...
Рейтинг: 0 / 0
11.09.2007, 02:08
    #34789789
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
belugin wrote:

> Eclipse.org home
> Eclipse C/C++ Development Tooling - CDT
> SharpDevelop @ic#code
Ещё DevCPP, Anjuta, Codeblocks, Netbeans, Monodevelop, KDevelop.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
13.09.2007, 09:00
    #34796379
Iskan Der
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
Для .NET (C# и С++) можно использовать разнообразные Express-версии Visual Studio и SQL Server 2005.
...
Рейтинг: 0 / 0
19.09.2007, 13:25
    #34811071
..:COBECTb:..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
marik_86Всем привет!
Какие существует бесплатные среды для следующих языков:
С++, Java, C#.

И какие бывают бесплатные СУБД?

Т.е., к примеру к Delphi нужна лицензия для продажи программ, написанных на Delphi. Соответственно можно купить лицензию и продавать спокойно.

Заранее спасибо!!!!
самая лучшая\настраиваемая\бесплатная - vi
...
Рейтинг: 0 / 0
19.09.2007, 14:06
    #34811303
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
...:COBECTb:.. wrote:

> самая лучшая\настраиваемая\бесплатная - vi
Может, все-таки, не vi, а vim?
Потом, толпа поклонников Emacs с вами не согласится....
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
19.09.2007, 15:57
    #34811765
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
повторюсь, но самый лучший вот:

echo "foo" >>bar.cpp
...
Рейтинг: 0 / 0
20.09.2007, 12:32
    #34814031
Iskan Der
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
maXmoповторюсь, но самый лучший вот:

echo "foo" >>bar.cpp
Windows-версия: copy con source_file.cpp :)
...
Рейтинг: 0 / 0
20.09.2007, 13:07
    #34814178
Artemiy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
Вот полностью бесплатные, полноценные IDE для с++, Delphi, С#, delphi .net
Качайте любую и используйте. Написанные программы можно легально продавать.
Бесплатные субд: Firebird, PostgreSQL, Oracle XE.
Забудьте про MS SQL Server ) и VS Express заодно (для native).
...
Рейтинг: 0 / 0
20.09.2007, 13:14
    #34814207
гавно
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
marik_86Всем привет!
Какие существует бесплатные среды для следующих языков:
С++, Java, C#.

Что вы понимаете под "средой"?

Среда разработки - это понятие широкое, всем читать Кернигана и Пайка: "Unix - универсальная среда программирования."


Ладно, если серьезно: есть Emacs, он лучше всех. Есть vim, он тоже неплох. Есть Eclipse, он для тупых.


И какие бывают бесплатные СУБД?


Вам что надо - "бесплатный" софт, или открытый софт? Бесплатно для самообразования и Ораклом пользоваться можно.


Т.е., к примеру к Delphi нужна лицензия для продажи программ, написанных на Delphi. Соответственно можно купить лицензию и продавать спокойно.

А не хер писать на дельфе.
...
Рейтинг: 0 / 0
20.09.2007, 15:16
    #34814827
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
Iskan DerWindows-версия: copy con source_file.cpp :)это досовская серсия, виндовс-версию я написал.
...
Рейтинг: 0 / 0
20.09.2007, 20:51
    #34816008
Софтверный проктолог
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
Гавно
Ладно, если серьезно: есть Emacs, он лучше всех. Есть vim, он тоже неплох. Есть Eclipse, он для тупых.

Простите, но вы дурак.
...
Рейтинг: 0 / 0
20.09.2007, 20:58
    #34816017
гавно
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
Софтверный проктолог Гавно
Ладно, если серьезно: есть Emacs, он лучше всех. Есть vim, он тоже неплох. Есть Eclipse, он для тупых.

Простите, но вы дурак.

Ошибаетесь. Дурак - это вы. И еще вы программировать не умеете. Совсем.
...
Рейтинг: 0 / 0
20.09.2007, 21:01
    #34816020
Софтверный проктолог
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
ГавноОшибаетесь. Дурак - это вы. И еще вы программировать не умеете. Совсем.
Попробуете доказать? Или, как обычно, пукнули да в кусты? :)
...
Рейтинг: 0 / 0
20.09.2007, 21:10
    #34816031
гавно
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
Софтверный проктолог ГавноОшибаетесь. Дурак - это вы. И еще вы программировать не умеете. Совсем.
Попробуете доказать? Или, как обычно, пукнули да в кусты? :)

Легко докажу. Покажите пример своего кода, а я докажу, что код - говно.
...
Рейтинг: 0 / 0
21.09.2007, 02:25
    #34816303
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
Гавно wrote:

> Ладно, если серьезно: есть Emacs, он лучше всех. Есть vim, он тоже
> неплох. Есть Eclipse, он для тупых.
Выбор редактора - вещь индивидуальная, кому-то просто может быть не
нужен весь функционал Emacs с его бесконечной расширяемостью. Равно как
и vim где надо использовать серии клавишь с hjkl (мне, например,
неудобно) навигацией и печатанием команд в несколько нажатий там, где
можно было использовать кливиатурные аккорды.

Софтверный проктолог
> Попробуете доказать? Или, как обычно, пукнули да в кусты? :)
Вы его ник прочитайте, а потом подумайте, есть смысл с ним спорить или
нет. По-моему, продуктивным обменом мнениями тут не светит, тем более
чувак даже не зарегился...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.09.2007, 08:37
    #34816440
razn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
Artemiy...
Забудьте про MS SQL Server ) и VS Express заодно (для native).
почему
...
Рейтинг: 0 / 0
21.09.2007, 09:49
    #34816630
Iskan Der
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
maXmo Iskan DerWindows-версия: copy con source_file.cpp :)это досовская серсия, виндовс-версию я написал.
Моя в винде тоже работает, причем можно заносить текст в несколько строчек - очень полезная дополнительная фича по сравнению с редактором echo ... >> ... :) Ну да ладно, хватит уже оффтопить :)
...
Рейтинг: 0 / 0
21.09.2007, 12:27
    #34817312
Софтверный проктолог
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
Гавно Софтверный проктолог
Попробуете доказать? Или, как обычно, пукнули да в кусты? :)

Легко докажу. Покажите пример своего кода, а я докажу, что код - говно.
Свой текущий код я не стал бы раскрывать. Лучше я вам напишу что-нибудь специально (желательно, небольшое; минут на 30 работы, в плане отдыха). Жду предложений.
...
Рейтинг: 0 / 0
21.09.2007, 13:21
    #34817590
гавно
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
Софтверный проктолог Гавно Софтверный проктолог
Попробуете доказать? Или, как обычно, пукнули да в кусты? :)

Легко докажу. Покажите пример своего кода, а я докажу, что код - говно.
Свой текущий код я не стал бы раскрывать. Лучше я вам напишу что-нибудь специально (желательно, небольшое; минут на 30 работы, в плане отдыха). Жду предложений.

На выбор:

- интерпретатор или компилятор простенького языка (можно, например, взять minim, про который сейчас идет срач в comp.lang.lisp)

- тупейший случай: аналитическое дифферинцирование, чтоб как минимум тригонометрия была.

- байессовский спам-фильтр (на входе текстовый файл, на выходе - "да" или "нет", ну и отдельно режим тренировки).

Каждая из задач - на пол часа работы максимум. Посмотрим, что такого может накорябать такой странный и мутный чел, которому emacs не нравится.
...
Рейтинг: 0 / 0
21.09.2007, 17:14
    #34818608
Софтверный проктолог
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
Гавно
На выбор:

- интерпретатор или компилятор простенького языка (можно, например, взять minim, про который сейчас идет срач в comp.lang.lisp)

- тупейший случай: аналитическое дифферинцирование, чтоб как минимум тригонометрия была.

- байессовский спам-фильтр (на входе текстовый файл, на выходе - "да" или "нет", ну и отдельно режим тренировки).

Каждая из задач - на пол часа работы максимум. Посмотрим, что такого может накорябать такой странный и мутный чел, которому emacs не нравится.
Я, кажется, понял, кто вы.

Обязательно использовать Lisp?
...
Рейтинг: 0 / 0
21.09.2007, 17:32
    #34818653
гавно
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
Софтверный проктологОбязательно использовать Lisp?

Только C++ или C# или Java. Иначе не честно.
...
Рейтинг: 0 / 0
21.09.2007, 23:28
    #34819158
гавно
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
30 мину прошли уже несчетное число раз. Делаем выводы, господа.
...
Рейтинг: 0 / 0
22.09.2007, 10:53
    #34819322
Софтверный проктолог
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
Гавно30 мину прошли уже несчетное число раз. Делаем выводы, господа.
Извини, я на работе занимаюсь своей работой.
Но я не забыл (вчера посмотрел на описание этого языка ). Попробую сегодня вечером выбрать время.
...
Рейтинг: 0 / 0
22.09.2007, 15:30
    #34819489
Софтверный проктолог
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Бесплатные среды
А, возможно, вы и правы.
И я действительно не умею программировать. Вообще.
Хотя интерпретатор (а скорее, фреймворк, блин) написал (с детства была такая мечта, раньше реализовать не удавалось). К сожалению, я не реализовал возможность вложенных условий в if.
И заняло это больше получаса.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
637.
638.
639.
640.
641.
642.
643.
644.
645.
646.
647.
648.
649.
650.
651.
652.
653.
654.
655.
656.
657.
658.
659.
660.
661.
662.
663.
664.
665.
666.
667.
668.
669.
670.
671.
672.
673.
674.
675.
676.
677.
678.
679.
680.
681.
682.
683.
684.
685.
686.
687.
688.
689.
690.
691.
692.
693.
694.
695.
696.
697.
698.
699.
700.
701.
702.
703.
704.
705.
706.
707.
708.
709.
710.
711.
712.
713.
714.
715.
716.
717.
718.
719.
720.
721.
722.
723.
724.
725.
726.
727.
728.
729.
730.
731.
732.
733.
734.
735.
736.
737.
738.
739.
740.
741.
742.
743.
744.
745.
746.
747.
748.
749.
750.
751.
752.
753.
754.
755.
756.
757.
758.
759.
760.
761.
762.
763.
764.
765.
766.
767.
768.
769.
770.
771.
772.
773.
774.
775.
776.
777.
778.
779.
780.
781.
782.
783.
784.
785.
786.
787.
788.
789.
790.
791.
792.
793.
794.
795.
796.
797.
798.
799.
 import  java.io.*;
 import  java.util.*;

 public   class  Minim {

     public  Minim() {
    }

     public   static  String extractBlock(StringBuffer buffer) {
         char  chars[] = buffer.toString().toCharArray();
         int  leftP =  0 ;
         int  rightP =  0 ;
         int  firstLeft =  0 ;
         for  ( int  i =  0 ; i < chars.length; i++) {
             if  (chars[i] == LEFT_BRACE) {
                 if  (leftP ==  0 ) {
                    firstLeft = i;
                }
                leftP++;
            }  else   if  (chars[i] == RIGHT_BRACE) {
                rightP++;
            }
             if  (leftP >  0  && leftP == rightP) {
                 char [] resultArray =  new   char [i -  1  - firstLeft];
                System.arraycopy(chars,  1  + firstLeft, resultArray,  0 ,
                                 i -  1  - firstLeft);
                buffer.replace( 0 , i +  1 , "");
                 return   new  String(resultArray);
            }
        }
         return   null ;
    }


     public   void  execFromFile(String fileName)  throws  IOException, MException {
        File file =  new  File(fileName);
        BufferedReader reader =  new  BufferedReader( new  FileReader(file));

        StringBuffer text =  new  StringBuffer();
        String line =  null ;

         while  ((line = reader.readLine()) !=  null ) {
            text.append(line.trim()).append(" ");
        }

        exec(text);
    }

     private   final   static   char  LEFT_BRACE = '(';
     private   final   static   char  RIGHT_BRACE = ')';
     private   final   static   char  STRING_DELIMITER = '"';


     public   void  exec(StringBuffer programText)  throws  MException {
        System.out.println("launch program ... " + programText);
        MinimProcessor processor =  new  MinimProcessor(programText.toString(),
                System.out,  new  Scanner(System.in));
        processor.execute();
    }

     public   static   void  main(String args[])  throws  Exception {
         if  (args.length !=  1 ) {
            System.out.println("Use Minim <filename>");
             return ;
        }  else  {
            Minim minim =  new  Minim();
            minim.execFromFile(args[ 0 ]);
        }
    }

     private   class  MinimProcessor {

         private  StringBuffer text;
         private  PrintStream out;
         private  Scanner in;
         private  Collection<MinimProgram> programs =  new  ArrayList<MinimProgram>();

         public  MinimProcessor(String text, PrintStream out, Scanner in)  throws 
                MCompileException {
             this .text =  new  StringBuffer(text);
             this .out = out;
             this .in = in;

             this .preProcess();
        }


         private   void  preProcess()  throws  MCompileException {
            System.out.println("Preprocessing...");
            String block =  null ;
             while  ((block = Minim.extractBlock(text)) !=  null ) {
                programs.add( new  MinimProgram(block, out, in));
            }
        }


         public   void  execute()  throws  MExecException {
             if  (programs.size() ==  0 ) {
                 throw   new  MExecException("There are no programs to execute.");
            }
            System.out.println("Executing...");
             long  time = System.currentTimeMillis();
             for  (MinimProgram program : programs) {
                program.execute();
            }
            System.out.println("Program successfully executed in " +
                               (System.currentTimeMillis() - time) + " msec");
        }
    }


     private   class  MinimProgram {

         private  List<Command> executionLines =  new  ArrayList<Command>();

         private  Command[] commands =  null ;

         private  Map<String, Integer> tags =  new  HashMap<String, Integer>();
         private  Set<String> multipleTags =  new  HashSet<String>();

         private  List< Double > variables =  new  ArrayList< Double >();
         private  Map<String, Integer> varPositions =  new  HashMap<String, Integer>();


         private   Double [] vars =  null ;

         private  String text;
         private  PrintStream out;
         private  Scanner in;


         private   long  MAX_ITERATIONS =  100000000 ;

         private  CommandBuilder builder =  new  CommandBuilder( this );

         public  MinimProgram(String text, PrintStream out, Scanner in)  throws 
                MCompileException {
             this .out = out;
             this .in = in;
             this .text = text;
             this .preCompile();
             this .postCompile();
        }

         long  time;
         public   void  startTick() {
            time = System.currentTimeMillis();
        }

         long  pause;
         public   void  pauseTick() {
            pause = System.currentTimeMillis();
        }

         public   void  resumeTick() {
            time += (System.currentTimeMillis() - pause);
        }

         public   long  stopTick() {
             return  (System.currentTimeMillis() - time);
        }

         public   void  preCompile()  throws  MCompileException {
            System.out.println("Precompile");
             this .parseBlock( this .text);
        }

         public   void  parseBlock(String block)  throws  MCompileException {
             char  chars[] = block.toCharArray();
             int  leftP =  0 ;
             int  rightP =  0 ;

            StringBuffer result =  new  StringBuffer();
             for  ( int  i =  0 ; i < chars.length; i++) {
                 if  (chars[i] == LEFT_BRACE) {

                     if  (leftP ==  0 ) {
                        String res = result.toString().trim();
                         if  (res.length() >  0 ) {
                            createCommand(res, true);
                        }
                        result.delete( 0 , result.length());
                    }

                    leftP++;
                }  else   if  (chars[i] == RIGHT_BRACE) {
                    rightP++;
                }
                result.append(chars[i]);

                 if  (chars[i] == ' ' && leftP ==  0 ) {
                    String res = result.toString().trim();
                     if  (res.length() >  0 ) {
                        createCommand(res, true);
                    }
                    result.delete( 0 , result.length());

                }

                 if  (leftP >  0  && leftP == rightP) {

                    String res = result.toString().trim();
                    System.out.println("GO FOR " + res + " and " + leftP);
                     if  (res.length() >  0 ) {
                        createCommand(res.substring( 0 , res.length() -  1 ).
                                      substring( 1 ), false);
                    }
                    result.delete( 0 , result.length());
                    leftP =  0 ;
                    rightP =  0 ;
                }
            }

            String res = result.toString().trim();
             if  (res.length() >  0 ) {
                createCommand(res, true);
            }

        }


         public   int  createCommand(String text,  boolean  isTag)  throws 
                MCompileException {
             int  pos = appendCommand( null );
            builder.createCommand(pos, text, isTag);
             return  pos;
        }

         public   void  setCommand( int  pos, Command cmd) {
             this .executionLines.set(pos, cmd);
        }

         public   int  appendTag(String tagName) {
            tagName = tagName.toLowerCase();
            Integer pos =  new  Integer(executionLines.size() -  1 );
             if  (tags.containsKey(tagName)) {
                multipleTags.add(tagName);
            }
            tags.put(tagName, pos);
            System.out.println("APPEND TAG '" + tagName + "' as " + pos);
             return  pos.intValue();
        }

         public   int  registerCallableTag(String tagName)  throws  MCompileException {
            tagName = tagName.toLowerCase();
             if  (multipleTags.contains(tagName)) {
                 throw   new  MCompileException("Program refer to tag '" + tagName +
                                            "'. This tag presents more than one time in program. Unknown destination.");
            }
            Integer pos = tags.get(tagName);
             if  (pos ==  null ) {
                 throw   new  MCompileException("Program refer to tag '" + tagName +
                                            "'. This tag is not defined. Unknown destination.");

            }
             return  pos.intValue();
        }

         public   int  appendVariable(String variable,  boolean  asInput) {
             if  (variable.length() ==  0 ) {
                 throw   new  RuntimeException("Variable is empty");
            }
            variable = variable.toLowerCase();
            Integer pos = varPositions.get(variable);
             if  (pos ==  null ) {
                variables.add(asInput ?  new   Double ( 0 ) :  null );
                pos =  new  Integer(variables.size() -  1 );
                varPositions.put(variable, pos);
            }
            System.out.println("VAR '" + variable + "' : " + pos.intValue() +
                               " :: " + asInput);
             return  pos.intValue();
        }

         public   double  getVariable( int  pos) {
             return  vars[pos].doubleValue();
        }

         public   void  setVariable( int  pos,  double  value) {
            vars[pos] =  Double .valueOf(value);
        }


         public   int  appendCommand(Command command) {
            executionLines.add(command);
             return  executionLines.size() -  1 ;
        }


         public   void  postCompile()  throws  MCompileException {
            System.out.println("Postcompile");

             for  (Map.Entry<String, Integer> entry : varPositions.entrySet()) {
                 if  (variables.get(entry.getValue().intValue()) ==  null ) {
                     throw   new  MCompileException(
                            "Error in variable " + entry.getKey() +
                            ". This variable is not initialized");
                }
            }

            commands = (Command[]) executionLines.toArray( new  Command[ 0 ]);
            vars = ( Double []) variables.toArray( new   Double [ 0 ]);

             for  ( int  i =  0 ; i < commands.length; i++) {
                 if  (commands[i] !=  null ) {
                    commands[i].postCompile();
                }
            }

            // clear cache
            executionLines.clear();
            variables.clear();
            tags.clear();
            varPositions.clear();
            multipleTags.clear();
        }

         public   void  execute()  throws  MExecException {
            System.out.println("Executing");
             int  globalIndex =  0 ;
             int  maxLength = commands.length;

             this .startTick();

             int  iterations =  0 ;
             boolean  anyCmd = false;
             for  (globalIndex =  0 ; globalIndex < maxLength; globalIndex++) {
                Command cmd = commands[globalIndex];
                 if  (cmd !=  null ) {
                    anyCmd = true;
                     if  (cmd.execute()) {
                        globalIndex = cmd.getRedirect();
                         if  (globalIndex <  0 ) {
                             throw   new  MExecException(
                                    "Exception during program run. Destination index " +
                                    globalIndex + " unknown.");
                        }  else   if  (globalIndex >= maxLength) {
                             break ;
                        }

                    }
                }
                iterations++;
                 if  (iterations >= MAX_ITERATIONS) {
                     throw   new  MExecException("Program do more than " +
                                             MAX_ITERATIONS +
                                             " iterations and now over");
                }
            }

            System.out.println("Executed by " +  this .stopTick() + " msec");

             if  (!anyCmd) {
                 throw   new  MExecException(
                        "Command list is empty. Nothing to execute.");
            }

        }
    }


     private   abstract   class  Command {

         public   int  getRedirect() {
             return  - 1 ;
        }

         public   abstract   boolean  execute()  throws  MExecException;

        MinimProgram program;
         public   void  setProgram(MinimProgram program) {
             this .program = program;
        }

         public   abstract   void  init(String data)  throws  MCompileException;

         public   void  postCompile()  throws  MCompileException {
            //
        }
    }


     private   class  CommandNewLine  extends  Command {
         public   boolean  execute() {
            program.out.println();
             return  false;
        }

         public   void  init(String data) {
            //
        }

    }


     private   class  CommandPrint  extends  Command {

         private   boolean  static_;

         private  String data;
         private   int  variable;

         public   boolean  execute() {

             if  (static_) {
                program.out.print(data);
            }  else  {
                program.out.print(program.getVariable(variable));
            }
             return  false;
        }

         public   void  init(String data) {
             if  (data.charAt( 0 ) == STRING_DELIMITER) {
                static_ = true;
                 this .data = data.substring( 1 );
                 if  ( this .data.charAt( this .data.length() -  1 ) ==
                    STRING_DELIMITER) {
                     this .data =  this .data.substring( 0 ,  this .data.length() -  1 );
                }
            }  else  {
                 try  {
                     double  constant =  Double .parseDouble(data);
                     this .data = data;
                    static_ = true;
                }  catch  (NumberFormatException nfe) {
                    static_ = false;
                    variable = program.appendVariable(data, false);
                }
            }
        }
    }


     private   class  CommandInput  extends  Command {
         int  variable;

         public   boolean  execute() {
            program.pauseTick();
             double  data = program.in.nextDouble();
            program.resumeTick();
            program.setVariable(variable, data);
             return  false;
        }

         public   void  init(String data) {
            variable = program.appendVariable(data, true);
        }
    }


     private   class  CommandPlus  extends  CommandInput {
         public   boolean  execute() {
            program.setVariable(variable, program.getVariable(variable) +  1 );
             return  false;
        }
    }


     private   class  CommandMinus  extends  CommandPlus {
         public   boolean  execute() {
            program.setVariable(variable, program.getVariable(variable) -  1 );
             return  false;
        }
    }


     private   class  CommandAssign  extends  Command {
         public   boolean  execute() {
             if  (static_) {
                program.setVariable(leftSide, right);
            }  else  {
                program.setVariable(leftSide, program.getVariable(rightSide));
            }
             return  false;
        }

         public   void  init(String data)  throws  MCompileException {
             int  space = data.indexOf(" ");
            String left = data.substring( 0 , space).trim();
            String right = data.substring(space +  1 ).trim();

             try  {
                 double  tmp =  Double .parseDouble(left);
                 throw   new  MCompileException("Left side of assignment '" + data +
                                            "' is not an variable: " + left);
            }  catch  (NumberFormatException nfe) {
            }

            leftSide = program.appendVariable(left, true);
             try  {
                 this .right =  Double .parseDouble(right);
                static_ = true;
            }  catch  (NumberFormatException nfe) {
                static_ = false;
                rightSide = program.appendVariable(right, false);
            }

        }

         int  leftSide;
         int  rightSide;
         double  right;
         boolean  static_;

    }


     private   class  CommandGoto  extends  Command {
         public   boolean  execute() {
             return  true;
        }

         public   int  getRedirect() {
             return  label;
        }

         public   void  init(String data)  throws  MCompileException {
            textLabel = data;
        }

         public   void  postCompile()  throws  MCompileException {
             this .label = program.registerCallableTag(textLabel);
        }

        String textLabel;
         int  label;
    }


     private   class  CommandIf  extends  Command {

         public   boolean  execute()  throws  MExecException {
            isTrue_ = condition.getCondition();
             return  true;
        }

         public   int  getRedirect() {
             return  isTrue_ ? labelTrue : labelFalse;
        }

         public   void  init(String data)  throws  MCompileException {
            StringBuffer buf =  new  StringBuffer(data);
            String condition = Minim.extractBlock(buf);
             int  brace = buf.indexOf(String.valueOf(LEFT_BRACE));
             if  (brace <=  0 ) {
                 throw   new  MCompileException("Unable to parse IF condition '" +
                                            data + "'. Can't find symbol " +
                                            LEFT_BRACE +
                                            " in properly position");
            }
            System.out.println("CONDITION = " + condition);
            String then_ = buf.substring(0, brace);
            if (!then_.trim().toLowerCase().equals("then")) {
                throw new MCompileException("Unable to parse IF condition '" +
                                            data + "'. Can't find 'then'");

            }
            buf.delete( 0 , brace);
             int  elsePos = buf.indexOf("else");
             if  (elsePos <=  0 ) {
                 throw   new  MCompileException("Unable to parse IF condition '" +
                                            data +
                                            "'. Can't find 'else' in properly position");
            }

            String s = buf.substring(0, elsePos);
            if (s.indexOf(String.valueOf(LEFT_BRACE)) >= 0) {
                String trueCondition = Minim.extractBlock(buf);
                labelTrue = program.appendTag(String.valueOf(this.hashCode()) +
                                              "@tr");
                System.out.println("CREATE TRUE CONDITION = " + trueCondition);
                program.parseBlock(LEFT_BRACE + trueCondition + RIGHT_BRACE);

            } else {
                labelTrue = program.appendTag(s.trim());
                buf.delete(0, elsePos);
            }
            program.createCommand("goto " + this.hashCode(), false);

            String else_ = buf.toString().trim();
            if (!else_.startsWith("else")) {
                throw new MCompileException("Unable to parse IF condition '" +
                                            data + "'. Can't find 'else'");

            }
            buf.delete( 0 ,  5 );
             if  (buf.indexOf(String.valueOf(LEFT_BRACE)) >=  0 ) {
                String falseCondition = Minim.extractBlock(buf);
                System.out.println("CREATE FALSE CONDITION = " + falseCondition);
                labelFalse = program.appendTag(String.valueOf( this .hashCode()) +
                                               "@fls");
                program.parseBlock(LEFT_BRACE + falseCondition +
                                   RIGHT_BRACE);

            }  else  {
                labelFalse = program.appendTag(buf.toString().trim());
            }

            program.appendTag(String.valueOf( this .hashCode()));

             this .condition =  new  Condition(condition);
        }

        Condition condition;
         boolean  isTrue_ = false;
         int  labelTrue;
         int  labelFalse;

         private   class  Condition {
             public  Condition(String data)  throws  MCompileException {
                 int  pos = data.indexOf(' ');
                String left = data.substring( 0 , pos);
                 if  (left.trim().length() ==  0 ) {
                     throw   new  MCompileException(
                            "Unable to extract left side of condition '" + data +
                            "'");
                }

                 int  pos2 = data.lastIndexOf(' ');
                String right = data.substring(pos2 +  1 );
                 if  (right.trim().length() ==  0 ) {
                     throw   new  MCompileException(
                            "Unable to extract right side of condition '" +
                            data +
                            "'");
                }

                String operator = data.substring(pos +  1 , pos2).trim();
                 if  (operator.equals("<")) {
                    operation = '<';
                }  else 
                 if  (operator.equals(">")) {
                    operation = '>';
                }  else 
                 if  (operator.equals("=")) {
                    operation = '=';
                }  else  {
                     throw   new  MCompileException("Unknown operator '" + operator +
                                                "' in condition '" + data + "'");
                }

                 try  {
                     this .left =  Double .parseDouble(left);
                    left_static_ = true;
                }  catch  (NumberFormatException nfe) {
                    leftSide = program.appendVariable(left, false);
                }

                 try  {
                     this .right =  Double .parseDouble(right);
                    right_static_ = true;
                }  catch  (NumberFormatException nfe) {
                    rightSide = program.appendVariable(right, false);
                }

            }

             public   boolean  getCondition()  throws  MExecException {
                 if  (!left_static_) {
                    left = program.getVariable(leftSide);
                }
                 if  (!right_static_) {
                    right = program.getVariable(rightSide);
                }
                 switch  (operation) {
                 case  '<':
                     return  left < right;
                 case  '>':
                     return  left > right;
                 case  '=':
                     return  left == right;
                 default :
                     throw   new  MExecException("Unknown operation '" + operation +
                                             "'");

                }
            }

             int  leftSide;
             int  rightSide;

             double  left;
             double  right;

             char  operation;

             boolean  left_static_;
             boolean  right_static_;


        }

    }


     private   class  CommandBuilder {

         private  MinimProgram program;


         public  CommandBuilder(MinimProgram program) {
             this .program = program;
        }

         private   final   static  String COMMAND_PRINT = "print ";
         private   final   static  String COMMAND_INPUT = "input ";
         private   final   static  String COMMAND_SUB = "-- ";
         private   final   static  String COMMAND_PLUS = "++ ";
         private   final   static  String COMMAND_IS = " is ";
         private   final   static  String COMMAND_GOTO = "goto ";
         private   final   static  String NL = "nl";
         private   final   static  String COMMAND_IF = "if ";

         private   void  createCommand( int  pos, String text,  boolean  isTag)  throws 
                MCompileException {

            System.out.println("Processing cmd '" + text + "' at " + pos +
                               " and isTag ? " + isTag);

            Command command =  null ;
            String data =  null ;
            text = text.trim();
            String cmd = text.toLowerCase();
             if  (isTag) {
                 if  (cmd.equals(NL)) {
                    command =  new  CommandNewLine();
                    data =  null ;
                }  else  {
                    program.appendTag(text);
                }
            }  else  {
                 int  txtPos =  0 ;
                 if  (cmd.startsWith(COMMAND_PRINT)) {
                    command =  new  CommandPrint();
                    data = text.substring(COMMAND_PRINT.length());
                }  else   if  (cmd.startsWith(COMMAND_INPUT)) {
                    command =  new  CommandInput();
                    data = text.substring(COMMAND_INPUT.length());
                }  else   if  (cmd.startsWith(COMMAND_SUB)) {
                    command =  new  CommandMinus();
                    data = text.substring(COMMAND_SUB.length());
                }  else   if  (cmd.startsWith(COMMAND_PLUS)) {
                    command =  new  CommandPlus();
                    data = text.substring(COMMAND_PLUS.length());
                }  else   if  (cmd.startsWith(COMMAND_GOTO)) {
                    command =  new  CommandGoto();
                    data = text.substring(COMMAND_GOTO.length());
                }  else   if  ((txtPos = cmd.indexOf(COMMAND_IS)) >  0 ) {
                    command =  new  CommandAssign();
                    data = text.substring( 0 , txtPos) +
                           text.substring(txtPos + COMMAND_IS.length() -  1 );
                }  else   if  (cmd.startsWith(COMMAND_IF)) {
                    command =  new  CommandIf();
                    data = text.substring(COMMAND_IF.length());
                }  else  {
                     throw   new  MUnknownException("Unable to recognize command " +
                                                text);
                }
            }
             if  (command !=  null ) {
                System.out.println("init for cmd " + command + " = " + data);
                command.setProgram(program);
                command.init(data);

                program.setCommand(pos, command);
            }
        }
    }
}


 class  MException  extends  Exception {
     public  MException(String message) {
         super (message);
    }
}


 class  MExecException  extends  MException {
     public  MExecException(String message) {
         super (message);
    }
}


 class  MCompileException  extends  MException {
     public  MCompileException(String message) {
         super (message);
    }
}


 class  MUnknownException  extends  MCompileException {
     public  MUnknownException(String message) {
         super (message);
    }
}


Выполнял
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
(
(print "Add x and y")
nl
(print "Input x: ")
(input x)
nl
(print "Input y: ")
(input y)
main
(if (x =  0 ) then (goto end) else (goto subx1))

subx1
(-- x)
(++ y)
(goto main)

end
nl
(print "total of x and y is ")
(print y)
nl)



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
launch program ... ( (print "Add x and y") nl (print "Input x: ") (input x) nl (print "Input y: ") (input y) main (if (x =  0 ) then (goto end) else (goto subx1))  subx1 (-- x) (++ y) (goto main)  end nl (print "total of x and y is ") (print y) nl) 
Preprocessing...
Executing...
Add x and y
Input x:  100000 

Input y:  100000 

total of x and y is  200000 . 0 
Executed by  47  msec
Program successfully executed in  3234  msec



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
launch program ... ( (print "Add x and y") nl (print "Input x: ") (input x) nl (print "Input y: ") (input y) main (if (x =  0 ) then (goto end) else (goto subx1))  subx1 (-- x) (++ y) (goto main)  end nl (print "total of x and y is ") (print y) nl) 
Preprocessing...
Executing...
Add x and y
Input x:  1000000 

Input y:  1000000 

total of x and y is  2000000 . 0 
Executed by  281  msec
Program successfully executed in  3641  msec



Считаю себя абсолютно несоответсвующим занимой должности. Серьезно.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Бесплатные среды / 25 сообщений из 33, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]