AI-Prolog
view release on metacpan or search on metacpan
lib/AI/Prolog/Parser.pm view on Meta::CPAN
$self->skipspace;
$ts->[ $i++ ] = $self->_term;
$self->skipspace;
}
else {
$ts->[ $i++ ] = $term->new( NULL, 0 );
}
if ( ']' ne $self->current ) {
$self->parseerror("Expecting ']'");
}
$self->advance;
$term->{bound} = 1;
$term->{deref} = 0;
$term->{functor} = "cons";
$term->{arity} = 2;
$term->{args} = [];
for my $j ( reverse 1 .. $i - 2 ) {
my $term = $term->new( "cons", 2 );
$term->setarg( 0, $ts->[$j] );
$term->setarg( 1, $ts->[ $j + 1 ] );
$ts->[$j] = $term;
}
$term->{args}[0] = $ts->[0];
$term->{args}[1] = $ts->[1];
}
}
elsif ( '!' eq $self->current ) {
$self->advance;
return $term->CUT;
}
else {
$self->parseerror(
"Term should begin with a letter, a digit, or '[', not a @{[$self->current]}"
);
}
return $term;
}
1;
__END__
=head1 NAME
AI::Prolog::Parser - A simple Prolog parser.
=head1 SYNOPSIS
my $database = Parser->consult($prolog_text).
=head1 DESCRIPTION
There are no user-serviceable parts inside here. See L<AI::Prolog|AI::Prolog>
for more information. If you must know more, there are a few comments
sprinkled through the code.
=head1 SEE ALSO
W-Prolog: L<http://goanna.cs.rmit.edu.au/~winikoff/wp/>
Michael BartE<225>k's online guide to programming Prolog:
L<http://kti.ms.mff.cuni.cz/~bartak/prolog/index.html>
=head1 AUTHOR
Curtis "Ovid" Poe, E<lt>moc tod oohay ta eop_divo_sitrucE<gt>
Reverse the name to email me.
This work is based on W-Prolog, L<http://goanna.cs.rmit.edu.au/~winikoff/wp/>,
by Dr. Michael Winikoff. Many thanks to Dr. Winikoff for granting me
permission to port this.
=head1 COPYRIGHT AND LICENSE
Copyright 2005 by Curtis "Ovid" Poe
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
( run in 1.122 second using v1.01-cache-2.11-cpan-e1769b4cff6 )