0.0
No commit activity in last 3 years
No release in over 3 years
Parsing and evaluation of simple maths expressions for Exalted This intended to aid in evaluating simple calculations which appear on character sheets, especially for Exalted.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0

Runtime

~> 1.4
 Project Readme

Exalted Math Parser¶ ↑

This is a very simple project both to teach myself to use Treetop, and to implement simple (or not so simple) parsing of mathematics for Exalted character sheets. Although I’m sure it could be used for other simple math situations. It consists of two parts; parser and abstract syntax tree. The parser constructs the abstract syntax tree as it parses the input string. The AST can then be used to compute the value of the expression with a given context. The AST can also simply itself, factoring out constant operations in some cases.

Examples¶ ↑

@parser = ExaltedMath::MathsParser.new

# simple maths
# The parser returns the AST
# it raises a ParseFailedError in the case of error
@parser.ast('3 + 4')
#=> simple_ast

# symbolic values
@parser.ast('Essence * 4')
#=> symbolic_ast

# complex maths
@parser.ast('(Essence * 4) + Willpower + highest[2](Compassion,Conviction,Temperance,Valor)')
#=> complex_ast

# evaluate the Ast
simple_ast.value
#=> 7

# evaluate a more complex Ast
symbolic_ast.value({'essence' => 4})
#=> 16

Syntax¶ ↑

The syntax supported by the parser is pretty simple. In the examples above, almost all of it has been demonstrated.

[0-9]+

A number

[A-Za-z]+

A stat. This is looked up from the context.

spec:"..."

A speciality. This is looked up from the context.

highest(stat|number,...)

Has the value of the highest component.

highest[n](stat|number,...)

Has the value of the highest n components.

lowest(stat|number,...)

Has the value of the lowest component.

lowest[n](stat|number,...)

Has the value of the lowest n components.