NAME
Math::SymbolicX::Calculator::Interface - Miscallaneous routines for interfaces
SYNOPSIS
Do not use this in your scripts. Use one of the ::Interface::Foo
classes.
DESCRIPTION
This is very much an internal class.
This module is a base class for interfaces to Math::SymbolicX::Calculator. It is not an interface by itself. It doesn't even define stubs for all methods of an interface and as such isn't an interface definition for Calculator::Interfaces. Instead, it contains various miscellaneous methods which may be of use to classes which actually implement interfaces.
METHODS RELATED TO PARSING
These methods parse commands of a somewhat generic syntax.
When defining the form of the accepted input strings below, I'll be using certain variables:
$SYMBOL
=> An identifier matching /[A-Za-z][A-Za-z0-9_]*/
$FORMULA
=> String that can be parsed as a Math::Symbolic tree
$PATTERN
=> String that can be parsed as a
Math::Symbolic::Custom::Transformation. (*)
$REPLACEMENT
=> String that can be parsed as the replacement part
of a Math::Symbolic::Custom::Transformation (*).
$TRANSFORMATION
=> String that can be parsed as a transformation in
the calculator context. (*) This means it
has
the
following form:
$PATTERN
->
$REPLACEMENT
$GROUP
=> A group of transformations. Grouping is done in
[]-braces and the group elements are chained
with
one of &, |, or
","
. Form: [
$x
&
$x
& .... ]
(Same
for
| or , but not mixed!)
$x
is either another
$GROUP
, a
$TRANSFORMATION
or a
$SYMBOL
in case of the latter, the symbol
table of the calculator is accessed to
map
the
$SYMBOL
to a
$TRANSFORMATION
.
The ultimate result of parsing such a thing is a
Math::Symbolic::Custom::Transformation::Group
object (**).
(*) $PATTERN
s, $REPLACEMENT
s and $TRANSFORMATION
s may contain some special syntax. Instead of the TREE_foo
, VAR_foo
, and CONST_foo
special variables: You can write ?foo
, $foo
and !foo
respectively.
(**) Math::Symbolic::Custom::Transformation::Group objects are also Math::Symbolic::Custom::Transformations.
If errors occurr, these methods call the error()
method with a description and then return the empty list.
If these methods require access to certain attributes of the interface objects, this is mentioned in the docs.
_parse_assignment
Parses an expression of one of the forms
$SYMBOL
=
$FORMULA
$SYMBOL
=
$TRANSFORMATION
$SYMBOL
=
$GROUP
Returns an instance of Math::SymbolicX::Calculator::Command::Assignment which assigns either a formula or a transformation(-group) when executed.
Uses $self-
calc()> and expects it to return the Calculator object. Uses the _parse_trafo_group
method.
_parse_transformation
This method parses expressions of the form
$SYMBOL
=~
$SYMBOL2
$SYMBOL
=~
$TRANSFORMATION
$SYMBOL
=~
$GROUP
or
$SYMBOL
=~~
$SYMBOL2
(*)
... and so on ...
(*) The =~
operator stands for recursive application of the transformation whereas the =~~
operator stands for shallow application.
These expressions generally stand for the application of the transformation given on the right to the function $SYMBOL
stands for. This method returns a Math::SymbolicX::Calculator::Command::Transformation
object on success or calls the error()
method and returns an empty list on failure.
This methods expects $self-
calc()> to return the Calculator object. It also uses the _parse_trafo_group
method.
_parse_trafo_group
Parses a string of the form:
$SYMBOL
$GROUP
$TRANSFORMATION
In case of $SYMBOL
, it accesses the Calculator symbol table to fetch the referenced Transformation. (And throws an error if it's not one.)
Returns a Math::Symbolic::Custom::Transformation object or calls the error()
method and returns the empty list on failure.
This method uses Parse::RecDescent. Expects the calc()
method to return the Calculator object. Uses the method _parse_simple_transformation
.
_parse_simple_transformation
Parses a string of the form "pattern -> replacement", i.e. a simple $TRANSFORMATION
.
Returns a Math::Symbolic::Custom::Transformation
object or the empty list on failure.
SEE ALSO
Math::SymbolicX::Calculator, Math::SymbolicX::Calculator::Interface::Shell
AUTHOR
Steffen MĂĽller, <smueller@cpan.org>
COPYRIGHT AND LICENSE
Copyright (C) 2006, 2013 by Steffen Mueller
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.6 or, at your option, any later version of Perl 5 you may have available.