genslowczas 1.52 KB
#! /usr/bin/perl
# Dostosowanie formatu słownika wymagań czasownikowych.
#
# Author: Marcin Woliński
# This file is in the public domain.

use strict;
use locale;

 
my $srcdict=shift;
$srcdict = 's_czas_walenty' unless $srcdict;

my $podmiot='subj(np(mian))';
my (%slownik, %swislownik);

open SLOW, ">slowczas.pl" || die;

print SLOW <<EOS;
% This file has been generated with genslowczas.  Do not modify.  
% Modifications should be applied to the file $srcdict instead.\n
%
EOS

open TAB, "<$srcdict" || die;
while (<TAB>) {
    s/refl/sie/g; # Na razie nie odróżniamy w parserze zwrotnego «się»
		  # od morfologicznego.
    if (/^%(?!%)/) {
	print SLOW;
    } elsif (/^%%/) {
    } elsif (m/^([^\t %]+)( się)?\t([^\t%]+)\t([^\t%]*)(?: ?%.*)?\n/) {
	my ($lemat, $sie, $wl, @wyms)=($1, ($2?'s':'n'), $3, split('\+',$4));

	my $key="$lemat";
	$slownik{$key}=[$lemat, 'n', ()]
	    unless defined $slownik{$key};
	unshift @wyms, 'sie'
	    if $sie eq 's';
	unshift @wyms, $podmiot
	    if $wl eq 'V';
	push @{$slownik{$key}->[2]}, [@wyms];
    } else {
	die "Error in $srcdict w. $.: $_";
    }
}

foreach my $verb (sort keys %slownik) {
    my ($lemat, $sie, $wyms) = @{$slownik{$verb}};
    my $entry = "slowczas($lemat, $sie, [".
      join(', ',map {"[".join(', ', @$_)."]"} @$wyms).
      "]).\n";
    $swislownik{$entry}=1;
}

print SLOW $_
    foreach sort keys %swislownik;

print SLOW <<EOS;
%%% \x4Cocal Variables: 
%%% coding: utf-8
%%% mode: prolog
%%% End: 
EOS


### Local Variables:
### coding: utf-8
### mode: perl
### End: