На днях по необходимости(лабораторные сдавать надо было ) набросал программу форматирующую программы написанные на MASMе (в аттаче). Если в такой программе есть необходимость я перепишу ее на асме . предложения и дополнения приветствуются
кто нибудь из десятка скачавших мог бы и написать свое мнение Для тех кто не хочет качать 200 кб неизвестно чего опишу что делает программа на данный момент: 1)устанавливает все промежутки между словами в 1 пробел 2)делает отступы в 5 пробелов для каждого блока (.if .-endif;.while-.endw;.repeat-.until) 3); начинающая коментарии везде окружается пробелами Буду благодарен за критику , коментарии , дополнения.
Не удается скачать,: "иностранный трафик превысил российский, посетите рекламодателя, чтобы у нас появились деньги". Сходил, толку мало. Мне пригодилась бы. сейчас пришло в голову: - создавать разные исходники для толпы студентов. - вставлять чужой код в модуль. - интеллектуальная замена табуляции на нужное количество пробелов. для распечатки не в родной IDE или редактирования.
Программа убивает форматирование, а не форматирует) было: Код (Text): exit_msg db " Coded by Sergey Roiz on 21th of March 2002", 13, 10 db " e-mail: flameasm@yandex.ru", 13, 10, '$' ;-------------------------------------------------------- .code .386 ;for shl reg, n, where n > 1 start: ;-set 640*480*256 video mode----------------------------- mov ax, 4F02h mov bx, 0101h int 10h стало: Код (Text): exit_msgdb" Coded by Sergey Roiz on 21th of March 2002", 13, 10 db" e-mail: flameasm@yandex.ru", 13, 10, '$' ; -------------------------------------------------------- .code .386 ; for shl reg, n, where n > 1 start: ; -set 640*480*256 video mode----------------------------- mov ax, 4F02h mov bx, 0101h int 10h Это грешная программа, она написанна на делфи и портит асм-исходники =)
twgt нет безгрешных людей выше было описано как работает программа - она выделяет(сдвигает на 5 пробелов) блоки if repeat while и предназначена для тех кому некогда или лень делать такое форматирование вручную все остальное форматирование стирается спасибо за пример заметил свою ошибку с табом (удаляется вместо замены на пробел); попробуй на исходнике в котором используется высокоуровневый синтаксис масма
имхо, очень ограниченный функционал. то же самое можно сделать открыв сорец в любой IDE, и щелкнув неск раз мышой.
по поводу функционала я лично заметил только одно предложение дайте примеры как по вашему должна выглядеть правильно оформленая программа .
Предложения: - тонкая настройка форматирования - несколько стилей оформления - поддержка разных компиляторов (MASM | FASM | TASM ...) - возможность отключения отдельных действий форматирования - интеграция в редактор (WinAsm | RAdASM | ConTEXT | Notepad++ ...) - возможность форматирования выделенного участка а не всего файла (при интеграции в редактор) PS: Кажись я загнул
Отформатирован код или нет понятие относительное. У каждого свое понимание удобного оформления. Задача именно в том, чтобы привести любой код к нужному оформлению.
nds Не майся дурью Такие вещи делаются с помощью lex'a значительно быстрее и проще. Твои правила выглядели бы (flex под Windows) примерно так: Код (Text): %{ #include <windows.h> int indent = 0, newline = 0, i = 0; void printindent() { for(i=5*indent;i>0;i--){ printf(" "); newline = 0; } } %} %option main %% \.if|\.while|\.repeat { printindent(); printf("%s",yytext); indent++; } \.endif|\.endw|\.until { indent=indent>0?indent--:0; printindent(); printf("%s",yytext); } ^; {printindent();printf(" ; ");} \n {if(newline){printindent();};printf("\n");newline = 1;} ^[ \t]+ [ \t]+ {printf(" ");} [^ \t\n]+ { if(newline){printindent();}; printf("%s",yytext); } %% А если хочешь нормально сделать, просто бери полное определения токенов ассемблера и встраивай туда свое форматирование.
to zet со всеми пунктами согласен но до интеграции еще далеко to t00x сейчас подумаю через пол часика выложу to Stiver дурью маятся и не собирался lex посмотрю но самому интереснее
Специально обезображеный код одного из примеров в комплекте масма Код (Text): .486 ; create 32 bit code .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive include \masm32\include\dialogs.inc include calender.inc dlgproc PROTO :DWORD,:DWORD,:DWORD,:DWORD .data first db 'вапвапвапвапвапвапвап' ; первая строка second db 'wвапыурр';вторая строка .code start: mov hInstance, FUNC(GetModuleHandle,NULL) call main invoke ExitProcess,eax main proc LOCAL icce:INITCOMMONCONTROLSEX mov icce.dwSize, SIZEOF INITCOMMONCONTROLSEX mov icce.dwICC, ICC_DATE_CLASSES invoke InitCommonControlsEx,ADDR icce Dialog "Today","MS Sans Serif",10, \ ; caption,font,pointsize WS_OVERLAPPED or DS_CENTER, \ ; style 2, \ ; control count 50,50,189,121, \ ; x y co-ordinates 1024 ; memory buffer size DlgMonthCal MCS_WEEKNUMBERS,5,5,129,100,101 DlgButton "Close",WS_TABSTOP,141,5,40,12,IDCANCEL CallModalDialog hInstance,0,dlgproc,NULL ret main endp dlgproc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD .if uMsg == WM_COMMAND .if wParam == IDCANCEL .if lParam == 0 jmp dlg_end .while eax==1 xor eax,eax .endw .endif .endif .elseif uMsg == WM_CLOSE .repeat eax == 0 xor eax,eax .break .if (eax!) .until dlg_end: invoke EndDialog,hWin,0 .endif xor eax, eax ret dlgproc endp end start
varnie как это предусмотреть при помощи лекса? Ты имеешь в виду конфигурируемое форматирование как например в Eclipse? Там внутри тот же самый лексер, просто берущий параметры(здесь, скажем, "5" - число пробелов) через оболочку от пользователя. Естественно параметры только те, которые предусмотрены - своих ты без расширения лексера не добавишь. Если хочешь совсем свое оформление, то придется самому писать. Я всегда могу придумать такое оформление, которое не поддерживается конкретной реализацией. Просто нет смысла потом и кровью писать что-то с нуля, когда есть удобные готовые средства - в данном случае регулярные выражения, задающие лексеру конечный автомат.
да. я ничего не хочу, это топикстартер что-то делает и ему, мне думается, было бы полезно реализовать "свое оформление", ну, предоставить пользователю его итоговой проги возможность настраивания "оформления" под себя. а как это реализовать - это его задача. )