Upload
andysh
View
2.348
Download
0
Embed Size (px)
DESCRIPTION
Citation preview
Translatinghuman language
with computer grammar
German — English
__DATA__
Mein Name ist Andreas.
__DATA__
Mein Name ist Andreas. My name is Andrew.
my %dictionary = (
Mein => 'My',
Name => 'name',
ist => 'is',
Andreas => 'Andrew',
);
my %dictionary = (
Mein => 'My',
Name => 'name',
ist => 'is',
Andreas => 'Andrew',
);
$text =~ s{(\w+)}{$dictionary{$1}}ge;
sub Mein {return "My $_[0]"; }
sub Name {return "name $_[0]"; }
sub ist {return "is $_[0]"; }
sub Andreas {return "Andrew $_[0]";}
sub Mein {return "My $_[0]"; }
sub Name {return "name $_[0]"; }
sub ist {return "is $_[0]"; }
sub Andreas {return "Andrew $_[0]";}
say eval $text;
sub translate {
given ($_[0]) {
when ('Der') {return 'the' }
when ('Mein') {return 'my' }
when ('Sein') {return 'his' }
when ('Name') {return 'name' }
when ('ist') {return 'is' }
when ('Andreas') {return 'Andrew'}
}
}
Grammar
Grammarforefer
sentence : word(s) fullstop eofile
sentence : word(s) fullstop eofile
word : /\w+/
fullstop : '.'
eofile : /^\Z/
sentence : word(s) fullstop eofile
word : /\w+/ {
print ::translate($item[1])
}
fullstop : '.'
eofile : /^\Z/
my $text = <DATA>;
$parser =
new Parse::RecDescent ($grammar);
$parser‐>sentence($text);
sentence : statement eofile
statement : subject verb object fullstop
subject : adjective noun
| article noun
| noun
object : noun
noun : 'Name'
| 'Andreas'
adjective : 'Mein'
| 'Sein'
verb : 'ist'
article : 'Die'
| 'Der'
| 'Das'
fullstop : '.'
eofile : /^\Z/
Mein Name ist Andreas.
Sein Name ist Andreas.
Name ist Andreas.
Der Name ist Andreas.
Mein Name ist Andreas. My name is Andrew.
Sein Name ist Andreas.
Name ist Andreas.
Der Name ist Andreas.
Mein Name ist Andreas. My name is Andrew.
Sein Name ist Andreas. His name is Andrew.
Name ist Andreas.
Der Name ist Andreas.
Mein Name ist Andreas. My name is Andrew.
Sein Name ist Andreas. His name is Andrew.
Name ist Andreas. Name is Andrew.
Der Name ist Andreas.
Mein Name ist Andreas. My name is Andrew.
Sein Name ist Andreas. His name is Andrew.
Name ist Andreas. Name is Andrew.
Der Name ist Andreas. The name is Andrew.
Mein Name ist Andreas. My name is Andrew.
Sein Name ist Andreas. His name is Andrew.
Name ist Andreas. Name is Andrew.
Der Name ist Andreas. The name is Andrew.
Ich heiße Andreas.
Mein Name ist Andreas. My name is Andrew.
Sein Name ist Andreas. His name is Andrew.
Name ist Andreas. Name is Andrew.
Der Name ist Andreas. The name is Andrew.
Ich heiße Andreas. I am called Andrew.
Perl 5Perl 6RubyPythonPHPJavaC++
Parrot
Perl 5Perl 6RubyPythonPHPJavaC++
Parrot
Perl 5Perl 6RubyPythonPHPJavaC++
Mein Name ist Andreas.
$VAR1 = {
'object' => 'Andreas',
'person' => 3,
'subject' => 'Name',
'possession' => 'Mein',
'action' => 'be'
};
Ich heiße Andreas.
$VAR1 = {
'subject' => 'Andreas',
'object' => 'Andreas',
'person' => 1,
'action' => 'name'
};
say ucfirst (
($::grammar{possession}
? translate($::grammar{possession}) . ' '
: ''
)
. translate($::grammar{subject}) . ' '
. conjugation(
$::grammar{action},
$::grammar{person}
) . ' '
. translate($::grammar{object}) . '.'
);
Mein Name ist Andreas.
Ich heiße Andreas.
Mein Name ist Andreas. My name is Andrew.
Ich heiße Andreas.
Mein Name ist Andreas. My name is Andrew.
Ich heiße Andreas. I am Andrew.
640 pages!