Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Подсветка кода на регулярных выражениях
Форумы портала PHP.SU » PHP » Регулярные выражения » Подсветка кода на регулярных выражениях

Страниц (1): [1]
 

1. spheere - 19 Августа, 2010 - 21:52:14 - перейти к сообщению
Случайно никто не встречал реализацию подсветки кода на регулярных выражениях ?
Интересует подсветка asm листингов.
Не поиск и замена заранее заданных в базе регистров, функций и операторов.

Или может кто поможет составить регулярные выражения чтоб парсить строки кода asm (синтаксис masm) ?
За вознаграждение, конечно.


Приведу пример по коду:
Цитата:
mov esi, [ebx + edx + 78h]

Нужна регулярка чтоб получился массив:
0 => "mov" - оператор (может обрамляться любым количеством пробелов и табов)
1 => "esi" - первый аргумент
2 => "[ebx + edx + 78h]" - второй аргумент (отделяется от первого запятой и вариациями пробелов и табов)

Оператор может содержать и 1 аргумент.
Цитата:
inc eax

Или может не содержать аргументов вообще.
Цитата:
lodsd


Примеры операторов с 2 аргументами
Цитата:
xchg eax, ecx
cmp dword ptr [eax], 0FFFFFFFFh
mov eax, 0


Вот примерно так это выглядит. Для человека разбирающегося в регулярках составить паттерн будет не сложно.
2. Uchkuma - 19 Августа, 2010 - 22:44:22 - перейти к сообщению
Пример подсветки синтаксиса masm есть?
3. spheere - 19 Августа, 2010 - 22:58:14 - перейти к сообщению
Пример по коду добавил в 1й пост.
Сейчас приведу пример по данным.
Цитата:
szText db "Some text",0

Нужно получать массив
0 => "szText" - имя переменной
1 => "db" - переменная является последовательностью байтов (define byte)
2 => '"Some text",0' - содержимое переменной. Здесь ",0" означает что в конец строки будет записан нулевой байт

Еще пример с переводом строки:
Цитата:
szText db "Some text line 1",13,10,"Some text line 2",0

0 => "szText"
1 => "db"
2 => '"Some text line 1",13,10,"Some text line 2",0' - (,13,10,) это "\r\n"

Пример не текстовой переменной:
Цитата:
lpAddr dd 0C0D6D616h

0 => "lpAddr" - имя переменной
1 => "dd" - переменная это двойное слово (define dword)
2 => "0C0D6D616h"
4. Uchkuma - 19 Августа, 2010 - 23:03:55 - перейти к сообщению
spheere, к первому посту вот:
Цитата:
^(\w+)(?:\s+([^,]+)(?:,\s+(.*))?)?$

(Добавление)
По второму посту:
Цитата:
^(\w+)\s+(\w+)\s+(.*)$
5. spheere - 19 Августа, 2010 - 23:12:27 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. preg_match_all("^(\w+)(?:\s+([^,]+)(?:,\s+(.*))?)?$", $LINE, $UNITS, PREG_PATTERN_ORDER);

выдает ошибку

Цитата:
function.preg-match-all: Unknown modifier ','
6. Uchkuma - 19 Августа, 2010 - 23:19:16 - перейти к сообщению
Первый параметр должен обрамляться. Например слэшами вот так: preg_match_all('/^(\w+)\s+(\w+)\s+(.*)$/', ...);
(Добавление)
Первый знак в шаблоне считается ограничителем. Он же и закрывает шаблон. А после закрывающего идут модификаторы, вот он и ругнулся на неизвестный модификатор ','
7. spheere - 19 Августа, 2010 - 23:30:49 - перейти к сообщению
Тпереь я понял, работает. Послал личное сообщение...
8. JustUserR - 20 Августа, 2010 - 22:21:45 - перейти к сообщению
spheere В некоторых готовых web-приложениях таких как форумы и блоки зачастую имеется возможность автоматической подсветки кода в соответствии с выбранным BB-тегом - поэтому если посмотреть соответствующие plugin-ы для известных проектов то среди них вероятно имеются и ASM-подстветки
9. Uchkuma - 20 Августа, 2010 - 22:53:13 - перейти к сообщению
JustUserR пишет:
spheere В некоторых готовых web-приложениях таких как форумы и блоки зачастую имеется возможность автоматической подсветки кода в соответствии с выбранным BB-тегом - поэтому если посмотреть соответствующие plugin-ы для известных проектов то среди них вероятно имеются и ASM-подстветки
Да-да. Даже у себя нашел реализацию ASM в BB-подсветках. Но товарищу, видимо, нужен какой-то собственный механизм подсветки для узкого применения.
10. JustUserR - 22 Августа, 2010 - 01:46:21 - перейти к сообщению
Uchkuma пишет:
Да-да. Даже у себя нашел реализацию ASM в BB-подсветках. Но товарищу, видимо, нужен какой-то собственный механизм подсветки для узкого применения.
Вероятно автору темы будет интересно посмотреть готовое решене подстветки ASM-кода и использовать его - в любом случае реализация собственной схемы выделения операторов проще реализуется уже на основе некоторой существующей Поэтому если вы имеете сейчас в быстром доступе соответствующую PHP-библиотеку - то можете предложить ее автору Улыбка
11. Uchkuma - 22 Августа, 2010 - 09:39:51 - перейти к сообщению
Вот библиотека bbcode, в которой есть подсветка asm. Сама библиотека подсветки asm находится здесь bbcode/lib/geshi/asm.php. А вообще там порядка 80 разных подсветок.
12. JustUserR - 23 Августа, 2010 - 16:03:59 - перейти к сообщению
Uchkuma пишет:
Вот библиотека bbcode, в которой есть подсветка asm
Спасибо я думаю данная библиотека пригодится как автору темы так и многим другим кто будет реализовывать механизм подсветки в собственных приложениях

 

Powered by ExBB FM 1.0 RC1