Регулярные выражения и сборки - PullRequest
10 голосов
/ 31 января 2010

Я знаю 8086 Сборка и обучение MIPS Assembly. Кроме того, я изучаю регулярные выражения, затем я хочу знать:

  • Как я могу использовать регулярные выражения на них?

Ответы [ 6 ]

9 голосов
/ 31 января 2010

Это сложная задача, которую необходимо выполнить с нуля. Ни один ассемблерный язык не будет поддерживать регулярные выражения как первоклассную конструкцию, потому что слишком много различий в уровне абстракции, чтобы сделать его полезным включением. Это означает, что вам нужно построить его самостоятельно.

Поддержка регулярных выражений, по сути, похожа на наличие в вашей программе компилятора, который переводит выражение в последовательность соответствующих инструкций. Вам нужно будет собрать все составляющие: движок перевода, серию правил преобразования, ассемблер DFA и соответствующий движок.

Тем не менее, это не невозможно! Начните с малого, поддерживая крошечные подмножества реального языка, который вы хотите поддерживать, а затем продолжайте свой путь. Посмотрите главу 16 в Программирование на ассемблере для подробного ознакомления с тем, как вы можете создать свой собственный механизм регулярных выражений. Вам понадобится хорошее понимание того, как они работают (что даст вам эта глава), а также хорошее понимание сборки (см. Предыдущие главы).

3 голосов
/ 29 марта 2010

Попробуйте это: AsmRegEx - механизм регулярных выражений

Это написано в FASM. К сожалению, похоже, что проект больше не будет развиваться ...

1 голос
/ 31 января 2010

Набор статей здесь описывает, как создать очень простой, но мощный движок регулярных выражений с нуля. Он использует C ++, но подробно объясняет теорию, и опытный программист может перевести код на ASM без особых усилий.

Тем не менее, я не думаю, что это особенно интересное упражнение, ни для изучения ASM, ни для изучения регулярных выражений. Вы просто слишком увязли в деталях.

1 голос
/ 31 января 2010

Регулярных выражений в сборке не существует, что кажется немного странным вопросом, так как регулярные выражения имеют более высокоуровневую языковую природу, а не существует на уровне «гайки и болты».

Редактировать: Натан, здесь - это ссылка, которая может вас заинтересовать. Прокрутите вниз до нижней части страницы;)

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0 голосов
/ 31 января 2010

Не уверен, хотите ли вы знать, как реализовать движок регулярных выражений в ассемблере или просто как легко использовать регулярные выражения в строках с нулевым окончанием на языке ассемблера. Если это первое, вам дали несколько указателей. Если это позднее, это зависит от вашей платформы, но самый простой способ - вызвать библиотеку с кодом C из вашей сборки. Варианты Unix имеют регулярные выражения POSIX, уже доступные в libc, и вы можете вызывать их из вашей сборки, просто следуя соответствующим соглашениям о вызовах.

0 голосов
/ 31 января 2010

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

Может быть хорошей идеей будет сначала создать синтаксический анализатор регулярных выражений C, так как больше людей на этом форуме смогут вам помочь. Как только у вас все заработало, вы можете перевести его на ассемблерный код. Опять же, здесь больше людей будут знакомы с программированием на языке ассемблера 8086, чем с MIPS, поэтому может быть хорошей идеей использовать 8086, даже если архитектура процессора не очень приятна.

...