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.