Skip to content

namelessjon/exalted_math

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Parsing and evaluation of simple maths expressions for Exalted

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages