こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

秀丸での正規表現:複雑な条件を指定する場合 続き

この質問は、
http://okwave.jp/qa/q8757880.html
の続きです。

具体的な事を全然書いてませんでした。すみません。
Verilog-HDLというハードウェア記述言語での話です。
上記であげたパターンは、サブモジュールのインスタンス記述
(プログラムで言うサブルーチン呼び出しのようなもの)です。

サブモジュールのインスタンス記述を強調したいと思っていますが、それ以外にも
always @(posedge clk)begin
 if(xxx)begin
  ...
 end
 else if(yyy)begin //←ここで誤検出
  ...
 end
end
というサブモジュールでない記述で誤マッチしてしまうのです。

話それてしまいますが
always @(posedge clk)begin
 if(xxx)begin
  ...
 end
 else begin
  if(yyy)begin
   ...
  end
 end
end
とかけばよい、という手もあるのですが、他者のコードも受け入れる関係上、その手も難しいのが実情です。

話が前後してしまいましたがサブモジュールインスタンス記述は、
sub_mod_name instance_name ( ....
のようになっており、1語目、2語目ともに任意の文字列となっています。
else ifともに言語上の予約語であり、これはインスタンス記述にはなり得ません。

『これにマッチする正規表現」かつ『else if(』にはマッチしないというのは、そもそも『ひとつの正規表現』では表せないのかと悩んでおります。

長くなりすみません。
なにか抜けている点などありましたらご指摘頂けると助かります。

投稿日時 - 2014-09-18 09:38:26

QNo.8758758

困ってます

質問者が選んだベストアンサー

後方不一致で
(?!else if)\w\d*\s+\w\d*
ではどうですか?

(?!else if|aaa|bbb) のようにすれば複数指定可。
Verilogなるものはまったく分かりませんが、[a-zA-Z][a-zA-Z0-9_]+\s+ ~ よりは \w\d* の方がよくありませんか? また、個人的には先の回答者様のように予約後はそれとして設定した方がよい気がします。

投稿日時 - 2014-09-18 12:32:41

お礼

コメント有難うございます。
後方不一致の考え方を勉強してみようと思います。これで凌げそうです。

お察しの通り、予約語はこれ以外にも多数あり、インスタンス記述の誤検出になる可能性はこれからも出てくると思います。その都度ルールに追加、という運用が落とし所としてはベストかもしれません。

アドバイスのおかげでこの発想に至らせて頂きました。有難うございます!

\w\dの類のキーワードについても、スッキリするので積極使用していきたいと思います。

投稿日時 - 2014-09-18 15:20:22

ANo.1

このQ&Aは役に立ちましたか?

10人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問