pic マイクロコントローラー のソース編No.06859
ノノムン さん 12/03/05 09:54
 
こんにちは ノノムン ことtommyと申します。

プログラムソースの書き方で2種類(今回はP型とC型)有りまして、
次のように教えて頂いたのですが、
見ながら手で打っていますと、どうしても見逃してしまいます。
それと逆方向の変換もいたしたいのですが、マクロで出来ますでしょうか?

そのほか日本文字を嫌う傾向があり、
(特に全角スペースはエラーになります)
コメント文を見ながら、英文(正確ではありませんが)に翻訳しています。
この場合全角スペースは半角スペースに変換で出来るのですが、
それ以外の文字の場合、2バイトコードを見つけることが難しくて、
何文字かは見逃してしまいます。
(コメント中に見えない文字がありますと内容が判らなくなってしまいます)
これも見つける方法はありますでしょうか?

Tommy: P to C is

This is an example of the error:
    mov    mid[2],x[2]

Change it to:
    mov    mid+2,x+2

if you have this:
    mov    mid[0],x[0]
(+0=nathing)
Change it to:
    mov    mid,x

As shown above, do not use brackets ( [ ] ) to access an index of a
defined storage location. Instead, add the offset by using +1,+2,+3 etc.

P型のブラケットは配列を表し番号は位置を表します。
半角スペースはエラーにならないので、全部半角2スペースに変換しています
C型の場合は+位置で表記します。

それでは宜しくお願いします。

[ ]
RE:06859 pic マイクロコントローラー No.06860
秀まるお2 さん 12/03/05 18:21
 
 何か特定のルールに従ったテキストデータを、別のルールに従った形式に置換
したいってことですかね。だとしたら、いわゆるタグ付き正規表現でなんとか出
来そうな気がします。

 具体的なサンプルが何なのかがいまいちよく分からないのですけども…。

 最低でも10種類くらいサンプル書いていただかないと、「今回のこのケース
ではうまくいくけど別にダメなケースがありました」みたいなことになりそうな
気がします。

 例えばその「mov」の所が、実は他にも「store」になることもあるとか、mid
の所がtop/bottomになることもあるとか…。

 ルールも分からずに正規表現での置換パターンを書くことは出来ませんので…。

 あるいはその辺のルールのことが書いてあるサイトがあれば、それのURLを書
いていただければ、そっちの方が手っ取り早いかもしれません。

[ ]
RE:06860 pic マイクロコントローラー No.06861
秀まるお2 さん 12/03/05 18:33
 
 とりあえずですが、

    mov    mid[2],x[2]

 を

    mov    mid+2,x+2

 のように置換したいってだけでしたら、つまり、

     [2] -->   +2

 のような置換ということで、それならば、

検索: \[([0-9]+)\]
置換: +\1

 で正規表現の置換をすればいけると思います。

 逆の置換は、

検索: \+([0-9]+)
置換: [\1]

 となります。

[ ]
RE:06859 pic マイクロコントローラー No.06862
山紫水明 さん 12/03/05 20:18
 
 ノノムンさん,

>この場合全角スペースは半角スペースに変換で出来るのですが、
>それ以外の文字の場合、2バイトコードを見つけることが難しくて、
>何文字かは見逃してしまいます。

検索文字に
[ -K] (全角の空白が入っています)
を設定して,正規表現,検索文字を強調にして検索したら,見つかると思います。

                          山紫水明(ユーザー)
                          SANSHISUIMEI

[ ]
RE:06861 pic マイクロコントローラー No.06863
ノノムン さん 12/03/06 01:24
 
こんばんは ノノムン です。

お教え頂いた方法で可能かと思います。

mid 等の変数は先に宣言しておくのですが、

行頭がラベルと申しまして、
行き先の目印に使い「ラベル」を書き、
スペースかタブで少し離し「オペコード」命令語を書き、
さらに、スペースかタブで少し離し「オペランド」変化分記述を行います。
実際には行頭を含め「;」セミコロン以降は「コメント」注釈として意味を持た
ず読みやすくします。

