powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Бесплатные среды
33 сообщений из 33, показаны все 2 страниц
Бесплатные среды
    #34789004
marik_86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Какие существует бесплатные среды для следующих языков:
С++, Java, C#.

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

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

Заранее спасибо!!!!
...
Рейтинг: 0 / 0
Бесплатные среды
    #34789096
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Бесплатные среды
    #34789789
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
Бесплатные среды
    #34796379
Iskan Der
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для .NET (C# и С++) можно использовать разнообразные Express-версии Visual Studio и SQL Server 2005.
...
Рейтинг: 0 / 0
Бесплатные среды
    #34811071
Фотография ..:COBECTb:..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marik_86Всем привет!
Какие существует бесплатные среды для следующих языков:
С++, Java, C#.

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

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

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

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

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

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

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

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


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


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


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


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

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

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

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

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

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

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

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

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

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

На выбор:

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

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

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

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

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

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

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

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

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

Только C++ или C# или Java. Иначе не честно.
...
Рейтинг: 0 / 0
Бесплатные среды
    #34819158
гавно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
30 мину прошли уже несчетное число раз. Делаем выводы, господа.
...
Рейтинг: 0 / 0
Бесплатные среды
    #34819322
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавно30 мину прошли уже несчетное число раз. Делаем выводы, господа.
Извини, я на работе занимаюсь своей работой.
Но я не забыл (вчера посмотрел на описание этого языка ). Попробую сегодня вечером выбрать время.
...
Рейтинг: 0 / 0
Бесплатные среды
    #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
Бесплатные среды
    #34819513
гавно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Софтверный проктологА, возможно, вы и правы.
И я действительно не умею программировать. Вообще.
Хотя интерпретатор (а скорее, фреймворк, блин) написал (с детства была такая мечта, раньше реализовать не удавалось). К сожалению, я не реализовал возможность вложенных условий в if.
И заняло это больше получаса.

На самом деле не так уж и плохо для первого раза, от фанатика IDE я ожидал худшего кода. Конечно же, весьма громоздко, но идея относительно верная, и, кстати, в весьма функциональном стиле. Все то же самое можно было сделать значительно короче на той же Java, и значительно читабельнее. И, кстати, это тот случай, когда компилятор сделать было бы проще, чем интерпретатор, даже меньше чем пол часа потребуется.

Но глядя на ваш код, легко можно понять, почему вы так зависите от IDE с цацками. Поверьте - ваш стиль далеко не единственно верный и далеко не лучший. При более формальном подходе к программированию IDE с цацками будет только мешать, а вот хороший, умный, гибкий, настраиваемый текстовый редактор - вещь обязательная.
...
Рейтинг: 0 / 0
Бесплатные среды
    #34823260
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавно пишет:
> Автор: Гавно
> Софтверный проктолог
так я чето непонял. объясните тупому.
у кого оказался длиннее?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Бесплатные среды
    #34823733
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k
Гавно пишет:
> Автор: Гавно
> Софтверный проктолог
так я чето непонял. объясните тупому.
у кого оказался длиннее?
Posted via ActualForum NNTP Server 1.4
В итоге выяснили, што у меня там голое место, как у пупсега.
...
Рейтинг: 0 / 0
Бесплатные среды
    #34826422
Iskan Der
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Софтверный проктологВ итоге выяснили, што у меня там голое место, как у пупсега.
Пагубное влияние новых технологий на примере современных IDE на здоровье человека (особенно мужское) можно считать доказанным :)
...
Рейтинг: 0 / 0
Бесплатные среды
    #34827159
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Iskan Der
Пагубное влияние новых технологий на примере современных IDE на здоровье человека (особенно мужское) можно считать доказанным :)
У меня даже к своей подруге желание пропало. Хотя не факт, что это не из-за онанизма.
...
Рейтинг: 0 / 0
Бесплатные среды
    #34827251
razn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безплатные среды и онанизм...
...
Рейтинг: 0 / 0
Бесплатные среды
    #34984985
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу предупреждаю, что этот вопрос только к любителям IDE :)
Подскажите как прикрутить libc-man к NetBeans С++/Eclipse С++. Вообще возможно ли такое, вот к Code::Bloks всё просто на ура прикручивается. Ведь не может же быть такого у других?
Спасибо.
...
Рейтинг: 0 / 0
Бесплатные среды
    #34985466
&#36;
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Софтверный проктологА, возможно, вы и правы.
И я действительно не умею программировать. Вообще.
Хотя интерпретатор (а скорее, фреймворк, блин) написал (с детства была такая мечта, раньше реализовать не удавалось). К сожалению, я не реализовал возможность вложенных условий в if.
И заняло это больше получаса.
....
ух, блин и охота тебе было это писать! если конечнож это твое.
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Бесплатные среды
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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