eqn 1.0.7 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|