今回はオペコードが「P型」の場合[数]と成りますが、
「C型」の場合変数に続く +数 に変換することで目的を達します。

お教え頂いた

 > 検索: \[([0-9]+)\]
 > 置換: +\1
 >
 >  で正規表現の置換をすればいけると思います。
 >
 >  逆の置換は、
 >
 > 検索: \+([0-9]+)
 > 置換: [\1]
 >
 >  となります。
でほとんどの変更が可能と思われますが、コメント域までも変換することが予想
されます。

(実際にはマクロを組む順序に熟達して居らず、意味は分かるのですが、実際の
操作順序に戸惑っております。)

さて次の 全角空白は 全角空白を書き込みコピペして置換を呼び出し
半角スペース2個と一挙に置換しています。
(全角スペースはわるさをしますので、これで問題なくなります。)

しかしそれ以外の全角文字が探せないで居りますが、
山紫水明さまの

検索文字に
[ -??] (全角の空白が入っています)
を設定して,正規表現,検索文字を強調にして検索したら,見つかると思います。
の実際の操作が判らずにおります。

それでは宜しくお願いします。

(2012/03/05 18:33), 秀まるお2 wrote:
>  とりあえずですが、
>
>      mov    mid[2],x[2]
>
>  を
>
>      mov    mid+2,x+2
>
>  のように置換したいってだけでしたら、つまり、
>
>       [2] -->    +2
>
>  のような置換ということで、それならば、
>
> 検索: \[([0-9]+)\]
> 置換: +\1
>
>  で正規表現の置換をすればいけると思います。
>
>  逆の置換は、
>
> 検索: \+([0-9]+)
> 置換: [\1]
>
>  となります。
>
>

[ ]
RE:06863 pic マイクロコントローラーNo.06864
山紫水明 さん 12/03/06 07:48
 
 ノノムンさん,

>検索文字に
>[ -??] (全角の空白が入っています)
>を設定して,正規表現,検索文字を強調にして検索したら,見つかると思います。
>の実際の操作が判らずにおります。

「検索」→「検索」で検索ダイアログを開く。
検索語に「[ -K]」 を書き込む。
 (このままコピー&ペーストしてもらえばやりやすいでしょう。
  外側の「」は不要です)
あるいは「 [\x81\x40-\xfc\x4b] 」 でもかまいません。
正規表現,検索文字を強調にチェック

これで上検索または下検索をしてください。

                          山紫水明(ユーザー)
                          SANSHISUIMEI

[ ]
RE:06863 pic マイクロコントローラー No.06865
秀まるお2 さん 12/03/06 09:14
 
 セミコロン以降を置換しないようにするには…

 まずは、「ファイルタイプ別の設定・デザイン・複数行コメント」にて、「言
語」の所を「アセンブリ語」にします。そうすると、セミコロン以降がコメント
の色で表示されるようになります。

 そうした上で、置換の時に、「追加の条件」をONにした上で、追加の条件とし
て「コメントを除く」とすればいいです。それでコメント部分は置換されなくな
ります。

 それが一番便利なやり方だと思います。

 それと、置換のやり方が分かったとして、それをマクロにしておきたい場合ど
うするかですが…。

 一番簡単なのは、「マクロ」メニューの中にある「キー操作の記録開始/終
了...」のコマンドと、「キー操作の保存」を組み合わせてマクロを作成する方
法になります。

 例えば具体的な例で書かせていただきますと、

 1.「キー操作の記録開始/終了」を実行する。
   (タイトルバーが「記録中!」になります)

 2.置換コマンドを実行して、

  検索: \+([0-9]+)
  置換: [\1]
  正規表現: ON
  追加の条件: コメントを除く

   で全置換を実行する。

 3.「キー操作の記録開始/終了」をもう一度実行する。

 4.「キー操作の保存...」を実行して、適当な名前を入力して保存する。

 です。それで保存されたマクロファイルを改めて秀丸で開いて見ると、

 setcompatiblemode 15;
 begingroupundo;
 replaceall "\\+([0-9]+)" , "[\\1]" , regular, nocasesense
               , hilight, maskcomment;
 if( ! result )  beep;
 endgroupundo 1;

 みたいな内容になってます。それでマクロが完成です。

 そんな感じでマクロを作成していったらいいんじゃないかと思います。

