PHPackages                             hyperf/rpn-incubator - 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. hyperf/rpn-incubator

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

hyperf/rpn-incubator
====================

v0.1.3(5y ago)3141MITPHPPHP &gt;=7.2

Since Jan 23Pushed 5y ago2 watchersCompare

[ Source](https://github.com/hyperf/rpn-incubator)[ Packagist](https://packagist.org/packages/hyperf/rpn-incubator)[ RSS](/packages/hyperf-rpn-incubator/feed)WikiDiscussions main Synced 4w ago

READMEChangelog (4)Dependencies (6)Versions (6)Used By (0)

RPN - 逆波兰表示法
============

[](#rpn---逆波兰表示法)

[![PHPUnit](https://github.com/hyperf/rpn-incubator/workflows/PHPUnit/badge.svg)](https://github.com/hyperf/rpn-incubator/workflows/PHPUnit/badge.svg)

`RPN` 是一种是由波兰数学家扬·武卡谢维奇1920年引入的数学表达式方式，在逆波兰记法中，所有操作符置于操作数的后面，因此也被称为后缀表示法。逆波兰记法不需要括号来标识操作符的优先级。

```
composer require hyperf/rpn-incubator

```

RPN 逻辑
------

[](#rpn-逻辑)

基本逻辑

- while 有输入
    - 读入下一个符号X
    - IF X是一个操作数
        - 入栈
    - ELSE IF X是一个操作符
        - 有一个先验的表格给出该操作符需要n个参数
        - IF堆栈中少于n个操作数
            - （错误）用户没有输入足够的操作数
    - Else，n个操作数出栈
    - 计算操作符。
    - 将计算所得的值入栈
- IF栈内只有一个值
    - 这个值就是整个计算式的结果
- ELSE多于一个值
    - （错误）用户输入了多余的操作数

实例

中缀表达式 `5 + ((1 + 2) * 4) - 3` 写作

`5 1 2 + 4 * + 3 -`

下表给出了该逆波兰表达式从左至右求值的过程，堆栈栏给出了中间值，用于跟踪算法。

输入操作堆栈注释5入栈51入栈5, 12入栈5, 1, 2+加法运算5, 31, 2出栈，将结果 3 入栈4入栈5, 3, 4\*乘法运算5, 123, 4 出栈，将结果 12 入栈+加法运算175, 12 出栈，将结果 17 入栈3入栈17, 3-减法运算1417, 3 出栈，将结果 14 入栈计算完成时，栈内只有一个操作数，这就是表达式的结果：14

使用
--

[](#使用)

直接计算 RPN 表达式

```
