Программа форматирования текста программ

Тема в разделе "WASM.PROJECTS", создана пользователем nds, 31 янв 2008.

  1. nds

    nds Member

    Публикаций:
    0
    Регистрация:
    16 июл 2007
    Сообщения:
    157
    На днях по необходимости(лабораторные сдавать надо было :) ) набросал программу форматирующую программы написанные на MASMе (в аттаче). Если в такой программе есть необходимость я перепишу ее на асме . предложения и дополнения приветствуются :)
     
  2. nds

    nds Member

    Публикаций:
    0
    Регистрация:
    16 июл 2007
    Сообщения:
    157
    не аттачился залили на ифолдер http://ifolder.ru/5175822
     
  3. nds

    nds Member

    Публикаций:
    0
    Регистрация:
    16 июл 2007
    Сообщения:
    157
    кто нибудь из десятка скачавших мог бы и написать свое мнение :dntknw:
    Для тех кто не хочет качать 200 кб неизвестно чего :) опишу что делает программа на данный момент:
    1)устанавливает все промежутки между словами в 1 пробел
    2)делает отступы в 5 пробелов для каждого блока (.if .-endif;.while-.endw;.repeat-.until)
    3); начинающая коментарии везде окружается пробелами
    Буду благодарен за критику , коментарии , дополнения.
     
  4. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Не удается скачать,: "иностранный трафик превысил российский, посетите рекламодателя, чтобы у нас появились деньги". Сходил, толку мало.

    Мне пригодилась бы. сейчас пришло в голову:
    - создавать разные исходники для толпы студентов.
    - вставлять чужой код в модуль.
    - интеллектуальная замена табуляции на нужное количество пробелов. для распечатки не в родной IDE или редактирования.
     
  5. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Программа убивает форматирование, а не форматирует)
    было:
    Код (Text):
    1. exit_msg        db      " Coded by Sergey Roiz on 21th of March 2002", 13, 10
    2.                 db      " e-mail: flameasm@yandex.ru", 13, 10, '$'
    3. ;--------------------------------------------------------
    4.         .code
    5.         .386            ;for shl reg, n, where n > 1
    6. start:
    7. ;-set 640*480*256 video mode-----------------------------
    8.         mov ax, 4F02h
    9.         mov bx, 0101h
    10.         int 10h
    стало:
    Код (Text):
    1. exit_msgdb" Coded by Sergey Roiz on 21th of March 2002", 13, 10
    2. db" e-mail: flameasm@yandex.ru", 13, 10, '$'
    3. ; --------------------------------------------------------
    4. .code
    5. .386 ; for shl reg, n, where n > 1
    6. start:
    7. ; -set 640*480*256 video mode-----------------------------
    8. mov ax, 4F02h
    9. mov bx, 0101h
    10. int 10h
    Это грешная программа, она написанна на делфи и портит асм-исходники =)
     
  6. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    последнее время форматирую руками, когда то юзал
    http://frmn.org.ua/upload/ct_pfc.rar - это
     
  7. nds

    nds Member

    Публикаций:
    0
    Регистрация:
    16 июл 2007
    Сообщения:
    157
    twgt нет безгрешных людей :) выше было описано как работает программа - она выделяет(сдвигает на 5 пробелов) блоки if repeat while и предназначена для тех кому некогда или лень делать такое форматирование вручную
    все остальное форматирование стирается
    спасибо за пример заметил свою ошибку с табом (удаляется вместо замены на пробел);
    попробуй на исходнике в котором используется высокоуровневый синтаксис масма
     
  8. zet

    zet New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2007
    Сообщения:
    121
    Тупая программа. :)
     
  9. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    имхо, очень ограниченный функционал. то же самое можно сделать открыв сорец в любой IDE, и щелкнув неск раз мышой.
     
  10. nds

    nds Member

    Публикаций:
    0
    Регистрация:
    16 июл 2007
    Сообщения:
    157
    по поводу функционала я лично заметил только одно предложение :dntknw:
    дайте примеры как по вашему должна выглядеть правильно оформленая программа .
     
  11. zet

    zet New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2007
    Сообщения:
    121
    Предложения:
    - тонкая настройка форматирования
    - несколько стилей оформления
    - поддержка разных компиляторов (MASM | FASM | TASM ...)
    - возможность отключения отдельных действий форматирования
    - интеграция в редактор (WinAsm | RAdASM | ConTEXT | Notepad++ ...)
    - возможность форматирования выделенного участка а не всего файла (при интеграции в редактор)

    PS: Кажись я загнул :)
     
  12. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    nds
    где взять неотформатированый текст?
     
  13. zet

    zet New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2007
    Сообщения:
    121
    Отформатирован код или нет понятие относительное.
    У каждого свое понимание удобного оформления.
    Задача именно в том, чтобы привести любой код к нужному оформлению.
     
  14. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    nds

    Не майся дурью :) Такие вещи делаются с помощью lex'a значительно быстрее и проще. Твои правила выглядели бы (flex под Windows) примерно так:

    Код (Text):
    1. %{
    2. #include <windows.h>
    3.  
    4. int indent = 0, newline = 0, i = 0;
    5. void printindent() {
    6.     for(i=5*indent;i>0;i--){
    7.         printf(" ");
    8.         newline = 0;
    9.     }
    10. }
    11. %}
    12. %option main
    13. %%
    14.  
    15. \.if|\.while|\.repeat   {   printindent();
    16.                 printf("%s",yytext);
    17.                 indent++;           }
    18.  
    19. \.endif|\.endw|\.until  {   indent=indent>0?indent--:0;
    20.                 printindent();
    21.                 printf("%s",yytext);        }
    22.  
    23. ^;  {printindent();printf(" ; ");} 
    24.  
    25. \n  {if(newline){printindent();};printf("\n");newline = 1;}
    26.  
    27. ^[ \t]+
    28.  
    29. [ \t]+  {printf(" ");}
    30.  
    31. [^ \t\n]+   {   if(newline){printindent();};
    32.             printf("%s",yytext);    }
    33. %%
    А если хочешь нормально сделать, просто бери полное определения токенов ассемблера и встраивай туда свое форматирование.
     
  15. nds

    nds Member

    Публикаций:
    0
    Регистрация:
    16 июл 2007
    Сообщения:
    157
    to zet со всеми пунктами согласен но до интеграции еще далеко :)
    to t00x сейчас подумаю через пол часика выложу
    to Stiver дурью маятся и не собирался lex посмотрю но самому интереснее
     
  16. nds

    nds Member

    Публикаций:
    0
    Регистрация:
    16 июл 2007
    Сообщения:
    157
    Специально обезображеный код одного из примеров в комплекте масма
    Код (Text):
    1. .486 ; create 32 bit code
    2. .model flat, stdcall ; 32 bit memory model
    3. option casemap :none ; case sensitive
    4. include \masm32\include\dialogs.inc
    5. include calender.inc
    6. dlgproc PROTO :DWORD,:DWORD,:DWORD,:DWORD
    7. .data
    8. first db 'вапвапвапвапвапвапвап' ; первая строка
    9. second db 'wвапыурр';вторая строка
    10. .code
    11. start:
    12. mov hInstance, FUNC(GetModuleHandle,NULL)
    13. call main
    14. invoke ExitProcess,eax
    15. main proc
    16. LOCAL icce:INITCOMMONCONTROLSEX
    17. mov icce.dwSize, SIZEOF INITCOMMONCONTROLSEX
    18. mov icce.dwICC, ICC_DATE_CLASSES
    19. invoke InitCommonControlsEx,ADDR icce
    20. Dialog "Today","MS Sans Serif",10, \ ; caption,font,pointsize
    21. WS_OVERLAPPED or DS_CENTER, \ ; style
    22. 2, \ ; control count
    23. 50,50,189,121, \ ; x y co-ordinates
    24. 1024 ; memory buffer size
    25. DlgMonthCal MCS_WEEKNUMBERS,5,5,129,100,101
    26. DlgButton "Close",WS_TABSTOP,141,5,40,12,IDCANCEL
    27. CallModalDialog hInstance,0,dlgproc,NULL
    28. ret
    29. main endp
    30. dlgproc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
    31. .if uMsg == WM_COMMAND
    32. .if wParam == IDCANCEL
    33. .if lParam == 0
    34. jmp dlg_end
    35. .while eax==1
    36. xor eax,eax
    37. .endw
    38. .endif
    39. .endif
    40. .elseif uMsg == WM_CLOSE
    41. .repeat eax == 0
    42. xor eax,eax
    43. .break .if (eax!)
    44. .until
    45. dlg_end:
    46. invoke EndDialog,hWin,0
    47. .endif
    48. xor eax, eax
    49. ret
    50. dlgproc endp
    51. end start
     
  17. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    Stiver
    а если, как выше верно заметил zet
    как это предусмотреть при помощи лекса?
     
  18. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    varnie
    как это предусмотреть при помощи лекса?

    Ты имеешь в виду конфигурируемое форматирование как например в Eclipse? Там внутри тот же самый лексер, просто берущий параметры(здесь, скажем, "5" - число пробелов) через оболочку от пользователя. Естественно параметры только те, которые предусмотрены - своих ты без расширения лексера не добавишь.

    Если хочешь совсем свое оформление, то придется самому писать. Я всегда могу придумать такое оформление, которое не поддерживается конкретной реализацией. Просто нет смысла потом и кровью писать что-то с нуля, когда есть удобные готовые средства - в данном случае регулярные выражения, задающие лексеру конечный автомат.
     
  19. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    да.
    я ничего не хочу, это топикстартер что-то делает:) и ему, мне думается, было бы полезно реализовать "свое оформление", ну, предоставить пользователю его итоговой проги возможность настраивания "оформления" под себя.
    а как это реализовать - это его задача. :))