[ ]
RE:06862 pic マイクロコントローラー No.06866
ノノムン さん 12/03/06 10:46
 
山紫水明さん ノノムンです

全角の空白のみしか反応しないと思っていましたがちゃんと動作して見つけられ
ました。
(これらはコメントを含めて変更します)

秀まるお2さん どちら向きの変換も成功しました。
しかし行頭から含めて コメント内は変更しない方が多いのです、

コメント開始表現は数種類有ります。
ソフトに固有な場合もあります。
大概はソフトに合わせて、その時に選びます。


/
--
/* から */ までの間 この場合間に / や * を含んで終わってしまった
り勝手に始まったりするので、少なくなっていますが・・

これらはやはりマクロで判断できるのでしょうか?

それでは宜しくお願いします。

(2012/03/05 20:18), 山紫水明 wrote:
>  ノノムンさん,
>
>> この場合全角スペースは半角スペースに変換で出来るのですが、
>> それ以外の文字の場合、2バイトコードを見つけることが難しくて、
>> 何文字かは見逃してしまいます。
>
> 検索文字に
> [ -??] (全角の空白が入っています)
> を設定して,正規表現,検索文字を強調にして検索したら,見つかると思います。
>
>                            山紫水明(ユーザー)
>                            SANSHISUIMEI
>
>

[ ]
RE:06866 pic マイクロコントローラー No.06867
秀まるお2 さん 12/03/06 13:34
 
> コメント開始表現は数種類有ります。
> ソフトに固有な場合もあります。
> 大概はソフトに合わせて、その時に選びます。

 秀丸エディタが標準で対応してるコメント形式の中から適当なのを選択するこ
とで大抵は大丈夫だと思いますが、「;」も「/」も「--」も、「/* 〜 */」も全
部ってことになると、ユーザー定義するしか無いと思います。

 「ファイルタイプ別の設定・デザイン・複数行コメント」の所の「ユーザー定
義」をONにして、あとは適当に開始文字列/終了文字列を指定してやれば、好き
なようにコメントのルールを定義することが出来ます。

 それで解決可能かと思います。

[ ]
RE:06867 pic マイクロコントローラー No.06868
ノノムン さん 12/03/06 15:08
 
秀まるお2さま ノノムンです

有り難うございます。

早速やってみました。
コメントはその都度決めてユーザー定義を使うつもりです。

ユーザー定義を使いますと、
開始文字は 行頭を含め「,」 終了文字は無くて行末までです。
これでコメントを選びますと、終了文字が入れていないので、
エラーになりました。
行末の指定文字がありますでしょうか?
(コメントの場合色は付かないのでしょうか)

また、置き換え変数は 0~255文字(或いはそれ以上)が多く、
\+([0-9]+) の様な書き方でも それに対応しますでしょうか、
と早速やってみますと +256 も出来ました。

それでは宜しくお願いします。


(2012/03/06 13:34), 秀まるお2 wrote:
>> コメント開始表現は数種類有ります。
>> ソフトに固有な場合もあります。
>> 大概はソフトに合わせて、その時に選びます。
>
>  秀丸エディタが標準で対応してるコメント形式の中から適当なのを選択するこ
> とで大抵は大丈夫だと思いますが、「;」も「/」も「--」も、「/* 〜 */」も全
> 部ってことになると、ユーザー定義するしか無いと思います。
>
>  「ファイルタイプ別の設定・デザイン・複数行コメント」の所の「ユーザー定
> 義」をONにして、あとは適当に開始文字列/終了文字列を指定してやれば、好き
> なようにコメントのルールを定義することが出来ます。
>
>  それで解決可能かと思います。
>
>

