📄 parser.pm
字号:
package Parser;
# ************************************************************
# Description : A basic parser that requires a parse_line override
# Author : Chad Elliott
# Create Date : 5/16/2002
# ************************************************************
# ************************************************************
# Pragmas
# ************************************************************
use strict;
use FileHandle;
my($cwd) = Cwd::getcwd();
# ************************************************************
# Subroutine Section
# ************************************************************
sub new {
my($class) = shift;
my($self) = bless {'line_number' => 0,
}, $class;
return $self;
}
sub cd {
my($self) = shift;
my($dir) = shift;
my($status) = chdir($dir);
if ($status && $dir ne '.') {
if ($dir =~ /^\// || $dir =~ /^[A-Za-z]:/) {
$cwd = $dir;
}
else {
$cwd .= "/$dir";
}
}
return $status;
}
sub getcwd {
#my($self) = shift;
return $cwd;
}
sub strip_line {
my($self) = shift;
my($line) = shift;
++$self->{'line_number'};
$line =~ s/\/\/.*//;
$line =~ s/^\s+//;
$line =~ s/\s+$//;
return $line;
}
sub process_special {
my($self) = shift;
my($line) = shift;
my($length) = length($line);
for(my $i = 0; $i < $length; $i++) {
my($ch) = substr($line, $i, 1);
if ($ch eq "\\" && $i + 1 < $length) {
substr($line, $i, 1) = '';
$length--;
}
elsif ($ch eq '"') {
substr($line, $i, 1) = '';
$length--;
$i--;
}
}
return $line;
}
sub read_file {
my($self) = shift;
my($input) = shift;
my($ih) = new FileHandle();
my($status) = 1;
my($errorString) = '';
$self->{'line_number'} = 0;
if (open($ih, $input)) {
while(<$ih>) {
my($line) = $self->strip_line($_);
($status, $errorString) = $self->parse_line($ih, $line);
if (!$status) {
last;
}
}
close($ih);
}
else {
$errorString = 'ERROR: Unable to open for reading';
$status = 0;
}
return $status, $errorString;
}
sub line_number {
my($self) = shift;
my($number) = shift;
if (defined $number) {
$self->{'line_number'} = $number;
}
return $self->{'line_number'};
}
sub create_array {
my($self) = shift;
my($line) = shift;
my(@array) = ();
my($length) = length($line);
my($prev) = 0;
my($double) = 0;
for(my $i = 0; $i <= $length; $i++) {
my($ch) = substr($line, $i, 1);
if (!$double && ($ch eq '' || $ch =~ /\s/)) {
my($val) = substr($line, $prev, $i - $prev);
$val =~ s/^\s+//;
$val =~ s/\s+$//;
if ($val =~ /^\"(.*)\"$/) {
$val = $1;
}
push(@array, $val);
for(; $i < $length; $i++) {
if (substr($line, $i, 1) !~ /\s/) {
$i--;
last;
}
}
$prev = $i + 1;
}
elsif ($double && $ch eq "\\" && $i + 1 < $length) {
substr($line, $i, 1) = '';
$length--;
}
elsif ($ch eq '"') {
$double ^= 1;
}
}
return \@array;
}
sub slash_to_backslash {
my($self) = shift;
my($file) = shift;
$file =~ s/\//\\/g;
return $file;
}
# ************************************************************
# Virtual Methods To Be Overridden
# ************************************************************
sub parse_line {
#my($self) = shift;
#my($ih) = shift;
#my($line) = shift;
}
1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -