serafim/calc

3.2.0 2024-04-08 10:05 UTC

This package is auto-updated.

Last update: 2024-09-08 11:03:09 UTC


README

为什么?

此存储库旨在作为一个示例,展示如何基于由LL(k)递归下降解析器生成的抽象语法树实现计算器。

作为语法使用的是具有操作符结合性的基本实现,且不受左递归的影响

{
  tokens = [
    T_FLOAT = "regexp:\d+\.\d+"
    T_INT   = "regexp:\d+"
  ]
}

<expr>           ::= <addition> | <subtraction> | <term>

<term>           ::= <multiplication> | <division> | <factor>
<factor>         ::= "(" <expr> ")" | <value>

<subtraction>    ::= <term> "-" <expr>
<addition>       ::= <term> "+" <expr>
<multiplication> ::= <factor> "*" <term>
<division>       ::= <factor> ("/" | "÷") <term>

<value>          ::= T_FLOAT | T_INT

示例

命令行界面

$ php ./bin/cc run

image

image

用法

全局

$ composer global require serafim/calc
$ cc run

本地

$ composer require serafim/calc
$ ./vendor/bin/cc run