Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Fetching contributors…
Cannot retrieve contributors at this time
52 lines (39 sloc) 1.89 KB

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 also has a simple method to simplify it if possible. The AST is based on an array class, which makes it very easy to serialize.


@parser =

# simple maths
# The ast method results a two-tuple.
# The first value is the success or failure of the parse
# The second value is the AST, or failure message if it failed
@parser.ast('3 + 4')
#=> true, simple_ast

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

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

# evaluate the Ast
#=> 7

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


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


A number


A stat. This is looked up from the context.


A speciality. This is looked up from the context.


Has the value of the highest component.


Has the value of the highest n components.


Has the value of the lowest component.


Has the value of the lowest n components.

Jump to Line
Something went wrong with that request. Please try again.