ちょっと改善(output hoge などの宣言にヒットしない工夫(とも言えない程度の工夫)

以前掲載した内容では

output , input , reg 宣言なども

インスタンスのパターンとしてマッチしてしまっていたので、

「(」を加えてみた。

#( の前に改行するようなRTL書かれたらアウトだが。

※モジュール側のパターンには「module」が入っているので心配無用

 

testj11.pl

--------------------

#!usr/bin/env perl

#input, output, regなどにかからないように「(」を入れた

$i= 0;


while($line = <>){

$i=$i+1;

# if ( $line =~ m/^\s*module\s*([a-zA-Z0-9_]+)/ ) {
#if ( $line =~ m/\bmodule\b\s*(.+)\(/ ) {   # NG .+使うと最後の空白も含んでしまう

 if ( $line =~ m/\bmodule\b\s*([a-zA-Z0-9_]+)/ ) { # (も要らない。moduleはこれが一番シンプルで最適かも。(ただしmodule直後の改行には非対応(要対策)

print $i;
print $line;
$modulename = $1; #()内をキャプチャして変数へ
}

# if ( $line =~ m/^\s*[A-Z0-9_]+\s+[a-z0-9]+\s*/ ) {
# if ( $line =~ m/^\s*[A-Z0-9_]+\s+[a-z0-9]+/ ) {
# if ( $line =~ m/^\s*[A-Z0-9_]+\s+[\\a-z0-9]+/ ) {
# 再度moduleでマッチしないように
if ( $line =~ m/^\s*([a-zA-Z0-9_])+\s+([a-zA-Z0-9\\\.\/]+)\s*\(/ && $line !~ m/^\s*module/) {
print $i;
print "$modulename,";
print $line;
# } elsif ( $line =~ m/^\s*[A-Z0-9_] && $line =~ m/
#
#
}

}

--------------------

 

<実行結果>

(修正後): if ( $line =~ m/\bmodule\b\s*([a-zA-Z0-9_]+)/ ) { 

※モジュール名後にスペース入らず(良♪)

shin@ubuntu:~/TEXToperation$ perl5.10.1 test11.pl test001.v
1module HOGEMODULE ( // No space
16HOGEMODULE,DUMMY Instance ();
18HOGEMODULE,INST instance1 ( );
19HOGEMODULE,INST instance2( );
20HOGEMODULE,INST \instance3 ( );
21HOGEMODULE,INST \insta/nce4 ( );
23HOGEMODULE,INST \insta7nce6 ( );
24HOGEMODULE,INST insta.7nce7 ( );
29HOGEMODULE,INST instance9 ( )
30HOGEMODULE, INST insta10 ( );
32HOGEMODULE,INSTout inStance01 ( );
38 module HOGE2 ( // space x 1
46 module HOGE3 ( // tab x 1
52 module HOGE3 ( // tab x 1 + space x 2
58module HOGEreg001 (

 

(修正後):if ( $line =~ m/\bmodule\b\s*(.+)\(/ ) {   #NG を使用時

16行目以降のモジュール名直後に、スペースが一つ入ってしまってる。

shin@ubuntu:~/TEXToperation$ perl5.10.1 test11.pl test001.v
1module HOGEMODULE ( // No space
16HOGEMODULE ,DUMMY Instance ();
18HOGEMODULE ,INST instance1 ( );
19HOGEMODULE ,INST instance2( );
20HOGEMODULE ,INST \instance3 ( );
21HOGEMODULE ,INST \insta/nce4 ( );
23HOGEMODULE ,INST \insta7nce6 ( );
24HOGEMODULE ,INST insta.7nce7 ( );
29HOGEMODULE ,INST instance9 ( )
30HOGEMODULE , INST insta10 ( );
32HOGEMODULE ,INSTout inStance01 ( );
38 module HOGE2 ( // space x 1
46 module HOGE3 ( // tab x 1
52 module HOGE3 ( // tab x 1 + space x 2
58module HOGEreg001 (

 

(修正前)

shin@ubuntu:~/TEXToperation$ perl5.10.1 test11.pl test001.v
1module HOGEMODULE ( // No space
3HOGEMODULE ,input hoge ;
5HOGEMODULE ,output hogege;
7HOGEMODULE ,reg aaa ;
8HOGEMODULE ,reg aaa ; // hoge hoge hoge
16HOGEMODULE ,DUMMY Instance ();
18HOGEMODULE ,INST instance1 ( );
19HOGEMODULE ,INST instance2( );
20HOGEMODULE ,INST \instance3 ( );
21HOGEMODULE ,INST \insta/nce4 ( );
22HOGEMODULE ,INST \insta_nce5 ( );
23HOGEMODULE ,INST \insta7nce6 ( );
24HOGEMODULE ,INST insta.7nce7 ( );
29HOGEMODULE ,INST instance9 ( )
30HOGEMODULE , INST insta10 ( );
32HOGEMODULE ,INSTout inStance01 ( );
38 module HOGE2 ( // space x 1
46 module HOGE3 ( // tab x 1
52 module HOGE3 ( // tab x 1 + space x 2
58module HOGEreg001 (