Soroban - Java MixFix Calculator

programming language java

A java calculator named Soroban (Japanese for Abacus).

The GitHub repository is maintained here. Command Line Calculator Tool in Java.

Contents

  • Lexer implementation. Character/Token stream generators.
  • The Parser, single pass via Pratt Parser. Can parse prefix/postfix/infix/mixfix mathematical grammars. Produces Expression trees.
  • Expression Evaluator, consumes an expression and attempts to evaluate it recursively. Supports partially solving functions, and variables.
  • Custom function support via the FunctionDictionary class. Unary, Binary, Poly parameter function support.
  • BigRational class which supports fraction/decimal math in attempt to delay loss of precision until as late in the calculation as possible.
  • Variable support.
  • Variable assignment of numbers and expressions
  • Constant support.
  • Interactive Cli.
  • Lots of tests.

Todo

  • Simplify fractions.
  • Some cases auto convert from integer to decimal in strange ways, investigate.
  • Variable assignment of expressions.

Example Expressions

  • (x + y) * x
  • log10(10)
  • ln(2.718)
  • 10!
  • -n
  • a + b
  • 0b101
  • 0xFF + 0x01
  • -((10 ^ 2) / 4 + 25) * (1 + 1)
  • sin(rad(45 + 45))
  • sin(45) + cos(45)
  • add(a, b, c)
  • add((a + a), (b + b))
  • a = 10
  • x = a ^ 3
  • reduce(10/30)
  • 0b101 & 0b100
  • gcd(50,10)
  • lcm(3,9)

Usage

Execute a single expression

soroban ln(E) * PI / 2

Enter Interactive mode

soroban -i

Load commands from file

Load a file of commands, one command per line, and execute them sequentially.

soroban programs/test.soro
soroban /full/path/to/file.soro

Print Help

soroban -h

Print version

soroban -v

Install

Brew Install

brew install https://raw.githubusercontent.com/kennycason/soroban/master/script/brew/soroban.rb

Install (via Bash Script)

A helper script has been added to install Run. Java is required to run. The install is a single a jar from Maven Central.

bash <(curl -s https://raw.githubusercontent.com/kennycason/soroban/master/script/install.sh)

Maven Install (To include in other code)

<dependency>
    <groupId>com.kennycason</groupId>
    <artifactId>soroban</artifactId>
    <version>1.5</version>
</dependency>

Interactive CLI Demo:

> 10
10
> x = 10
10
> x + 20
30
> x * 2
20
> x ^ 10
1.0E+10
> x ^ 3
1000.0
> x / 10
10/10
> x / 10.0
1
> 3/5 + 1/5
4/5
> 3/5 + 1
8/5
> sin(rad(90))
1.0
> x = y ^ 2
y ^ 2
> x
y ^ 2
> y = 3
3
> x
9.0
> memory
x = 3 ^ 2
y = 3
> PI
3.141592653589793
> E
2.718281828459045
> ln(E)
1.0
> x = y = 10
10