[ ]
RE:06868 pic マイクロコントローラー No.06869
秀まるお2 さん 12/03/06 15:55
 
> これでコメントを選びますと、終了文字が入れていないので、
> エラーになりました。

 「オプション(O)>>」を押すと、右上に「種類」の枠が出てきます。そこの
「単一行(行末まで)」にすれば、開始文字列のみでコメントの定義が出来まし
た。

 それでやればいけると思います。

 それと、特にここの設定に限らずですが、ヘルプボタンを押せばヘルプが出て
くるので、その辺も参考にして欲しいです。

> また、置き換え変数は 0~255文字(或いはそれ以上)が多く、
> \+([0-9]+) の様な書き方でも それに対応しますでしょうか、
> と早速やってみますと +256 も出来ました。

 [0-9]+ の部分は、1桁以上の数字にヒットします。上限は無いので、何桁の数
字にでもヒットします。

[ ]
RE:06869 pic マイクロコントローラー No.06870
ノノムン さん 12/03/06 21:31
 
秀まるお2 さま

実行できました。
ヘルプは読んでいなかったんですが、
以前の経験から、「実際の表現例集」が有るともっと判りやすい。
と思いました。

コメントの色関連の変更も出来ました。

それでは有り難うございました。

(2012/03/06 15:55), 秀まるお2 wrote:
>> これでコメントを選びますと、終了文字が入れていないので、
>> エラーになりました。
>
>  「オプション(O)>>」を押すと、右上に「種類」の枠が出てきます。そこの
> 「単一行(行末まで)」にすれば、開始文字列のみでコメントの定義が出来まし
> た。
>
>  それでやればいけると思います。
>
>  それと、特にここの設定に限らずですが、ヘルプボタンを押せばヘルプが出て
> くるので、その辺も参考にして欲しいです。
>
>> また、置き換え変数は 0~255文字(或いはそれ以上)が多く、
>> \+([0-9]+) の様な書き方でも それに対応しますでしょうか、
>> と早速やってみますと +256 も出来ました。
>
>  [0-9]+ の部分は、1桁以上の数字にヒットします。上限は無いので、何桁の数
> 字にでもヒットします。
>
>

[ ]
RE:06865 pic マイクロコントローラー No.07007
ノノムン さん 12/06/07 11:16
 
こんにちは 秀まるお2さま 山紫水明さま ノノムンです

以前お教え頂いた 変換につきまして、不具合が見つかりました。

元のソース
f_c4  call mvch  ;rf  in  volt  mes
  mov val[0],mv
  clrf val[1]
  clrf val[2]
  clrf val[3]

以前お教え頂いたマクロや置換で、変換したソース
f_c4  call mvch  ;rf  in  volt  mes
  mov val[0],mv
  clrf val+1
  clrf val+2
  clrf val+3

この中には間違いが含まれていて、
それがないソースによっては起こらないことがあり、
気が付きませんでした。
しかしエラーになる分があって、調べてみますと
次のように変換しないといけないことが判りました。

正しいソース
f_c4  call mvch  ;rf  in  volt  mes
  mov val+0,mv (または mov val,mv)
  clrf val+1
  clrf val+2
  clrf val+3

この様にするにはどの様にすればよいでしょうか?
前のソースには+と[]が含まれていましたが+が無くて[]だけが残ってしまい、
それがエラーになることが原因でした。

それでは宜しくお願いします。

