GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Language::Expr(3) User Contributed Perl Documentation Language::Expr(3)

Language::Expr - Simple minilanguage for use in expression

This document describes version 0.29 of Language::Expr (from Perl distribution Language-Expr), released on 2016-07-03.

 use Language::Expr;
 my $le = Language::Expr->new;
 # convert Expr to string Perl code
 say $le->get_compiler('perl')->compile('1 ^^ 2'); => # "(1 xor 2)"
 # convert Expr to JavaScript
 say $le->get_compiler('js')->compile('1 . 2'); # => "'' + 1 + 2"
 # evaluate Expr using the default interpreter
 say $le->get_interpreter('default')->eval('1 + 2'); # => 3
 # enumerate variables
 my $vars = $le->enum_vars('$a*$a + sqr($b)'); # => ['a', 'b']

Language::Expr defines a simple, Perl-like expression minilanguage. It supports mathematical and string operators, arrays, hashes, variables, and functions. See Language::Expr::Manual::Syntax for description of the language syntax.

This distribution consists of the language parser (Language::Expr::Parser), some interpreters (Language::Expr::Interpreter::*), and some compilers (Language::Expr::Compiler::*).

Due to possible bugs in Perl's RE engine or Regexp::Grammars or my grammar, some syntax errors will cause further parsing to fail.

new()

Get compiler named $name, e.g. "perl", "js".

Get compiler named $name, e.g. "default", "var_enumer", "dummy".

When first adding expression support to Data::Schema (now Data::Sah), I want a language that is simple enough so I can easily convert it to Perl, PHP, JavaScript, and others. I do not need a fully-fledged programming language. In fact, Expr is not even Turing-complete, it does not support assignment or loops. Nor does it allow function definition (though it allows anonymous function in grep/map/usort). Instead, I just need some basic stuffs like mathematical/string/logical operators, arrays, hashes, functions, map/grep/usort. This language will mostly be used inside templates and schemas.

I need several compilers and interpreters (some even with different semantics), so it's easier to start with a simple parser of my own. And of course there is personal preference of language syntax.

An interpreter evaluates expression as it is being parsed, while a compiler generates a complete Perl (or whatever) code first. Thus, if you $le->eval() repeatedly using the interpreter mode (setting $le->interpreted(1)), you will repeatedly parse the expression each time. This can be one or more orders of magnitude slower compared to compiling into Perl once and then directly executing the Perl code repeatedly.

Note that if you use $le->eval() using the default compiler mode, you do not reap the benefits of compilation because the expression will be compiled each time you call $le->eval(). To save the compilation result, use $le->compile() or $le->perl() and compile the Perl code yourself using Perl's eval().

Create your own language :-) Fork this distribution and start modifying the Language::Expr::Parser module.

This is a TODO item.

Please visit the project's homepage at <https://metacpan.org/release/Language-Expr>.

Source repository is at <https://github.com/sharyanto/perl-Language-Expr>.

Please report any bugs or feature requests on the bugtracker website <https://rt.cpan.org/Public/Dist/Display.html?Name=Language-Expr>

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.

Syntax reference: Language::Expr::Manual::Syntax

Modules that are using Language::Expr: Data::Sah, Data::Template::Expr (not yet released).

Other related modules: Math::Expression, Math::Expression::Evaluator, Language::Farnsworth

perlancar <perlancar@cpan.org>

This software is copyright (c) 2016 by perlancar@cpan.org.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

2016-07-03 perl v5.40.2

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.