yaparc 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
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 ")