42 lines
731 B
Plaintext
42 lines
731 B
Plaintext
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
|