Skip to content

Commit

Permalink
Print relations and converse relations.
Browse files Browse the repository at this point in the history
  • Loading branch information
Jesse Alama committed Feb 27, 2010
1 parent ca43882 commit 4f44cc4
Showing 1 changed file with 162 additions and 77 deletions.
239 changes: 162 additions & 77 deletions dependencies.pl
Expand Up @@ -66,7 +66,7 @@ sub copy_mml_lar {
my %definitions_deps;
my %theorems_deps;
my %schemes_deps;
my %vocaularies_converse_deps;
my %vocabularies_converse_deps;
my %notations_converse_deps;
my %constructors_converse_deps;
my %registrations_converse_deps;
Expand All @@ -77,7 +77,7 @@ sub copy_mml_lar {

sub initialize_all_article_dependencies {
foreach my $article (@mml_lar) {
my @article_deps = article_dependencies ($article);
my @article_deps = @{article_dependencies ($article)};
my @article_vocabularies = @{$article_deps[0]};
my @article_notations = @{$article_deps[1]};
my @article_constructors = @{$article_deps[2]};
Expand All @@ -97,15 +97,14 @@ sub initialize_all_article_dependencies {
}
}

sub article_dependencies {
sub article_envget {
my $article = shift ();
my $article_temp_dir = $tempdir . "/" . $article;
# Call envget and use the evl2txt XSLT sheet to get the dependenceis
# for each article. Die immediately if anything goes wrong.
my ($envget_exit_status, $xsltproc_exit_status);
my $envget_exit_status;
my ($article_evl, $article_err, $article_dep);
chdir ($article_temp_dir);
print ("About to call \"$envget $article.miz\" in directory " . getcwd () . "...\n");
system ($envget, "$article.miz");
$envget_exit_status = ($? >> 8);
unless ($envget_exit_status == 0) {
Expand All @@ -124,17 +123,29 @@ sub article_dependencies {
# generated by envget.
croak ("envget generated errors when given $article; unable to proceed");
}
$article_evl = $article . ".evl";
$article_dep = $article . ".dep";

}

sub article_evl2txt {
my $article = shift ();
article_envget ($article);
my $article_evl = $article . ".evl";
my $article_dep = $article . ".dep";
my $article_temp_dir = $tempdir . "/" . $article;
my $xsltproc_exit_status;
chdir ($article_temp_dir);
system ("xsltproc", "--output", $article_dep, $evl2txt, $article_evl);
$xsltproc_exit_status = ($? >> 8);
unless ($xsltproc_exit_status == 0) {
# Ditto.
croak ("xsltproc did not exit cleanly when given $article_evl");
}
chdir ($currdir);
}

# Parse the output from generated by applying the evl2txt sheet.
sub article_dependencies {
my $article = shift ();
article_evl2txt ($article);
# Parse the output from xsltproc generated by applying the evl2txt sheet.
my ($dep_line, $semi_dep_line_field, $dep_line_field);
my @dep_line_fields = ();
my @article_vocabularies = ();
Expand All @@ -146,59 +157,62 @@ sub article_dependencies {
my @article_theorems = ();
my @article_schemes = ();
my @article_deps;
foreach my $article (@mml_lar) {
my $artcle_temp_dir = $tempdir . "/" . $article;
$article_dep = $article . ".dep";
chdir ($article_temp_dir);
my $article_dep_fh;
open ($article_dep_fh, q{<}, $article_dep)
or croak ("Unable to open article dependency file $article_dep under $article_temp_dir!");
$dep_line = <$article_dep_fh>;
unless (defined ($dep_line)) {
croak ("The first line of $article_temp_dir/$article_dep evidently doesn't exist");
my $article_temp_dir = $tempdir . "/" . $article;
my $article_dep = $article . ".dep";
chdir ($article_temp_dir);
my $article_dep_fh;
open ($article_dep_fh, q{<}, $article_dep)
or croak ("Unable to open article dependency file $article_dep under $article_temp_dir!");
while (defined ($dep_line = <$article_dep_fh>)) {
chomp ($dep_line);
# there's always a blank line at the end of the file -- yuck
unless ($dep_line eq "") {
push (@dep_line_fields, $dep_line);
}
close ($article_dep_fh);
@dep_line_fields = split (/\(/x,$dep_line);
foreach my $semi_dep_line_field (@dep_line_fields) {
# should look like: "vocabularies ... )". First, delete the trailing " )"
$dep_line_field = substr ($semi_dep_line_field, -2);
my @dep_line_entries = split (/\ /x,$dep_line_field);
my $first_element = pop (@dep_line_entries);

if ($first_element eq "vocabularies") {
@article_vocabularies = \@dep_line_entries;
}

if ($first_element eq "notations") {
@article_notations = \@dep_line_entries;
}

if ($first_element eq "constructors") {
@article_constructors = \@dep_line_entries;
}

if ($first_element eq "registrations") {
@article_registrations = \@dep_line_entries;
}

if ($first_element eq "requirements") {
@article_requirements = \@dep_line_entries;
}

if ($first_element eq "definitions") {
@article_definitions = \@dep_line_entries;
}

if ($first_element eq "theorems") {
@article_theorems = \@dep_line_entries;
}

if ($first_element eq "schemes") {
@article_schemes = \@dep_line_entries;
}
}
close ($article_dep_fh);
foreach my $dep_line_field (@dep_line_fields) {
# should look like (e.g.) "(vocabularies ...)".
# First, delete the trailing ")"
$dep_line_field = substr ($dep_line_field, 0, -1);
# New get rid of the initial "(";
$dep_line_field = substr ($dep_line_field, 1);
my @dep_line_entries = split (/\ /x,$dep_line_field);
my $first_element = shift (@dep_line_entries);

if ($first_element eq "vocabularies") {
@article_vocabularies = @dep_line_entries;
}

if ($first_element eq "notations") {
@article_notations = @dep_line_entries;
}

if ($first_element eq "constructors") {
@article_constructors = @dep_line_entries;
}

if ($first_element eq "registrations") {
@article_registrations = @dep_line_entries;
}

if ($first_element eq "requirements") {
@article_requirements = @dep_line_entries;
}

if ($first_element eq "definitions") {
@article_definitions = @dep_line_entries;
}

if ($first_element eq "theorems") {
@article_theorems = @dep_line_entries;
}

if ($first_element eq "schemes") {
@article_schemes = @dep_line_entries;
}
chdir ($currdir);
}

@article_deps = (\@article_vocabularies,
\@article_notations,
\@article_constructors,
Expand All @@ -213,36 +227,107 @@ sub article_dependencies {
sub converse {
# Naive quadratic implementation. Tons of intermediate junk
# generated along the way. Does perl have a garbage collector?
my %relation = %{shift ()};
my $arg = shift ();
my %relation = %{$arg};
my %converse = ();
my $elt;
my $range_elt;
my @range;
my @domain;
foreach my $elt (keys (%relation)) {
@range = @{$relation{$elt}};
my $value = $relation{$elt};
my @range = @{$value};
foreach my $range_elt (@range) {
@domain = @{$converse{$range_elt}};
my @domain;
my $range_value = $converse{$range_elt};
if (defined ($range_value)) {
@domain = @{$range_value};
} else {
@domain = ();
}
push (@domain, $elt);
$converse{$range_elt} = \@domain;
}
}
return (%converse);
return (\%converse);
}

read_mml_lar ();
copy_mml_lar ();
initialize_all_article_dependencies ();

sub compute_converses {
my %vocaularies_converse_deps = converse (%vocabularies_deps);
my %notations_converse_deps = converse (%notations_deps);
my %constructors_converse_deps = converse (%constructors_deps);
my %registrations_converse_deps = converse (%registrations_deps);
my %requirements_converse_deps = converse (%requirements_deps);
my %definitions_converse_deps = converse (%definitions_deps);
my %theorems_converse_deps = converse (%theorems_deps);
my %schemes_converse_deps = converse (%schemes_deps);
my $vocaularies_converse = converse (\%vocabularies_deps);
%vocabularies_converse_deps = %{$vocaularies_converse};
my $notations_converse = converse (\%notations_deps);
%notations_converse_deps = %{$notations_converse};
my $constructors_converse = converse (\%constructors_deps);
%constructors_converse_deps = %{$constructors_converse};
my $registrations_converse = converse (\%registrations_deps);
%registrations_converse_deps = %{$registrations_converse};
my $requirements_converse = converse (\%requirements_deps);
%requirements_converse_deps = %{$requirements_converse};
my $definitions_converse = converse (\%definitions_deps);
%definitions_converse_deps = %{$definitions_converse};
my $theorems_converse = converse (\%theorems_deps);
%theorems_converse_deps = %{$theorems_converse};
my $schemes_converse = converse (\%schemes_deps);
%schemes_converse_deps = %{$schemes_converse};
}

sub print_table {
my $arg = shift ();
my %table = %{$arg};
foreach my $key (keys (%table)) {
my $value = $table{$key};
my @values = @{$value};
my $num_values = scalar (@values);
print ("$key: ");
for (my $i = 0; $i < $num_values; $i++) {
print $values[$i];
unless ($i == $num_values - 1) {
print (" ");
}
}
print ("\n");
}
}

sub print_relations {
print ("The vocabularies relation:\n");
print_table (\%vocabularies_deps);
print ("The notations relation:\n");
print_table (\%notations_deps);
print ("The constructors relation:\n");
print_table (\%constructors_deps);
print ("The registrations relation:\n");
print_table (\%registrations_deps);
print ("The requirements relation:\n");
print_table (\%requirements_deps);
print ("The definitions relation:\n");
print_table (\%definitions_deps);
print ("The theorems relation:\n");
print_table (\%theorems_deps);
print ("The schemes relation:\n");
print_table (\%schemes_deps);
}

sub print_converses {
print ("Converse of the vocabularies relation:\n");
print_table (\%vocabularies_converse_deps);
print ("Converse of the notations relation:\n");
print_table (\%notations_converse_deps);
print ("Converse of the constructors relation:\n");
print_table (\%constructors_converse_deps);
print ("Converse of the registrations relation:\n");
print_table (\%registrations_converse_deps);
print ("Converse of the requirements relation:\n");
print_table (\%requirements_converse_deps);
print ("Converse of the definitions relation:\n");
print_table (\%definitions_converse_deps);
print ("Converse of the theorems relation:\n");
print_table (\%theorems_converse_deps);
print ("Converse of the schemes relation:\n");
print_table (\%schemes_converse_deps);
}

read_mml_lar ();
copy_mml_lar ();
initialize_all_article_dependencies ();
print_relations ();
compute_converses ();
print_converses ();

0 comments on commit 4f44cc4

Please sign in to comment.