kalc 0.5.3 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/kalc/ast.rb +12 -0
- data/lib/kalc/grammar.rb +1 -1
- data/lib/kalc/transform.rb +4 -0
- data/lib/kalc/version.rb +1 -1
- metadata +1 -1
data/lib/kalc/ast.rb
CHANGED
@@ -73,6 +73,18 @@ module Kalc
|
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
|
+
class ParenExpression
|
77
|
+
attr_reader :value
|
78
|
+
|
79
|
+
def initialize(value)
|
80
|
+
@value = value
|
81
|
+
end
|
82
|
+
|
83
|
+
def eval(context)
|
84
|
+
@value.eval(context)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
76
88
|
class Ops
|
77
89
|
attr_reader :left
|
78
90
|
attr_reader :ops
|
data/lib/kalc/grammar.rb
CHANGED
@@ -148,7 +148,7 @@ class Kalc::Grammar < Parslet::Parser
|
|
148
148
|
# Atoms can self-evaluate
|
149
149
|
# This where the grammar starts
|
150
150
|
rule(:atom) {
|
151
|
-
boolean | variable.as(:variable) | number | string
|
151
|
+
paren_expression.as(:paren_expression) | boolean | variable.as(:variable) | number | string
|
152
152
|
}
|
153
153
|
|
154
154
|
# (1 + 2)
|
data/lib/kalc/transform.rb
CHANGED
@@ -77,6 +77,10 @@ module Kalc
|
|
77
77
|
[]
|
78
78
|
}
|
79
79
|
|
80
|
+
rule(:paren_expression => simple(:paren_expression)) {
|
81
|
+
Ast::ParenExpression.new(paren_expression)
|
82
|
+
}
|
83
|
+
|
80
84
|
rule(:function_call => {:name => simple(:name),
|
81
85
|
:variable_list => sequence(:variable_list)}) {
|
82
86
|
Ast::FunctionCall.new(name, variable_list)
|
data/lib/kalc/version.rb
CHANGED