Expressionparser
Simple configurable Java parser for mathematical expressions
Install / Use
/learn @stefanhaustein/ExpressionparserREADME
ExpressionParser
A simple configurable Java parser for mathematical expressions.
For a kotlin version, please refer to https://github.com/kobjects/parsek
Examples and Demos
Immediate evaluation
Calculator.java in the demo package contains a simple self-contained use case directly interpreting the input.
The parser configuration supports simple mathematical expressions, and the processor just evaluates them immediately, without constructing an intermediate tree representation.
Expression? 5+2*-2^3^2
Result: -1019.0
SetDemo.java is similar to the calculator demo, but illustrates the flexibility of the expression parser with a slightly more "atypical" expression language.
Example output from [SetDemo.java]:
Operators: ∩ ∪ ∖
Expression? | {A, B, B, C}|
Result: 3
Expression? {1, 2, 3} ∪ {3, 4, 5}
Result: {1.0, 2.0, 3.0, 4.0, 5.0}
Expression? {1, 2} ∩ {2, 3}
Result: {2.0}
Expression? | {A, B, C} \ {A, X, Y} |
Result: 2
Try it:
git clone https://github.com/stefanhaustein/expressionparser.git
cd expressionparser
gradle :demo:set:run
Tree building
TreeBuilder.java shows how to builds a tree from the input (using a node factory. The corresponding demo app is able to do simplifications and to compute the symbolic derivative. An extended tokenizer translates superscript digits.
Input? derive(1/x, x)
Parsed: derive(1/x, x)
⎛1 ⎞
⎝x ⎠
(-derive(x, x)) ⎪
Equals: ─────────────── ⎪ Reciprocal rule
x² ⎪
(-1)
Equals: ────
x²
-1
Equals: ──
x²
Flat: -1/x²
Try it:
git clone https://github.com/stefanhaustein/expressionparser.git
cd expressionparser
gradle :demo:cas:run
Integration with a "main" parser
The BASIC demo parser is able to parse 70's BASIC programs. The rest of the BASIC demo directory contains some code to run them.
**** EXPRESSION PARSER BASIC DEMO V1 ****
251392K SYSTEM 252056464 BASIC BYTES FREE
READY.
print "Hello World"
Hello World
READY.
10 print "Hello World"
list
10 PRINT "Hello World"
READY.
run
Hello World
load "http://www.vintage-basic.net/bcg/superstartrek.bas"
run
,------*------,
,------------- '--- ------'
'-------- --' / /
,---' '-------/ /--,
'----------------'
THE USS ENTERPRISE --- NCC-1701
YOUR ORDERS ARE AS FOLLOWS:
DESTROY THE 14 KLINGON WARSHIPS WHICH HAVE INVADED
THE GALAXY BEFORE THEY CAN ATTACK FEDERATION HEADQUARTERS
ON STARDATE 2328 THIS GIVES YOU 28 DAYS. THERE ARE
4 STARBASES IN THE GALAXY FOR RESUPPLYING YOUR SHIP
YOUR MISSION BEGINS WITH YOUR STARSHIP LOCATED
IN THE GALACTIC QUADRANT, 'ALTAIR I'.
COMBAT AREA CONDITION RED
SHIELDS DANGEROUSLY LOW
---------------------------------
STARDATE 2300
* CONDITION *RED*
+K+ QUADRANT 6,1
SECTOR 8,2
PHOTON TORPEDOES 10
* TOTAL ENERGY 3000
SHIELDS 0
<*> KLINGONS REMAINING14
---------------------------------
COMMAND?
Try it:
git clone https://github.com/stefanhaustein/expressionparser.git
cd expressionparser
gradle :demo:basic:run
Gradle Build Integration
Jitpack for the win!
Step 1: Add jitpack to your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2: Add the expressionparser dependency
dependencies {
compile 'com.github.stefanhaustein.expressionparser:core:v1.0.0'
}
Related Skills
node-connect
346.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
107.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
346.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
346.8kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
