私はNand-2-Tetrisコースを受講しています。私たちは書いて、アセンブラを求められます。 Cコマンドのタイプはdest=comp;jump
で、各部分はオプションです。アセンブラCコマンドをキャッチする正規表現
私はすべてを簡単にするために正規表現を書こうとしていました。私は与えられた行の式をコンパイルすることができます。グループ番号だけで、私が使っている式の部分を知っています。たとえば、式の場合: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
)。私は肯定的な先取りを試みたが、うまくいかなかった。
をアセンブラが_parser_で、正規表現は確かにあなたが使用するツールかもしれないが、それが唯一の懸念はありません。 –
合意。これは、「あなたが持っているものはすべてハンマーであるなら、すべての問題は爪のように見えます」のように見えます。正規表現は強力なツールですが、このようなタスクにこれを使用することは、あなたの時間を費やし、コードを読まなければならない人のためになります。 – MadOverlord