eqn 1.0.7 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/eqn.treetop +16 -12
- data/lib/eqn/calculator.rb +1 -1
- data/lib/eqn/number.rb +1 -0
- data/lib/eqn/parse_error.rb +1 -0
- data/lib/eqn/parser.rb +5 -14
- data/lib/eqn/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66e4ae8e6dc085c3b899b571fce70d14c5cf7b75
|
4
|
+
data.tar.gz: c42d2d4fd3d8f705e8f22b25cee68cf8ef57f472
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94d074d217a93397af2d48c0beec74f4b24db070a730100e47fad5c3470449bd441a0294a51f4ee26d7766c4b991b37c95cd0fae6b01a56564729dd51f936c46
|
7
|
+
data.tar.gz: f70fc70d36c8dbf3706c664122d24483a21f8e3c04bd4be5ce1cca39740f359cf1c33c2a989df6e12cfc1a18cfd10d2d3bbcf81d829329c125af9b27a457156e
|
data/lib/eqn.treetop
CHANGED
@@ -8,7 +8,7 @@ grammar Eqn
|
|
8
8
|
end
|
9
9
|
|
10
10
|
rule expression
|
11
|
-
multitive addsub_group? <Eqn::Expression>
|
11
|
+
space? multitive space? addsub_group? space? <Eqn::Expression>
|
12
12
|
end
|
13
13
|
|
14
14
|
rule addsub_group
|
@@ -16,19 +16,19 @@ grammar Eqn
|
|
16
16
|
end
|
17
17
|
|
18
18
|
rule multitive
|
19
|
-
exponentiative muldiv_group? <Eqn::Expression>
|
19
|
+
exponentiative space? muldiv_group? <Eqn::Expression>
|
20
20
|
end
|
21
21
|
|
22
22
|
rule muldiv_group
|
23
|
-
muldiv_op multitive <Eqn::Expression::ExprGroup>
|
23
|
+
muldiv_op space? multitive <Eqn::Expression::ExprGroup>
|
24
24
|
end
|
25
25
|
|
26
26
|
rule exponentiative
|
27
|
-
operand pow_group? <Eqn::Expression>
|
27
|
+
operand space? pow_group? <Eqn::Expression>
|
28
28
|
end
|
29
29
|
|
30
30
|
rule pow_group
|
31
|
-
pow_op exponentiative <Eqn::Expression::ExprGroup>
|
31
|
+
pow_op space? exponentiative <Eqn::Expression::ExprGroup>
|
32
32
|
end
|
33
33
|
|
34
34
|
rule operand
|
@@ -40,19 +40,19 @@ grammar Eqn
|
|
40
40
|
end
|
41
41
|
|
42
42
|
rule if_func
|
43
|
-
'if' '(' comparation ',' expression ',' expression ')' <Eqn::Function::If>
|
43
|
+
'if' space? '(' comparation ',' expression ',' expression ')' <Eqn::Function::If>
|
44
44
|
end
|
45
45
|
|
46
46
|
rule round_func
|
47
|
-
'round' group <Eqn::Function::Round>
|
47
|
+
'round' space? group <Eqn::Function::Round>
|
48
48
|
end
|
49
49
|
|
50
50
|
rule roundup_func
|
51
|
-
'roundup' group <Eqn::Function::RoundUp>
|
51
|
+
'roundup' space? group <Eqn::Function::RoundUp>
|
52
52
|
end
|
53
53
|
|
54
54
|
rule rounddown_func
|
55
|
-
'rounddown' group <Eqn::Function::RoundDown>
|
55
|
+
'rounddown' space? group <Eqn::Function::RoundDown>
|
56
56
|
end
|
57
57
|
|
58
58
|
rule group
|
@@ -60,11 +60,11 @@ grammar Eqn
|
|
60
60
|
end
|
61
61
|
|
62
62
|
rule number
|
63
|
-
signed_float exponent? <Eqn::Number>
|
63
|
+
signed_float space? exponent? <Eqn::Number>
|
64
64
|
end
|
65
65
|
|
66
66
|
rule signed_float
|
67
|
-
sign? digits? decimal? <Eqn::Number::SignedNumber>
|
67
|
+
sign? space? digits? decimal? <Eqn::Number::SignedNumber>
|
68
68
|
end
|
69
69
|
|
70
70
|
rule decimal
|
@@ -72,7 +72,7 @@ grammar Eqn
|
|
72
72
|
end
|
73
73
|
|
74
74
|
rule exponent
|
75
|
-
exp signed_float <Eqn::Number::Exponent>
|
75
|
+
exp space? signed_float <Eqn::Number::Exponent>
|
76
76
|
end
|
77
77
|
|
78
78
|
rule pow_op
|
@@ -110,4 +110,8 @@ grammar Eqn
|
|
110
110
|
rule digits
|
111
111
|
[0-9]+ <Eqn::Terminal::Digits>
|
112
112
|
end
|
113
|
+
|
114
|
+
rule space
|
115
|
+
("\s" / "\t")*
|
116
|
+
end
|
113
117
|
end
|
data/lib/eqn/calculator.rb
CHANGED
data/lib/eqn/number.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
class ParseError < StandardError; end
|
data/lib/eqn/parser.rb
CHANGED
@@ -2,32 +2,23 @@ require 'eqn/function'
|
|
2
2
|
require 'eqn/comparation'
|
3
3
|
require 'eqn/expression'
|
4
4
|
require 'eqn/number'
|
5
|
+
require 'eqn/parse_error'
|
5
6
|
require 'eqn/terminal'
|
6
7
|
|
7
8
|
module Eqn
|
8
|
-
WHITESPACE_REGEX = /([^0-9]( )+[^0-9|.])|([^0-9]( )+[0-9|.])|([0-9]( )+[^0-9|.])/
|
9
|
-
|
10
9
|
class Parser
|
11
10
|
# Load the Treetop grammar from the grammar.
|
12
11
|
Treetop.load(File.join(File.dirname(__dir__), 'eqn.treetop'))
|
13
12
|
@@parser = EqnParser.new
|
14
13
|
|
15
14
|
def self.parse(data)
|
16
|
-
#
|
17
|
-
data.downcase
|
18
|
-
while data =~ Eqn::WHITESPACE_REGEX
|
19
|
-
data = data.downcase.gsub(Eqn::WHITESPACE_REGEX) do
|
20
|
-
Regexp.last_match.to_s.delete(' ')
|
21
|
-
end
|
22
|
-
end
|
23
|
-
tree = @@parser.parse(data)
|
15
|
+
# Pass the data over to the parser instance.
|
16
|
+
tree = @@parser.parse(data.downcase)
|
24
17
|
|
25
18
|
# Raise any errors.
|
26
|
-
if tree.nil?
|
27
|
-
fail Exception, "Parse error at offset: #{@@parser.index}" + @@parser.failure_reason
|
28
|
-
end
|
19
|
+
fail ParseError, "Parse error at offset: #{@@parser.index}" + @@parser.failure_reason if tree.nil?
|
29
20
|
|
30
|
-
# Remove extraneous nodes and return
|
21
|
+
# Remove extraneous nodes and return tree.
|
31
22
|
clean_tree(tree)
|
32
23
|
end
|
33
24
|
|
data/lib/eqn/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eqn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zach Schneider
|
@@ -106,6 +106,7 @@ files:
|
|
106
106
|
- lib/eqn/expression.rb
|
107
107
|
- lib/eqn/function.rb
|
108
108
|
- lib/eqn/number.rb
|
109
|
+
- lib/eqn/parse_error.rb
|
109
110
|
- lib/eqn/parser.rb
|
110
111
|
- lib/eqn/terminal.rb
|
111
112
|
- lib/eqn/version.rb
|