vim を使用してアセンブリ言語ファイルを新しいアセンブラに移植しようとしています。新しいアセンブラは、ローカル ラベルをサポートしていません。そのため、各ローカル ラベルの前にラベル名を挿入しようとしています。ただし、キャプチャ グループが後に続くレジスタを使用しようとすると、「無効な式エラー」が発生します。
入力例:
LABEL_NAME:
MOV SP,#STACK_POINTER
MOV R7,#12 ;WAIT LOOP (3)
12$: MOV R6,#255 ;TIME WASTER
11$: MOV R5,#255 ;MUST WAIT !!!!
10$: RESET_WATCH_DOG
DJNZ R5,10$
DJNZ R6,11$
DJNZ R7,12$
望ましい出力:
LABEL_NAME:
MOV SP,#STACK_POINTER
MOV R7,#12 ;WAIT LOOP (3)
LABEL_NAME12$: MOV R6,#255 ;TIME WASTER
LABEL_NAME11$: MOV R5,#255 ;MUST WAIT !!!!
LABEL_NAME10$: RESET_WATCH_DOG
DJNZ R5,LABEL_NAME10$
DJNZ R6,LABEL_NAME11$
DJNZ R7,LABEL_NAME12$
もちろん、これは機能します:
:.,10s/\(\d\+\$\)/LABEL_NAME\1/
ラベル名を registera
にヤンクした後、次のようになります。
:.,10s/\(\d\+\$\)/\=@a/
私にこれを与えます:
LABEL_NAME:
MOV SP,#STACK_POINTER
MOV R7,#12 ;WAIT LOOP (3)
LABEL_NAME: MOV R6,#255 ;TIME WASTER
LABEL_NAME: MOV R5,#255 ;MUST WAIT !!!!
LABEL_NAME: RESET_WATCH_DOG
DJNZ R5,LABEL_NAME
DJNZ R6,LABEL_NAME
DJNZ R7,LABEL_NAME
でもこれは:
:.,10s/\(\d\+\$\)/\=@a\1/
これだけを生成します:
E15: Invalid expression: @a\1
gVim 7.3 を使用しています。理想的には、replace ステートメントでレジスター展開の後にキャプチャー・グループ展開を使用できない理由を知りたいです。しかし、代替ソリューションも高く評価されます。