yaparc 0.0.7 → 0.0.8

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.
Files changed (5) hide show
  1. data/README +172 -8
  2. data/lib/yaparc.rb +402 -69
  3. data/tests/test_calc.rb +42 -105
  4. data/tests/test_parser.rb +304 -67
  5. metadata +2 -2
data/tests/test_calc.rb CHANGED
@@ -4,18 +4,6 @@ require 'pp'
4
4
 
5
5
 
6
6
  class Expr < Yaparc::AbstractParser
7
- # include Yaparc::Parsable
8
-
9
- # define_parser do
10
- # Yaparc::AltParser.new(
11
- # Yaparc::SeqParser.new(Term.new,
12
- # Yaparc::Symbol.new('+'),
13
- # Expr.new) do |term, _, expr|
14
- # ['+', term,expr]
15
- # end,
16
- # Term.new
17
- # )
18
- # end
19
7
 
20
8
  def initialize
21
9
  @parser = lambda do
@@ -27,34 +15,27 @@ class Expr < Yaparc::AbstractParser
27
15
  end,
28
16
  Term.new
29
17
  )
30
- # SeqParser.new(Term.new,
31
- # AltParser.new(
32
- # SeqParser.new(
33
- # Symbol.new('+'),
34
- # Expr.new) do |_, expr|
35
- # expr
36
- # end,
37
- # SucceedParser.new([]))
38
- # ) do |term, expr|
39
- # if expr == []
40
- # term
41
- # else
42
- # ['+', term,expr]
43
- # end
44
- # end
45
18
  end
46
19
  end
47
20
 
48
- # def parse(input)
49
- # @parser.call.parse(input)
21
+ # define_parser do
22
+ # Yaparc::AltParser.new(
23
+ # Yaparc::SeqParser.new(Term.new,
24
+ # Yaparc::Symbol.new('+'),
25
+ # Expr.new) do |term, _, expr|
26
+ # ['+', term,expr]
27
+ # end,
28
+ # Term.new
29
+ # )
50
30
  # end
51
31
 
32
+
52
33
  def evaluate(input)
53
34
  result = parse(input)
54
- tree = result[0][0]
35
+ tree = result.value
55
36
  eval_tree(tree)
56
37
  end
57
-
38
+
58
39
  def eval_tree(tree)
59
40
  case tree
60
41
  when Array
@@ -75,18 +56,6 @@ class Expr < Yaparc::AbstractParser
75
56
  end
76
57
 
77
58
  class Term < Yaparc::AbstractParser
78
- # include Yaparc::Parsable
79
-
80
- # define_parser do
81
- # Yaparc::AltParser.new(
82
- # Yaparc::SeqParser.new(Factor.new,
83
- # Yaparc::Symbol.new('*'),
84
- # Term.new) do |factor, _, term|
85
- # ['*', factor,term]
86
- # end,
87
- # Factor.new
88
- # )
89
- # end
90
59
 
91
60
  def initialize
92
61
  @parser = lambda do
@@ -98,43 +67,23 @@ class Term < Yaparc::AbstractParser
98
67
  end,
99
68
  Factor.new
100
69
  )
101
- # SeqParser.new(Factor.new,
102
- # AltParser.new(
103
- # SeqParser.new(Symbol.new('*'),
104
- # Term.new) do |_, term|
105
- # term
106
- # end,
107
- # SucceedParser.new([]))
108
- # ) do |factor, term|
109
- # if term == []
110
- # factor
111
- # else
112
- # ['*', factor,term]
113
- # end
114
- # end
115
70
  end
116
71
  end
117
72
 
118
- # def parse(input)
119
- # @parser.call.parse(input)
73
+ # define_parser do
74
+ # Yaparc::AltParser.new(
75
+ # Yaparc::SeqParser.new(Factor.new,
76
+ # Yaparc::Symbol.new('*'),
77
+ # Term.new) do |factor, _, term|
78
+ # ['*', factor,term]
79
+ # end,
80
+ # Factor.new
81
+ # )
120
82
  # end
121
83
  end
122
84
 
123
85
  class Factor < Yaparc::AbstractParser
124
- # include Yaparc::Parsable
125
-
126
- define_parser do
127
- AltParser.new(
128
- Yaparc::SeqParser.new(
129
- Yaparc::Symbol.new('('),
130
- Expr.new,
131
- Yaparc::Symbol.new(')')
132
- ) do |_,expr, _|
133
- expr
134
- end,
135
- Natural.new
136
- )
137
- end
86
+
138
87
 
139
88
  def initialize
140
89
  @parser = lambda do
@@ -151,30 +100,20 @@ class Factor < Yaparc::AbstractParser
151
100
  end
152
101
  end
153
102
 
154
- # def parse(input)
155
- # @parser.call.parse(input)
103
+ # define_parser do
104
+ # AltParser.new(
105
+ # Yaparc::SeqParser.new(
106
+ # Yaparc::Symbol.new('('),
107
+ # Expr.new,
108
+ # Yaparc::Symbol.new(')')
109
+ # ) do |_,expr, _|
110
+ # expr
111
+ # end,
112
+ # Natural.new
113
+ # )
156
114
  # end
157
115
  end
158
116
 
159
- # class Comb < Yaparc::ParserBase
160
- # include Yaparc::Parsable
161
-
162
- # def initialize
163
- # @parser = lambda do
164
- # AltParser.new(
165
- # SeqParser.new(Symbol.new('+'),
166
- # Nat.new) do | _, nat|
167
- # nat
168
- # end,
169
- # Nat.new
170
- # )
171
- # end
172
- # end
173
-
174
- # def parse(input)
175
- # @parser.call.parse(input)
176
- # end
177
- # end
178
117
 
179
118
  class YaparcCalcTest < Test::Unit::TestCase
180
119
  include ::Yaparc
@@ -186,20 +125,25 @@ class YaparcCalcTest < Test::Unit::TestCase
186
125
 
187
126
  def test_expr
188
127
  result = @expr.parse("1 + 2 ")
189
- assert_equal [[["+", 1, 2], ""]], result
128
+ assert_instance_of OK, result
129
+ assert_equal ["+", 1, 2], result.value
130
+ assert_equal "", result.input
190
131
  assert_equal 3, @expr.evaluate("1 + 2 ")
191
132
  assert_equal 9, @expr.evaluate("(1 + 2) * 3 ")
192
133
  end
193
134
 
194
135
  def test_factor
195
136
  result = @factor.parse("1")
196
- assert_equal [[1, ""]], result
137
+ assert_equal 1, result.value
138
+ assert_equal "", result.input
197
139
 
198
140
  result = @factor.parse("( 1 )")
199
- assert_equal [[1, ""]], result
141
+ assert_equal 1, result.value
142
+ assert_equal "", result.input
200
143
 
201
144
  result = @factor.parse("( 312 )")
202
- assert_equal [[312, ""]], result
145
+ assert_equal 312, result.value
146
+ assert_equal "", result.input
203
147
  end
204
148
 
205
149
  # def test_cexpr
@@ -207,13 +151,6 @@ class YaparcCalcTest < Test::Unit::TestCase
207
151
  # assert_equal [[["+", 1, 2], ""]], result
208
152
  # end
209
153
 
210
- # def test_comb
211
- # comb = Comb.new
212
- # result = comb.parse("+123")
213
- # assert_equal [[123, ""]], result
214
- # end
215
-
216
-
217
154
  # def test_expr_define_parser
218
155
  # parser = Expr.new
219
156
  # result = Expr.parse("1 + 2 ")