有这样一段文本: pin (CLKA) {\n timing {\n related_pin : CLKB;\n timing_type :hold;\n when :”!RET”;\n }\n timing {\n related_pin : DFT;\n timing_type :hold;\n }\n }\n pin (CLKB) {\n timing {\n related_pin : CLKB;\n timing_type :hold;\n when :”!RET”;\n }\n }\n 用perl 动态哈希存储pin紧跟括号里的字符,以及不同timing里的related pin 及timing_type的信息 输出格式为: define_arc \ -type hold \ -pin CLKA pin_dir R \ -related_pin ClKB \ -when !RET \
时间: 2023-06-30 20:08:52 浏览: 135
以下是用Perl动态哈希存储pin和timing信息的代码:
```
#!/usr/bin/perl
use strict;
use warnings;
my %pins;
my $current_pin;
while (<>) {
chomp;
if (/^pin \((\w+)\)/) {
$current_pin = $1;
$pins{$current_pin} = {};
} elsif (/^ timing {/) {
my %timing;
while (<>) {
chomp;
last if /^}/;
if (/^\s*(\w+)\s*:\s*(\w+)\s*;\s*$/) {
$timing{$1} = $2;
}
}
push @{$pins{$current_pin}->{timing}}, \%timing;
}
}
foreach my $pin (sort keys %pins) {
foreach my $timing (@{$pins{$pin}->{timing}}) {
print "define_arc -type $timing->{timing_type} -pin $pin pin_dir R -related_pin $timing->{related_pin} -when $timing->{when}\n";
}
}
```
该代码将输入文本作为标准输入流接收,逐行解析。首先定义一个哈希表 `%pins` 来存储每个 pin 的信息。当匹配到 `pin` 行时,将当前的 pin 名称存储在 `$current_pin` 变量中,并在 `%pins` 哈希表中创建一个空哈希表来存储该 pin 的信息。当匹配到 `timing` 行时,创建一个新的哈希表 `%timing` 来存储该 timing 的信息,解析出相关的信息后存储在 `%timing` 中,并将 `%timing` 存储在 `%pins{$current_pin}->{timing}` 数组中。最后,遍历 `%pins` 哈希表,输出每个 pin 中所有 timing 的信息。
阅读全文