koi-reference-parser 0.0.1 → 0.0.2
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.
- data/.gitignore +3 -3
- data/MIT-LICENSE +19 -19
- data/README.rdoc +43 -43
- data/Rakefile +42 -42
- data/VERSION +1 -0
- data/lib/koi-reference-parser.rb +8 -8
- data/lib/parser/exceptions.rb +1 -1
- data/lib/parser/koi-reference-parser.treetop +197 -197
- data/lib/parser/parser.rb +42 -42
- data/lib/parser/syntax_node_extensions.rb +20 -0
- data/lib/parser/syntax_nodes.rb +113 -113
- data/test/parser/functional/function_call_as_argument.rb +16 -16
- data/test/parser/functional/simple_program_test.rb +34 -34
- data/test/parser/unit/assignment_test.rb +114 -114
- data/test/parser/unit/compound_expression_test.rb +34 -34
- data/test/parser/unit/function_call_test.rb +51 -51
- data/test/parser/unit/function_definition_test.rb +18 -18
- data/test/parser/unit/hash_accessor_test.rb +40 -40
- data/test/parser/unit/identifier_test.rb +54 -54
- data/test/parser/unit/if_test.rb +24 -24
- data/test/parser/unit/simple_expression_test.rb +211 -211
- data/test/parser/unit/statement_test.rb +21 -21
- data/test/parser/unit/syntax_node_to_hash_test.rb +43 -0
- data/test/parser/unit/unless_test.rb +24 -24
- data/test/setup/test_unit_extensions.rb +20 -20
- data/test/test_helper.rb +9 -9
- metadata +11 -4
@@ -1,212 +1,212 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'test_helper.rb'))
|
2
|
-
|
3
|
-
class SimpleExpressionTest < Test::Unit::TestCase
|
4
|
-
|
5
|
-
include KoiReferenceParser
|
6
|
-
|
7
|
-
###############
|
8
|
-
# ADDITION
|
9
|
-
|
10
|
-
test "should parse simple addition expression with integers" do
|
11
|
-
tree = Parser.parse('test = 1 + 1')
|
12
|
-
assert_expression(tree, AdditionOperator)
|
13
|
-
end
|
14
|
-
|
15
|
-
test "should parse simple addition expression with floats" do
|
16
|
-
tree = Parser.parse('test = 1.0 + 1.0')
|
17
|
-
assert_expression(tree, AdditionOperator)
|
18
|
-
end
|
19
|
-
|
20
|
-
test "should parse simple addition expression with strings" do
|
21
|
-
tree = Parser.parse('test = "1" + "1"')
|
22
|
-
assert_expression(tree, AdditionOperator)
|
23
|
-
end
|
24
|
-
|
25
|
-
test "should parse simple addition expression with identifiers" do
|
26
|
-
tree = Parser.parse('test = test1 + test2')
|
27
|
-
assert_expression(tree, AdditionOperator)
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
###############
|
32
|
-
# SUBTRACTION
|
33
|
-
|
34
|
-
test "should parse simple subtraction expression with integers" do
|
35
|
-
tree = Parser.parse('test = 1 - 1')
|
36
|
-
assert_expression(tree, SubtractionOperator)
|
37
|
-
end
|
38
|
-
|
39
|
-
test "should parse simple subtraction expression with floats" do
|
40
|
-
tree = Parser.parse('test = 1.0 - 1.0')
|
41
|
-
assert_expression(tree, SubtractionOperator)
|
42
|
-
end
|
43
|
-
|
44
|
-
test "should parse simple subtraction expression with strings" do
|
45
|
-
tree = Parser.parse('test = "1" - "1"')
|
46
|
-
assert_expression(tree, SubtractionOperator)
|
47
|
-
end
|
48
|
-
|
49
|
-
test "should parse simple subtraction expression with identifiers" do
|
50
|
-
tree = Parser.parse('test = test1 - test2')
|
51
|
-
assert_expression(tree, SubtractionOperator)
|
52
|
-
end
|
53
|
-
|
54
|
-
|
55
|
-
###############
|
56
|
-
# MULTIPLICATION
|
57
|
-
|
58
|
-
test "should parse simple multiplication expression with integers" do
|
59
|
-
tree = Parser.parse('test = 1 * 1')
|
60
|
-
assert_expression(tree, MultiplicationOperator)
|
61
|
-
end
|
62
|
-
|
63
|
-
test "should parse simple multiplication expression with floats" do
|
64
|
-
tree = Parser.parse('test = 1.0 * 1.0')
|
65
|
-
assert_expression(tree, MultiplicationOperator)
|
66
|
-
end
|
67
|
-
|
68
|
-
test "should parse simple multiplication expression with strings" do
|
69
|
-
tree = Parser.parse('test = "1" * "1"')
|
70
|
-
assert_expression(tree, MultiplicationOperator)
|
71
|
-
end
|
72
|
-
|
73
|
-
test "should parse simple multiplication expression with identifiers" do
|
74
|
-
tree = Parser.parse('test = test1 * test2')
|
75
|
-
assert_expression(tree, MultiplicationOperator)
|
76
|
-
end
|
77
|
-
|
78
|
-
|
79
|
-
###############
|
80
|
-
# DIVISION
|
81
|
-
|
82
|
-
test "should parse simple division expression with integers" do
|
83
|
-
tree = Parser.parse('test = 1 / 1')
|
84
|
-
assert_expression(tree, DivisionOperator)
|
85
|
-
end
|
86
|
-
|
87
|
-
test "should parse simple division expression with floats" do
|
88
|
-
tree = Parser.parse('test = 1.0 / 1.0')
|
89
|
-
assert_expression(tree, DivisionOperator)
|
90
|
-
end
|
91
|
-
|
92
|
-
test "should parse simple division expression with strings" do
|
93
|
-
tree = Parser.parse('test = "1" / "1"')
|
94
|
-
assert_expression(tree, DivisionOperator)
|
95
|
-
end
|
96
|
-
|
97
|
-
test "should parse simple division expression with identifiers" do
|
98
|
-
tree = Parser.parse('test = test1 / test2')
|
99
|
-
assert_expression(tree, DivisionOperator)
|
100
|
-
end
|
101
|
-
|
102
|
-
|
103
|
-
###############
|
104
|
-
# EQUALITY
|
105
|
-
|
106
|
-
test "should parse simple equality expression with integers" do
|
107
|
-
tree = Parser.parse('test = 1 == 1')
|
108
|
-
assert_expression(tree, EqualityOperator)
|
109
|
-
end
|
110
|
-
|
111
|
-
test "should parse simple equality expression with floats" do
|
112
|
-
tree = Parser.parse('test = 1.0 == 1.0')
|
113
|
-
assert_expression(tree, EqualityOperator)
|
114
|
-
end
|
115
|
-
|
116
|
-
test "should parse simple equality expression with strings" do
|
117
|
-
tree = Parser.parse('test = "1" == "1"')
|
118
|
-
assert_expression(tree, EqualityOperator)
|
119
|
-
end
|
120
|
-
|
121
|
-
test "should parse simple equality expression with identifiers" do
|
122
|
-
tree = Parser.parse('test = test1 == test2')
|
123
|
-
assert_expression(tree, EqualityOperator)
|
124
|
-
end
|
125
|
-
|
126
|
-
|
127
|
-
###############
|
128
|
-
# INEQUALITY
|
129
|
-
|
130
|
-
test "should parse simple inequality expression with integers" do
|
131
|
-
tree = Parser.parse('test = 1 != 1')
|
132
|
-
assert_expression(tree, InequalityOperator)
|
133
|
-
end
|
134
|
-
|
135
|
-
test "should parse simple inequality expression with floats" do
|
136
|
-
tree = Parser.parse('test = 1.0 != 1.0')
|
137
|
-
assert_expression(tree, InequalityOperator)
|
138
|
-
end
|
139
|
-
|
140
|
-
test "should parse simple inequality expression with strings" do
|
141
|
-
tree = Parser.parse('test = "1" != "1"')
|
142
|
-
assert_expression(tree, InequalityOperator)
|
143
|
-
end
|
144
|
-
|
145
|
-
test "should parse simple inequality expression with identifiers" do
|
146
|
-
tree = Parser.parse('test = test1 != test2')
|
147
|
-
assert_expression(tree, InequalityOperator)
|
148
|
-
end
|
149
|
-
|
150
|
-
|
151
|
-
###############
|
152
|
-
# GREATER THAN
|
153
|
-
|
154
|
-
test "should parse simple 'greater than' expression with integers" do
|
155
|
-
tree = Parser.parse('test = 1 > 1')
|
156
|
-
assert_expression(tree, GreaterThanOperator)
|
157
|
-
end
|
158
|
-
|
159
|
-
test "should parse simple 'greater than' expression with floats" do
|
160
|
-
tree = Parser.parse('test = 1.0 > 1.0')
|
161
|
-
assert_expression(tree, GreaterThanOperator)
|
162
|
-
end
|
163
|
-
|
164
|
-
test "should parse simple 'greater than' expression with strings" do
|
165
|
-
tree = Parser.parse('test = "1" > "1"')
|
166
|
-
assert_expression(tree, GreaterThanOperator)
|
167
|
-
end
|
168
|
-
|
169
|
-
test "should parse simple 'greater than' expression with identifiers" do
|
170
|
-
tree = Parser.parse('test = test1 > test2')
|
171
|
-
assert_expression(tree, GreaterThanOperator)
|
172
|
-
end
|
173
|
-
|
174
|
-
|
175
|
-
###############
|
176
|
-
# LESS THAN
|
177
|
-
|
178
|
-
test "should parse simple 'less than' expression with integers" do
|
179
|
-
tree = Parser.parse('test = 1 < 1')
|
180
|
-
assert_expression(tree, LessThanOperator)
|
181
|
-
end
|
182
|
-
|
183
|
-
test "should parse simple 'less than' expression with floats" do
|
184
|
-
tree = Parser.parse('test = 1.0 < 1.0')
|
185
|
-
assert_expression(tree, LessThanOperator)
|
186
|
-
end
|
187
|
-
|
188
|
-
test "should parse simple 'less than' expression with strings" do
|
189
|
-
tree = Parser.parse('test = "1" < "1"')
|
190
|
-
assert_expression(tree, LessThanOperator)
|
191
|
-
end
|
192
|
-
|
193
|
-
test "should parse simple 'less than' expression with identifiers" do
|
194
|
-
tree = Parser.parse('test = test1 < test2')
|
195
|
-
assert_expression(tree, LessThanOperator)
|
196
|
-
end
|
197
|
-
|
198
|
-
|
199
|
-
private
|
200
|
-
|
201
|
-
def assert_expression(tree, operator = nil)
|
202
|
-
assert_kind_of Block, tree
|
203
|
-
assert_kind_of Statement, tree.elements.first
|
204
|
-
assert_kind_of Assignment, tree.elements.first.elements.last
|
205
|
-
assert_kind_of Identifier, tree.elements.first.elements.last.elements[0]
|
206
|
-
assert_kind_of AssignmentOperator, tree.elements.first.elements.last.elements[1]
|
207
|
-
assert_kind_of Expression, tree.elements.first.elements.last.elements[2]
|
208
|
-
assert_equal 3, tree.elements.first.elements.last.elements[2].elements.first.elements.size
|
209
|
-
assert_kind_of operator, tree.elements.first.elements.last.elements[2].elements.first.elements[1] unless(operator.nil?)
|
210
|
-
end
|
211
|
-
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class SimpleExpressionTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceParser
|
6
|
+
|
7
|
+
###############
|
8
|
+
# ADDITION
|
9
|
+
|
10
|
+
test "should parse simple addition expression with integers" do
|
11
|
+
tree = Parser.parse('test = 1 + 1')
|
12
|
+
assert_expression(tree, AdditionOperator)
|
13
|
+
end
|
14
|
+
|
15
|
+
test "should parse simple addition expression with floats" do
|
16
|
+
tree = Parser.parse('test = 1.0 + 1.0')
|
17
|
+
assert_expression(tree, AdditionOperator)
|
18
|
+
end
|
19
|
+
|
20
|
+
test "should parse simple addition expression with strings" do
|
21
|
+
tree = Parser.parse('test = "1" + "1"')
|
22
|
+
assert_expression(tree, AdditionOperator)
|
23
|
+
end
|
24
|
+
|
25
|
+
test "should parse simple addition expression with identifiers" do
|
26
|
+
tree = Parser.parse('test = test1 + test2')
|
27
|
+
assert_expression(tree, AdditionOperator)
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
###############
|
32
|
+
# SUBTRACTION
|
33
|
+
|
34
|
+
test "should parse simple subtraction expression with integers" do
|
35
|
+
tree = Parser.parse('test = 1 - 1')
|
36
|
+
assert_expression(tree, SubtractionOperator)
|
37
|
+
end
|
38
|
+
|
39
|
+
test "should parse simple subtraction expression with floats" do
|
40
|
+
tree = Parser.parse('test = 1.0 - 1.0')
|
41
|
+
assert_expression(tree, SubtractionOperator)
|
42
|
+
end
|
43
|
+
|
44
|
+
test "should parse simple subtraction expression with strings" do
|
45
|
+
tree = Parser.parse('test = "1" - "1"')
|
46
|
+
assert_expression(tree, SubtractionOperator)
|
47
|
+
end
|
48
|
+
|
49
|
+
test "should parse simple subtraction expression with identifiers" do
|
50
|
+
tree = Parser.parse('test = test1 - test2')
|
51
|
+
assert_expression(tree, SubtractionOperator)
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
###############
|
56
|
+
# MULTIPLICATION
|
57
|
+
|
58
|
+
test "should parse simple multiplication expression with integers" do
|
59
|
+
tree = Parser.parse('test = 1 * 1')
|
60
|
+
assert_expression(tree, MultiplicationOperator)
|
61
|
+
end
|
62
|
+
|
63
|
+
test "should parse simple multiplication expression with floats" do
|
64
|
+
tree = Parser.parse('test = 1.0 * 1.0')
|
65
|
+
assert_expression(tree, MultiplicationOperator)
|
66
|
+
end
|
67
|
+
|
68
|
+
test "should parse simple multiplication expression with strings" do
|
69
|
+
tree = Parser.parse('test = "1" * "1"')
|
70
|
+
assert_expression(tree, MultiplicationOperator)
|
71
|
+
end
|
72
|
+
|
73
|
+
test "should parse simple multiplication expression with identifiers" do
|
74
|
+
tree = Parser.parse('test = test1 * test2')
|
75
|
+
assert_expression(tree, MultiplicationOperator)
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
###############
|
80
|
+
# DIVISION
|
81
|
+
|
82
|
+
test "should parse simple division expression with integers" do
|
83
|
+
tree = Parser.parse('test = 1 / 1')
|
84
|
+
assert_expression(tree, DivisionOperator)
|
85
|
+
end
|
86
|
+
|
87
|
+
test "should parse simple division expression with floats" do
|
88
|
+
tree = Parser.parse('test = 1.0 / 1.0')
|
89
|
+
assert_expression(tree, DivisionOperator)
|
90
|
+
end
|
91
|
+
|
92
|
+
test "should parse simple division expression with strings" do
|
93
|
+
tree = Parser.parse('test = "1" / "1"')
|
94
|
+
assert_expression(tree, DivisionOperator)
|
95
|
+
end
|
96
|
+
|
97
|
+
test "should parse simple division expression with identifiers" do
|
98
|
+
tree = Parser.parse('test = test1 / test2')
|
99
|
+
assert_expression(tree, DivisionOperator)
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
###############
|
104
|
+
# EQUALITY
|
105
|
+
|
106
|
+
test "should parse simple equality expression with integers" do
|
107
|
+
tree = Parser.parse('test = 1 == 1')
|
108
|
+
assert_expression(tree, EqualityOperator)
|
109
|
+
end
|
110
|
+
|
111
|
+
test "should parse simple equality expression with floats" do
|
112
|
+
tree = Parser.parse('test = 1.0 == 1.0')
|
113
|
+
assert_expression(tree, EqualityOperator)
|
114
|
+
end
|
115
|
+
|
116
|
+
test "should parse simple equality expression with strings" do
|
117
|
+
tree = Parser.parse('test = "1" == "1"')
|
118
|
+
assert_expression(tree, EqualityOperator)
|
119
|
+
end
|
120
|
+
|
121
|
+
test "should parse simple equality expression with identifiers" do
|
122
|
+
tree = Parser.parse('test = test1 == test2')
|
123
|
+
assert_expression(tree, EqualityOperator)
|
124
|
+
end
|
125
|
+
|
126
|
+
|
127
|
+
###############
|
128
|
+
# INEQUALITY
|
129
|
+
|
130
|
+
test "should parse simple inequality expression with integers" do
|
131
|
+
tree = Parser.parse('test = 1 != 1')
|
132
|
+
assert_expression(tree, InequalityOperator)
|
133
|
+
end
|
134
|
+
|
135
|
+
test "should parse simple inequality expression with floats" do
|
136
|
+
tree = Parser.parse('test = 1.0 != 1.0')
|
137
|
+
assert_expression(tree, InequalityOperator)
|
138
|
+
end
|
139
|
+
|
140
|
+
test "should parse simple inequality expression with strings" do
|
141
|
+
tree = Parser.parse('test = "1" != "1"')
|
142
|
+
assert_expression(tree, InequalityOperator)
|
143
|
+
end
|
144
|
+
|
145
|
+
test "should parse simple inequality expression with identifiers" do
|
146
|
+
tree = Parser.parse('test = test1 != test2')
|
147
|
+
assert_expression(tree, InequalityOperator)
|
148
|
+
end
|
149
|
+
|
150
|
+
|
151
|
+
###############
|
152
|
+
# GREATER THAN
|
153
|
+
|
154
|
+
test "should parse simple 'greater than' expression with integers" do
|
155
|
+
tree = Parser.parse('test = 1 > 1')
|
156
|
+
assert_expression(tree, GreaterThanOperator)
|
157
|
+
end
|
158
|
+
|
159
|
+
test "should parse simple 'greater than' expression with floats" do
|
160
|
+
tree = Parser.parse('test = 1.0 > 1.0')
|
161
|
+
assert_expression(tree, GreaterThanOperator)
|
162
|
+
end
|
163
|
+
|
164
|
+
test "should parse simple 'greater than' expression with strings" do
|
165
|
+
tree = Parser.parse('test = "1" > "1"')
|
166
|
+
assert_expression(tree, GreaterThanOperator)
|
167
|
+
end
|
168
|
+
|
169
|
+
test "should parse simple 'greater than' expression with identifiers" do
|
170
|
+
tree = Parser.parse('test = test1 > test2')
|
171
|
+
assert_expression(tree, GreaterThanOperator)
|
172
|
+
end
|
173
|
+
|
174
|
+
|
175
|
+
###############
|
176
|
+
# LESS THAN
|
177
|
+
|
178
|
+
test "should parse simple 'less than' expression with integers" do
|
179
|
+
tree = Parser.parse('test = 1 < 1')
|
180
|
+
assert_expression(tree, LessThanOperator)
|
181
|
+
end
|
182
|
+
|
183
|
+
test "should parse simple 'less than' expression with floats" do
|
184
|
+
tree = Parser.parse('test = 1.0 < 1.0')
|
185
|
+
assert_expression(tree, LessThanOperator)
|
186
|
+
end
|
187
|
+
|
188
|
+
test "should parse simple 'less than' expression with strings" do
|
189
|
+
tree = Parser.parse('test = "1" < "1"')
|
190
|
+
assert_expression(tree, LessThanOperator)
|
191
|
+
end
|
192
|
+
|
193
|
+
test "should parse simple 'less than' expression with identifiers" do
|
194
|
+
tree = Parser.parse('test = test1 < test2')
|
195
|
+
assert_expression(tree, LessThanOperator)
|
196
|
+
end
|
197
|
+
|
198
|
+
|
199
|
+
private
|
200
|
+
|
201
|
+
def assert_expression(tree, operator = nil)
|
202
|
+
assert_kind_of Block, tree
|
203
|
+
assert_kind_of Statement, tree.elements.first
|
204
|
+
assert_kind_of Assignment, tree.elements.first.elements.last
|
205
|
+
assert_kind_of Identifier, tree.elements.first.elements.last.elements[0]
|
206
|
+
assert_kind_of AssignmentOperator, tree.elements.first.elements.last.elements[1]
|
207
|
+
assert_kind_of Expression, tree.elements.first.elements.last.elements[2]
|
208
|
+
assert_equal 3, tree.elements.first.elements.last.elements[2].elements.first.elements.size
|
209
|
+
assert_kind_of operator, tree.elements.first.elements.last.elements[2].elements.first.elements[1] unless(operator.nil?)
|
210
|
+
end
|
211
|
+
|
212
212
|
end
|
@@ -1,22 +1,22 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'test_helper.rb'))
|
2
|
-
|
3
|
-
class StatementTest < Test::Unit::TestCase
|
4
|
-
|
5
|
-
include KoiReferenceParser
|
6
|
-
|
7
|
-
test "should parse statments on separate lines as separate" do
|
8
|
-
tree = Parser.parse("test = 1\ntest = 1")
|
9
|
-
assert_kind_of Block, tree
|
10
|
-
assert_kind_of Statement, tree.elements[0]
|
11
|
-
assert_kind_of Statement, tree.elements[1]
|
12
|
-
end
|
13
|
-
|
14
|
-
test "should parse statements on same line separated by ';' as separate" do
|
15
|
-
tree = Parser.parse("test = 1;test = 1")
|
16
|
-
assert_kind_of Block, tree
|
17
|
-
assert_kind_of Statement, tree.elements[0]
|
18
|
-
assert_kind_of Statement, tree.elements[1]
|
19
|
-
end
|
20
|
-
|
21
|
-
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class StatementTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include KoiReferenceParser
|
6
|
+
|
7
|
+
test "should parse statments on separate lines as separate" do
|
8
|
+
tree = Parser.parse("test = 1\ntest = 1")
|
9
|
+
assert_kind_of Block, tree
|
10
|
+
assert_kind_of Statement, tree.elements[0]
|
11
|
+
assert_kind_of Statement, tree.elements[1]
|
12
|
+
end
|
13
|
+
|
14
|
+
test "should parse statements on same line separated by ';' as separate" do
|
15
|
+
tree = Parser.parse("test = 1;test = 1")
|
16
|
+
assert_kind_of Block, tree
|
17
|
+
assert_kind_of Statement, tree.elements[0]
|
18
|
+
assert_kind_of Statement, tree.elements[1]
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
22
|
end
|