1. C++ / Говнокод #12592

    +16

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    char tab1[22][8]={"program","var","begin","end","int","float","bool","if","then","else","for","to","do","while","readln","writeln","as","||","!","&&","true","false"};
    char tab2[18][3]={"==","<",">","+","-","*","/","(",")",".",",",";"," ","!=","<=",">=",10};
    
    //Много кода
    
    if(!strcmp("program",st.top())&&!strcmp("program",&mas[j][0]))
    	{
    		st.pop();
    		j++;
    	}
    	else
    		if(!strcmp("var",st.top())&&!strcmp("var",&mas[j][0]))
    		{
    			st.pop();
    			j++;
    		}
    		else
    			if(!strcmp("begin",st.top())&&!strcmp("begin",&mas[j][0]))
    		{
    			st.pop();
    			j++;
    		}
    		else
    			if(!strcmp("end",st.top())&&!strcmp("end",&mas[j][0]))
    		{
    			st.pop();
    			j++;
    		}
    		else
    			if(!strcmp("int",st.top())&&!strcmp("int",&mas[j][0]))
    		{
    			st.pop();
    			j++;
    		}
    		else
    			if(!strcmp("float",st.top())&&!strcmp("float",&mas[j][0]))
    		{
    			st.pop();
    			j++;
    		}
    
    //Еще строк 200 такого

    Запостил: Abbath, 14 Февраля 2013

    Комментарии (53) RSS

    • таинственный и загадочный анализатор...
      Ответить
      • Паскаледетектор?
        Ответить
        • На самом деле, это курсач - компилятор модельного паскалеподобного языка . Но писал его мудак. Там 1600 строк говна.
          Ответить
          • кста насчет вложенности if-else, на баше была забавная цитатка в которой говорилось что вижуал не переваривает больше 128ми вложений. Они просто игнорируются
            Ответить
          • > Но писал его мудак. Там 1600 строк говна.
            НОВОЕ ДОСТИЖЕНИЕ!
            Вы написали 1600 строк говна и получаете новое звание - вы мудак.
            Ответить
            • Ачивки говнокода?
              Индус, быдлокодер со стажем, рахитектор, копипастер, пхпешник, крестоблядь итд..
              Ответить
              • + неосилятор, унылотролль, спичкооптимизатор, проблемофабрикант
                Непонятно, кто должен раздавать эти ачивки...
                Ответить
    • > mas
      Вспоминается говнецо из моих первых программ на борманд паскале...
      type mas = array [1..10] of integer
      Ответить
    • Кусок char tab1[22][8]=... прям в трепет приводит при мысли, что есть студенты с мозгом, физически способным разрулить все эти индексы.
      Оно реально работает?
      Ответить
      • что тебя напрягло?
        Ответить
        • ну почему 22 и 8, а не 10 и 6 например
          или это какая-то автогенерённая таблица для парсинга?
          Ответить
          • обычная декларация многомерного массива, читать справа налево
            [8] - размерность одного элемента в чарах - очевидно, надо взять максимальную, чтобы любая строка смогла уместиться
            [22] - размерность массива, в котором каждый элемент - [8] чаров

            собственно [22] указывать в данном случае не было нужно - можно было бы обойтись и tab[][8] = { ... } - компилятор бы сам разрулил число элементов из декларации
            такое указание явно будет нужно, тогда когда декларация будет меньше, чем мы заявляем число элементов для размещения (т.е. не наш случай)

            надмозгом для этого быть не надо, достаточно прочитать первые страницы любой книжки по С
            Ответить
            • Т.к. мне обычно очень влом считать от пяти и выше, а массив юзается только для чтения, я бы запилил его вот так:
              const char *tab1[] = {
                  "program", "var", "begin", "end", "int", "float", "bool",
                  "if","then","else","for","to", "do", "while","readln",
                  "writeln", "as", "||", "!", "&&", "true", "false"
              };
              Ответить
              • ага
                если не принимать во внимание, что для студентоработы на тему "говнокомпилятор для сферического говнопаскалеязыка" этого массива, скорее всего, вообще быть не должно
                Ответить
                • Какой-то странный язык, в нем есть и then и int, и program и &&. Сискаль?

                  > этого массива, скорее всего, вообще быть не должно
                  Ага, в идеале flex + bison + пара дней на раскуривание = говноязык на коленке. Можно даже компиляцию в простой p-код успеть запилить...
                  Ответить
                  • не странный
                    учебный
                    препод генерит условие в виде РБНФ, а студентота потом его осчастливливает результатом
                    Ответить
                    • > осчастливливает результатом
                      http://www.youtube.com/watch?v=FwZO5tWCRjA
                      Ответить
                  • llvm наше всё
                    Ответить
                    • Для студенческой лабы имхо оверкилл...
                      Ответить
                      • ага
                        я помню буст.спирит2 по этому поводу осилил
                        тащемта перевод аст дерева в исполняемый вид не делал, и так хватило за глаза
                        Ответить
                      • Курсач это, и там и лексер и парсер надо было ручками писать.
                        Ответить
                        • А генерацию машинного кода?
                          Ответить
                          • замполит, это уже лишнее (с)
                            Ответить
                            • Что тогда на выходе у этого компилятора? AST?
                              Ответить
                              • ну я печатал разобранное дерево в красивом виде, сдавал не я, поэтому хз что показывали остальные :)
                                кроме дерева ведь еще задача указать на точную синтаксическую ошибку с понятным человеку текстом, если она есть
                                Ответить
                                • В плане выдачи понятных человеку ошибок радует clang.
                                  Ответить
                                  • разбор крестоблядской крестограмматики - задача не для студентоты
                                    а clang, надеюсь, в будущем займет таки достойное место под солнцем
                                    Ответить
                                    • > разбор крестоблядской крестограмматики - задача не для студентоты
                                      Да, это точно. Хотел отыскать какой-нибудь свободный парсер плюсов, дабы зафорсить кодинг-стайл в местных проектах автоматическим стайл-чекером. Не нашёл ничего вменяемого и понял, что задача совершенно не тривиальна.
                                      Ответить
                                      • > Не нашёл ничего вменяемого
                                        Ну сейчас, емнип, пошла мода кланг прикручивать в качестве парсера, т.к. его фронтенд в отличие от gcc'шного вполне прикручиваем... А задача очень даже нетривиальна. Особенно парсинг кресто11блядской кресто11грамматики...
                                        Ответить
                                        • > А задача очень даже нетривиальна.
                                          Толе дело хацкель, где парсер в одном шаге от программиста...про лисп я вообще молчу
                                          Ответить
                              • Инверсная польская запись
                                Ответить
                              • Кстати я когда для лабы делал парсер формул - у веток AST был тупой виртуальный метод eval(). На разобранном выражении оно молотило в 1.5-2 раза медленнее сишки, что для такого простого кода без кодогенерации, имхо, неплохо...
                                Ответить
                          • Один чувак сделал и это
                            Ответить
                            • Респект независимо от получившегося (говно)?кода.
                              Ответить
                              • Он свой код никому не показывал. Он копираст.
                                Ответить
                                • > Он копираст.
                                  Видимо он тупо replace'ом менял ключевые слова на сишные и отдавал полученный сырец gcc, вот и стыдно теперь показать ;)
                                  Ответить
                                  • >Видимо он тупо replace'ом менял ключевые слова на сишные
                                    Зачем? Можно просто заинклюдить дефайны и скормить gcc.
                                    Ответить
                                    • Ну да. Если язык паскалеподобный - то там почти все буквами, вполне прокатит.

                                      Оптимизирующий компилятор за 10 минут ;)
                                      Ответить
                                      • >Оптимизирующий компилятор за 10 минут
                                        А всё что забудет передефайнить - будет недокументироваными фичами языка.
                                        Ответить
                                        • > А всё что забудет передефайнить - будет недокументироваными фичами языка.
                                          Ага, язык совершенно случайно будет поддерживать крестошаблоны и другие крестофичи.
                                          Ответить
                                  • Нет , от него даже конспекта не допросишься. Однажды он здал курсач, не здавая его преподу.
                                    Ответить
                                    • > Однажды он здал курсач, не здавая его преподу.
                                      Апофеоз копирастии.
                                      Ответить
                        • Не знаю как у вас, но в моём универе на копипаст, на говнокод, на транслит-нейминг было похер - главное чтоб оно работало.
                          Самые продвинутые могли ограничится советом-замечанием. Более того, оригинальный, короткий код с использованием хаков часто вызывал больше вопросов и придирок.

                          Но помню была другая херь - минимальное ограничение на объем работы.
                          Типа 50 листов и не меньше.
                          Данный код поставленную задачу по маранию бумаги выполняет.
                          Ответить
                          • Код никто в курсач не вставлял.
                            Ответить
                          • Причем всяко, как и у нас, объем работы измерялся именно по бумажному описалову к работе, не по коду...
                            Ответить
            • действительно, это просто объявление массива, туплю
              Ответить
      • > физически способным разрулить все эти индексы
        22 слова, в каждом максимум 7 букв, что тут сложного?
        Ответить
    • - Удобней Крис; мой дедушка немец, вот и мучаюсь с именем, - видимо, эту фразу он произносил довольно часто.
      Ответить

    Добавить комментарий