(2012/03/06 9:14), 秀まるお2 wrote:
>  セミコロン以降を置換しないようにするには…
>
>  まずは、「ファイルタイプ別の設定・デザイン・複数行コメント」にて、「言
> 語」の所を「アセンブリ語」にします。そうすると、セミコロン以降がコメント
> の色で表示されるようになります。
>
>  そうした上で、置換の時に、「追加の条件」をONにした上で、追加の条件とし
> て「コメントを除く」とすればいいです。それでコメント部分は置換されなくな
> ります。
>
>  それが一番便利なやり方だと思います。
>
>  それと、置換のやり方が分かったとして、それをマクロにしておきたい場合ど
> うするかですが…。
>
>  一番簡単なのは、「マクロ」メニューの中にある「キー操作の記録開始/終
> 了...」のコマンドと、「キー操作の保存」を組み合わせてマクロを作成する方
> 法になります。
>
>  例えば具体的な例で書かせていただきますと、
>
>  1.「キー操作の記録開始/終了」を実行する。
>    (タイトルバーが「記録中!」になります)
>
>  2.置換コマンドを実行して、
>
>    検索: \+([0-9]+)
>    置換: [\1]
>    正規表現: ON
>    追加の条件: コメントを除く
>
>    で全置換を実行する。
>
>  3.「キー操作の記録開始/終了」をもう一度実行する。
>
>  4.「キー操作の保存...」を実行して、適当な名前を入力して保存する。
>
>  です。それで保存されたマクロファイルを改めて秀丸で開いて見ると、
>
>   setcompatiblemode 15;
>   begingroupundo;
>   replaceall "\\+([0-9]+)" , "[\\1]" , regular, nocasesense
>                 , hilight, maskcomment;
>   if( ! result )  beep;
>   endgroupundo 1;
>
>  みたいな内容になってます。それでマクロが完成です。
>
>  そんな感じでマクロを作成していったらいいんじゃないかと思います。
>
>

[ ]
RE:07007 pic マイクロコントローラー No.07008
秀まるお2 さん 12/06/07 12:01
 
 こちらで簡単にテストした限りでは、

   mov val[0],mv

 の行も、

   clrf val[1]

 の行も、同じように「+」形式に置換するようでした。

 置換コマンドは、

検索: \[([0-9]+)\]
置換: +\1

 で、正規表現ONにするだけでテストしました。

 うまく置換しないってことは、何か別の正規表現パターンを指定されてるので
しょうか。

 とりあえず、上記のような正規表現パターンで置換してたしかに置換されるか
どうか、置換されるとしたら、置換がうまくいかない方のマクロ内容をここに書
き込んでいただくなどすれば、原因がお返事出来るかなぁと思います。

[ ]
RE:07008 pic マイクロコントローラー No.07016
ノノムン さん 12/06/08 17:53
 
こんにちは

以前のソースを新しいソースと思って、コンパイルしてしまいました。
エラーの表示説明がほとんど無いので、調べてやっと突き止めますと

  mov val[0],mv

が1行残っていて、これが原因と判ったのですが、
もう既に解決できていたことを忘れて、質問してしまいました。

しかし普通 +0 の場合は、mov val,mv と書くのが標準のようで、
(mov val+0,mv でもエラーではありません)
正規ソースと比較するのに時間が掛かって、
解決できていたことが見つけにくくなっていました。

結論は既に解決できていたのを、間違ったソースを用いたため
新たな問題と誤解したことによります。

お手数をとらせまして済みませんでした。

それでは有り難うございました。

(2012/06/07 12:01), 秀まるお2 wrote:
>  こちらで簡単にテストした限りでは、
>
>     mov val[0],mv
>
>  の行も、
>
>     clrf val[1]
>
>  の行も、同じように「+」形式に置換するようでした。
>
>  置換コマンドは、
>
> 検索: \[([0-9]+)\]
> 置換: +\1
>
>  で、正規表現ONにするだけでテストしました。
>
>  うまく置換しないってことは、何か別の正規表現パターンを指定されてるので
> しょうか。
>
>  とりあえず、上記のような正規表現パターンで置換してたしかに置換されるか
> どうか、置換されるとしたら、置換がうまくいかない方のマクロ内容をここに書
> き込んでいただくなどすれば、原因がお返事出来るかなぁと思います。
>
>

[ ]