#!/usr/bin/perl -w =head1 NAME makecheck.pl - скрипт для создания, функции, проверяющего слова на предмет наличия в словаре. =head1 SYNOPSIS makecheck.pl =head1 BUGS На самом деле используется упрощённый формат описания аффиксов. Существенны только строчки "prefix", "suffix" и строчки, в которых встречается знак ">". Причём любая такая строка (кроме закомментированных) будет считаться строкой описания аффикса. =head1 AUTHOR Роман Семизаров =cut use locale; use POSIX qw (locale_h); use lib "../lib"; use chgkfiles; do "../bin/common.pl"; if ((uc 'а') ne 'А') {die "!Koi8-r locale not installed!\n"}; input_files(RULES); output_files(CHECK); myprint (CHECK, "#!perl\n\n"); auto_message(CHECK, "makecheck.pl"); myprint(CHECK, 'sub checkit {my $nf=\'\'; my $a; my ($uword,$words)=@_; '); while ( ($sha,$_)=getstring("\s*>\s*",RULES),$sha ) { $sha =~ s/\s+//g; s/\s+//g; if ( $sha =~ m/^flag\s*\*(.):/ ) { $flag=$1; } if ($_) { s/(\#.*)$//g; ($f,$s)=split(","); if (!$s) {$s = $f; $f=""}; $f=~s/^-//; if ( $sha eq "." ) { $sha=""; } if ( $s eq "-") { $s="" } $sha= $sha."\$"; $s= $s."\$"; myprint (CHECK, "\n\n#-------------------------------------\n\n"); myprint (CHECK, " \$\_=\$uword; if ((s/$s/$f/) && (m/$sha/) && (\$a=\$\$words{\$\_}) && (\$a=~m/$flag/)) \{ \$nf.=\"\$\_/$flag \"; \}"); } } myprint (CHECK, " \$\_=\$uword; if (\$\$words{\$\_}) \{ \$nf.=\"\$\_/! \"; \} return \$nf; "); myprint (CHECK,"} 1\n")