我希望Perl解析代码文本并识别某些东西,例如代码:
use strict;
use warnings;
$/ = undef;
while (<DATA>) {
s/(\w+)(\s*<=.*?;)/$1_yes$2/gs;
print;
}
__DATA__
always @(posedge clk or negedge rst_n)
if(!rst_n)begin
d1 <= 0; //perl_comment_4
//perl_comment_5
d2 <= 1 //perl_comment_6
+ 2;
end
else if( d3 <= d4 && ( d5 <= 3 ) ) begin
d6 <= d7 +
(d8 <= d9 ? 1 : 0);
//perl_comment_7
d10 <= d11 <=
d12
+ d13
<= d14 ? 1 : 0;
end
Run Code Online (Sandbox Code Playgroud)
匹配目标是满足以下所有条件的:
(1)从组合开始word\s*<=.这里\s*可能有0个或更多空格,换行符,制表符.
(2)上述"组合"应该是任何一对 …
我目前正在使用 Perl 来解析来自 RS232 串行端口的传入命令序列。我尝试使用状态机,它的预期行为是:(1)从串口接收一系列字节;(2) 状态机使用字节作为输入,并跳转到适当的状态。
我想出了一个简化的演示Perl代码(贴在下面),但是遇到了一个问题: 当代码进入“while(1){}”时,就卡在这里,出不来。 因此,$din 字节序列分配被“while(1){}”阻止,并且对状态机不可见。因此,FSM 卡在“INIT”状态,根本不跳转。
我认为这应该是 Perl 编码中一个非常简单或入门级的练习,但是通过 Google 搜索并没有太大帮助。谁能帮我这个?先谢谢了~
...
my %next_state = (
"INIT" => sub{
$din eq "AA" and return "HEADER0" ;
return "INIT" ;
},
"HEADER0" => sub{
$din eq "99" and return "HEADER1" ;
return "INIT" ;
},
...
);
# Set state machine's initial state.
my $cur_state = "INIT" ;
# Integer for debugging purpose.
my $itgi = 0;
# Run the state machine. …Run Code Online (Sandbox Code Playgroud)