RosettaCodeData/Task/Arithmetic-evaluation/Julia/arithmetic-evaluation.jl

42 lines
731 B
Julia

julia> expr="2 * (3 -1) + 2 * 5"
"2 * (3 -1) + 2 * 5"
julia> parsed = parse(expr) #Julia provides low-level access to language parser for AST/Expr creation
:(+(*(2,-(3,1)),*(2,5)))
julia> t = typeof(parsed)
Expr
julia> names(t) #shows type fields
(:head,:args,:typ)
julia> parsed.args #Inspect our 'Expr' type innards
3-element Any Array:
:+
:(*(2,-(3,1)))
:(*(2,5))
julia> typeof(parsed.args[2]) #'Expr' types can nest
Expr
julia> parsed.args[2].args
3-element Any Array:
:*
2
:(-(3,1))
julia> parsed.args[2].args[3].args #Will nest until lowest level of AST
3-element Any Array:
:-
3
1
julia> eval(parsed)
14
julia> eval(parse("1 - 5 * 2 / 20 + 1"))
1.5
julia> eval(parse("2 * (3 + ((5) / (7 - 11)))"))
3.5