Я прохожу курс Нанд-2-Тетрис. Нас просят написать и на ассемблере. C-команда имеет тип dest=comp;jump
, где каждая часть является необязательной.
Я пытался написать регулярное выражение, чтобы все упростить - я хочу иметь возможность скомпилировать выражение в заданной строке и просто по номеру группы узнать, какую часть выражения я использую. Например, для выражения: A=M+1;JMP
я хочу получить group(1) = A
, group(2) = M
и group(3) = JMP
.
Моя проблема в том, что каждая часть не является обязательной, поэтому я точно не знаю, как написать это регулярное выражение. Пока что я придумал:
(A?M?D?)\s=([^;\s]*)\s?(?=;[\s]*([a-zA-Z]{1,4})|$)
Это работает в большинстве случаев, но не так, как я ожидаю. Например, отсутствие компа не сработает (D;JGT
). Я пробовал положительный взгляд вперед, но это не сработало.