> ちょっと思ってるのと違った。この + は要ります?可読性向上のための桁そろえ、というのがあるかもしれないと考えました。 とりあえず、私のきちんと動かないバージョンはできました。 きちんと動かないことは理解していますが、条件がそろうと動くこともある、 といった感じ。 = renum.def i:初期値 initial num a:増分 addition n:新行番号 new num o:旧行番号 old num *m 1 ^^ "renum.def" ;初期設定 ;vwxの常駐確認とか? a=10, n=o=0, ;RXとかの設定も念のためにするべき? #^ #< ;カーソルを先頭行の行頭にして &n i=r, ;初期値取得 ;メインループ ;先頭行は行番号の変更なし :w ;while(次の行に動ければ) #> #d ;次の行にカーソルを移動し #d (r==-1)?>u ;その結果が最終行ならループ脱出 #< &n o=r, ;旧行番号取得 n=i+(ln-1)*a, ;新行番号算出 #t ;旧行番号削除 &?("%d",n) ;新行番号出力 #56 "GOTO\([ \t]+\)" &?("%d",o) "$$" #m "GOTO\1" &?("%d",n) #m "ay" #56 "GOTO\([ \t]+\)" &?("%d",o) "\([^0-9]\)" #m "GOTO\1" &?("%d",n) "\2" #m "ay" #56 "GOSUB\([ \t]+\)" &?("%d",o) "$$" #m "GOSUB\1" &?("%d",n) #m "ay" #56 "GOSUB\([ \t]+\)" &?("%d",o) "\([^0-9]\)" #m "GOSUB\1" &?("%d",n) "\2" #m "ay">w:u * すぐにわかることですが、このロジックでは、一旦変換した行番号が再変換の 対象になりうるわけです。なので、ここはやっぱり素直に変換表を作るような ロジックにする必要がある。 逆にいうと、例えば100から始まって990までで終わっているプログラムを 1000からに変換する、みたいな感じで再変換が発生しないような変換だと、 なんとなくうまく動いているっぽい。もちろん、意図的に考慮していない 部分はいっぱいありますが、意図せざる考慮漏れというのがあれば、これで あぶりだせたらちょっとはうれしいかも。 ということで、めざらさんに提示していただいたコード、これから読解して いきます。
関連記事一覧ツリー (▼ を押すとツリー全体を一括表示します)
返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
- 以下のフォームから自分の投稿記事を修正・削除することができます -