PHPackages                             protonlabs/php-shunting-yard - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. protonlabs/php-shunting-yard

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

protonlabs/php-shunting-yard
============================

Refactored repack of https://github.com/droptable/php-shunting-yard

v1.0.3(12mo ago)15.3k—5.6%1MITPHPPHP &gt;=7.1

Since May 22Pushed 12mo agoCompare

[ Source](https://github.com/ProtonMail/php-shunting-yard)[ Packagist](https://packagist.org/packages/protonlabs/php-shunting-yard)[ Docs](https://github.com/andig/php-shunting-yard)[ RSS](/packages/protonlabs-php-shunting-yard/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (1)Versions (3)Used By (0)

PHP Shunting Yard Implementation
--------------------------------

[](#php-shunting-yard-implementation)

### Example

[](#example)

Simple equation parsing

```
use RR\Shunt\Parser;

$equation = '3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3';
$result = Parser::parse($equation);
echo $result; //3.0001220703125
```

Equation with constants and functions

```
use RR\Shunt\Parser;
use RR\Shunt\Context;

$ctx = new Context();
$ctx->def('abs'); // wrapper for PHP "abs" function
$ctx->def('foo', 5); // constant "foo" with value "5"
$ctx->def('bar', function($a, $b) { return $a * $b; }); // define function

$equation = '3 + bar(4, 2) / (abs(-1) - foo) ^ 2 ^ 3';
$result = Parser::parse($equation, $ctx);
echo $result; //3.0001220703125
```

Test a condition

```
use RR\Shunt\Parser;
use RR\Shunt\Context;

$ctx = new Context();
$ctx->def('foo', 5); // constant "foo" with value "5"

$equation = '(foo > 3) & (foo < 6)';
$result = Parser::parse($equation, $ctx);
echo $result; //true
```

Re-run parsed expression on multiple inputs

```
use RR\Shunt\Parser;
use RR\Shunt\Context;

$counter = 1;
$ctx = new Context();
$ctx->def('data', function() { global $counter; return $counter++; }); // define function
$ctx->def('bar', function($a) { return 2*$a; }); // define function

$equation = 'bar(data())';
$parser = new Parser(new Scanner($equation));

$result = $parser->reduce($this->ctx); // first result
echo $result; // 2
$result = $parser->reduce($this->ctx); // second result
echo $result; // 4
```

### Installation

[](#installation)

Define the following requirement in your composer.json file:

```
{
    "require": {
        "andig/php-shunting-yard": "dev-master"
    }
}
```

### Authors

[](#authors)

Originally source code taken from , some changes from:

-
-
-

Test cases and refactoring for composer/packagist by .

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance50

Moderate activity, may be stable

Popularity26

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity33

Early-stage or recently created project

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

361d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/837170204c2dc6beffb28cfca8ff9036709ac38d5f5f16ab2b8b8a7cb025c089?d=identicon)[BafS](/maintainers/BafS)

---

Top Contributors

[![andig](https://avatars.githubusercontent.com/u/184815?v=4)](https://github.com/andig "andig (25 commits)")[![sergej-kurakin](https://avatars.githubusercontent.com/u/196096?v=4)](https://github.com/sergej-kurakin "sergej-kurakin (15 commits)")[![pmishev](https://avatars.githubusercontent.com/u/5188763?v=4)](https://github.com/pmishev "pmishev (14 commits)")[![falahati](https://avatars.githubusercontent.com/u/2479372?v=4)](https://github.com/falahati "falahati (10 commits)")[![BafS](https://avatars.githubusercontent.com/u/588205?v=4)](https://github.com/BafS "BafS (3 commits)")[![dmromanov](https://avatars.githubusercontent.com/u/299059?v=4)](https://github.com/dmromanov "dmromanov (1 commits)")

---

Tags

mathshunting yardequation

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/protonlabs-php-shunting-yard/health.svg)

```
[![Health](https://phpackages.com/badges/protonlabs-php-shunting-yard/health.svg)](https://phpackages.com/packages/protonlabs-php-shunting-yard)
```

###  Alternatives

[brick/math

Arbitrary-precision arithmetic library

2.1k504.0M277](/packages/brick-math)[markrogoyski/math-php

Math Library for PHP. Features descriptive statistics and regressions; Continuous and discrete probability distributions; Linear algebra with matrices and vectors, Numerical analysis; special mathematical functions; Algebra

2.4k7.1M40](/packages/markrogoyski-math-php)[phpseclib/bcmath_compat

PHP 5.x-8.x polyfill for bcmath extension

16720.7M17](/packages/phpseclib-bcmath-compat)[andig/php-shunting-yard

Refactored repack of https://github.com/droptable/php-shunting-yard

26219.4k](/packages/andig-php-shunting-yard)[rubix/tensor

A library and extension that provides objects for scientific computing in PHP.

2751.4M5](/packages/rubix-tensor)[jlawrence/eos

Parse and solve math equations without using 'eval()'.

1071.1M11](/packages/jlawrence-eos)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
