OpenCores
URL https://opencores.org/ocsvn/core_arm/core_arm/trunk

Subversion Repositories core_arm

[/] [core_arm/] [trunk/] [soft/] [doc/] [doc1.pl] - Rev 5

Go to most recent revision | Compare with Previous | Blame | View Log

%d1_arch_scope;
%d1_func_scope;
@d1_scope = ("none");
 
sub d1_process
{
    my ($body,$off) = @_;
    my (@match,$pos,$tok);
    my (%tmp,$posbeg,$posend,$reg);
    while (length($body) != 0) {
	if ($body =~ /([\W]*--[^\n]*\n)/) {
	    $body = substr($body,length($1));
	    $off += length($1);
	} else {
	    ($body,@match) = d2_scannext($body,"($id)");
	    if ($#match != -1) {
		$tok = $match[1];
		$posbeg = $off+$match[6]; 
		$posend = $off+$match[6]+length($match[0]); 
		$off = $posend; 
		if ($dbgon == 1) { print ("<$tok [$posbeg:$posend]>");}
		if      (exists($d4_keyword{$tok})) {
		    if      ($tok eq "architecture") {
			if (exists($d2_begs{$posbeg})) {
			    d1_initarch($d2_begs{$posbeg});
			    push(@d1_scope,"arch");
			} else {
 
			}
		    } elsif ($tok eq "function") {
			if (exists($d2_begs{$posbeg})) {
			    d1_initfunc($d2_begs{$posbeg});
			    push(@d1_scope,"func");
			} else {
			}
		    } elsif ($tok eq "procedure") {
			if (exists($d2_begs{$posbeg})) {
			    d1_initproc($d2_begs{$posbeg});
			    push(@d1_scope,"func");
			} else {
			}
		    } elsif ($tok eq "end") {
			if (exists($d2_ends{$posbeg})) {
			    pop(@d1_scope);
			} else {
			}
		    } elsif ($tok eq "variable") {
			$reg = $match[0].$body;
			if ($d1_scope[$#d1_scope] eq "arch") {
			    if ($reg =~ /variable([^;]*);/) {
				d1_addarch($1);
			    }
			}
		    } elsif ($tok eq "signal") {
			$reg = $match[0].$body;
			if ($d1_scope[$#d1_scope] eq "arch") {
			    if ($reg =~ /signal([^;]*);/) {
				d1_addarch($1);
			    }
			}
		    } elsif ($tok eq "record") {
			$reg = $match[0].$body;
			if ($d1_scope[$#d1_scope] eq "arch") {
			    if ($reg =~ /signal([^;]*);/) {
				d1_addarch($1);
			    }
			}
		    } else {
			d5_addcut($posbeg,$posend,"style",$d4_keyword{$tok}{style});
		    }
		} elsif (exists($d2_records{$tok})) {
		    d5_addcut($posbeg,$posend,"record",$tok);
		} elsif (exists($d2_funcs{$tok})){
		    d5_addcut($posbeg,$posend,"func",$tok);
		} elsif (exists($d2_procs{$tok})){
		    d5_addcut($posbeg,$posend,"proc",$tok);
		} elsif (exists($d2_consts{$tok})){
		    d5_addcut($posbeg,$posend,"const",$tok);
		} elsif (exists($d2_enums{$tok})) {
		    d5_addcut($posbeg,$posend,"enum",$tok);
		} elsif (exists($d2_enumelems{$tok})) {
		    d5_addcut($posbeg,$posend,"enum",$d2_enumelems{$tok});
		} else {
		    $type = d1_vartype($tok);
		    if (not ($type eq "")) {
			d5_addcut($posbeg,$posend,"vartyp",$type);
			($body,@match) = d1_travvar($body,$type,$off);
			$off = $off+$match[6]+length($match[0]);
		    } else {
			if (exists($d3_usedby_set{$tok})) {
 
			    d5_addcut($posbeg,$posend,"file",$tok);
			}
		    }
		}
	    }
	}
    }
}
 
sub d1_travvar
{
    my ($body,$type,$off) = @_;
    my $pos = -1,my $tok,my $posbeg,my $posend;
    my @match = (),my %tmp,my %elem,my @tmpmatch;
    my $reg = "^($sp\\.$sp)($id)";
    my $regindex = "^$sp\\([^\\)]*?\\)";
    $match[0] = "";
    $match[6] = 0;
    if ($body =~ /$regindex/) {
	$match[0] = $&;
	$body = substr($body,length($&));
    }
    if ($body =~ /$reg/) {
	$tok = $2;
	$posbeg = $off + length($match[0])+length($1);
	$posend = $off + length($match[0])+length($&);
	$off = $posend;
	%tmp = @{$d2_records{$type}};
	%elem = @{$tmp{elem}};
	if (exists($elem{$tok})) {
	    $match[0] .= $&;
	    $body = substr($body,length($&));
	    d5_addcut($posbeg,$posend,"vartyp",$elem{$tok});
	    ($body,@tmpmatch) = d1_travvar($body,$elem{$tok},$off);
	    $match[0].= $tmpmatch[0];
	}
    }
    return ($body,@match);
}
 
sub d1_initfunc
{
    my ($n) = @_;
    my (%tmp,%args,%vari,$ke);
    %tmp = @{$d2_funcs{$n}};
    %args = @{$tmp{argselem}};
    %vari = @{$tmp{varielem}};
 
    %d1_func_scope = ();
    if ($dbgon == 1) { print ("Initializing function scope\n"); };
    for $ke (sort keys(%args)) {
	$d1_func_scope{$ke} = $args{$ke};
	if ($dbgon == 1) { print ("-Add $ke:".$args{$ke}."\n"); };
    }
    for $ke (sort keys(%vari)) {
	$d1_func_scope{$ke} = $vari{$ke};
	if ($dbgon == 1) { print ("-Add $ke:".$vari{$ke}."\n"); };
    }
}
 
sub d1_initproc
{
    my ($n) = @_;
    my (%tmp,%args,%vari,$ke);
    %tmp = @{$d2_procs{$n}};
    %args = @{$tmp{argselem}};
    %vari = @{$tmp{varielem}};
 
    %d1_func_scope = ();
    if ($dbgon == 1) { print ("Initializing procedure scope\n"); };
    for $ke (sort keys(%args)) {
	$d1_func_scope{$ke} = $args{$ke};
	if ($dbgon == 1) { print ("-Add $ke:".$args{$ke}."\n"); };
    }
    for $ke (sort keys(%vari)) {
	$d1_func_scope{$ke} = $vari{$ke};
	if ($dbgon == 1) { print ("-Add $ke:".$vari{$ke}."\n"); };
    }
}
 
sub d1_initarch 
{
    my ($n) = @_;
    my (%tmp,%port,$ke,$enti);
    %d1_arch_scope = ();
    %tmp = @{$d2_archs{$n}};
    $enti = $tmp{enti};
 
    %d1_arch_scope = ();
    if ($dbgon == 1) { 
	print ("Initializing architecture scope $n of $enti\n"); 
    };
    if (exists($d2_entities{$enti})) {
	%tmp = @{$d2_entities{$enti}};
	%port = @{$tmp{portelem}};
	for $ke (sort keys(%port)) {
	    $d1_arch_scope{$ke} = $port{$ke};
	    if ($dbgon == 1) { print ("-Add $ke:".$port{$ke}."\n"); };
	}
    }
}
 
sub d1_addarch
{
    my ($def) = @_;
    my %elem;
    %elem = d2_splitdef($def);
    for $ke (keys(%elem)) {
	$d1_arch_scope{$ke} = $elem{$ke};
    }
}
 
sub d1_vartype
{
    my ($tok) = @_;
    my $type = "";
    if ($d1_scope[$#d1_scope] eq "arch") {
	if (exists($d1_arch_scope{$tok})) {
	    $type = $d1_arch_scope{$tok};
	}
    } elsif ($d1_scope[$#d1_scope] eq "func") {
	if (exists($d1_func_scope{$tok})) {
	    $type = $d1_func_scope{$tok};
	}
    }
    return $type;
}
 
1;
 
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.