dhaka 1.0.0 → 2.0.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.
- data/lib/dhaka.rb +1 -4
- data/lib/evaluator/evaluator.rb +65 -15
- data/lib/grammar/grammar.rb +30 -0
- data/lib/grammar/grammar_symbol.rb +1 -1
- data/lib/grammar/production.rb +1 -1
- data/lib/parser/action.rb +1 -3
- data/lib/parser/parse_result.rb +9 -7
- data/lib/parser/parse_tree.rb +9 -2
- data/lib/parser/parser.rb +7 -0
- data/lib/parser/parser_run.rb +12 -19
- data/lib/parser/token.rb +10 -7
- data/lib/tokenizer/tokenizer.rb +90 -17
- data/test/all_tests.rb +7 -6
- data/test/arithmetic_evaluator_test.rb +20 -20
- data/test/arithmetic_precedence_evaluator.rb +1 -1
- data/test/arithmetic_precedence_parser_test.rb +7 -7
- data/test/arithmetic_precedence_tokenizer.rb +3 -9
- data/test/arithmetic_test_methods.rb +2 -2
- data/test/arithmetic_tokenizer.rb +3 -9
- data/test/arithmetic_tokenizer_test.rb +14 -10
- data/test/bracket_tokenizer.rb +1 -1
- data/test/chittagong_driver_test.rb +261 -0
- data/test/chittagong_evaluator.rb +218 -47
- data/test/chittagong_evaluator_test.rb +18 -20
- data/test/chittagong_grammar.rb +61 -15
- data/test/chittagong_parser_test.rb +24 -12
- data/test/chittagong_test.rb +148 -6
- data/test/chittagong_tokenizer.rb +33 -21
- data/test/chittagong_tokenizer_test.rb +16 -8
- data/test/compiled_parser_test.rb +14 -12
- data/test/parser_test.rb +16 -16
- metadata +3 -2
data/test/parser_test.rb
CHANGED
@@ -11,6 +11,10 @@ require 'fake_logger'
|
|
11
11
|
|
12
12
|
class ParserTest < Test::Unit::TestCase
|
13
13
|
|
14
|
+
def build_tokens(token_symbol_names)
|
15
|
+
token_symbol_names.collect {|symbol_name| Dhaka::Token.new(symbol_name, nil, nil)}
|
16
|
+
end
|
17
|
+
|
14
18
|
def setup
|
15
19
|
@grammar = SimpleGrammar
|
16
20
|
@parser = Dhaka::Parser.new(@grammar)
|
@@ -53,12 +57,8 @@ class ParserTest < Test::Unit::TestCase
|
|
53
57
|
dot_representation = @parser.to_dot
|
54
58
|
end
|
55
59
|
|
56
|
-
def
|
57
|
-
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_parser_generates_syntax_tree_given_a_stream_of_symbols
|
61
|
-
syntax_tree = @parser.parse(build_tokens(['(','n','-','(','n','-','n',')',')','-','n','#'], @grammar)).syntax_tree
|
60
|
+
def test_parser_generates_parse_tree_given_a_stream_of_symbols
|
61
|
+
parse_tree = @parser.parse(build_tokens(['(','n','-','(','n','-','n',')',')','-','n','#', Dhaka::END_SYMBOL_NAME])).parse_tree
|
62
62
|
assert_equal \
|
63
63
|
["literal",
|
64
64
|
"term",
|
@@ -73,22 +73,22 @@ class ParserTest < Test::Unit::TestCase
|
|
73
73
|
"literal",
|
74
74
|
"subtraction",
|
75
75
|
"expression",
|
76
|
-
"start"],
|
76
|
+
"start"], parse_tree.linearize.collect {|node| node.production.name}
|
77
77
|
end
|
78
78
|
|
79
|
-
def
|
80
|
-
|
81
|
-
|
79
|
+
def test_parse_trees_can_be_exported_to_dot_format
|
80
|
+
parse_tree = @parser.parse(build_tokens(['(','n','-','(','n','-','n',')',')','-','n','#', Dhaka::END_SYMBOL_NAME])).parse_tree
|
81
|
+
parse_tree.to_dot
|
82
82
|
end
|
83
83
|
|
84
84
|
def get_linearized_parse_result(input, parser)
|
85
|
-
parser.parse(build_tokens(input
|
85
|
+
parser.parse(build_tokens(input)).parse_tree.linearize.collect {|node| node.production.name}
|
86
86
|
end
|
87
87
|
|
88
88
|
def test_with_a_different_grammar_with_division
|
89
89
|
grammar = ArithmeticGrammar
|
90
90
|
parser = Dhaka::Parser.new(grammar)
|
91
|
-
parser_input = ['(','n','-','(','n','/','n','-','n',')','/','n',')']
|
91
|
+
parser_input = ['(','n','-','(','n','/','n','-','n',')','/','n',')', Dhaka::END_SYMBOL_NAME]
|
92
92
|
assert_equal \
|
93
93
|
["getting_literals",
|
94
94
|
"factor",
|
@@ -111,7 +111,7 @@ class ParserTest < Test::Unit::TestCase
|
|
111
111
|
"term",
|
112
112
|
"expression"], get_linearized_parse_result(parser_input, parser)
|
113
113
|
|
114
|
-
parser_input = ['h','(','(','n',')','-','n',',','n',')']
|
114
|
+
parser_input = ['h','(','(','n',')','-','n',',','n',')', Dhaka::END_SYMBOL_NAME]
|
115
115
|
assert_equal \
|
116
116
|
["max_function",
|
117
117
|
"getting_literals",
|
@@ -138,7 +138,7 @@ class ParserTest < Test::Unit::TestCase
|
|
138
138
|
def test_with_a_grammar_with_nullables_after_terminals
|
139
139
|
grammar = NullableGrammar
|
140
140
|
parser = Dhaka::Parser.new(grammar)
|
141
|
-
parser_input = ['(','a',')']
|
141
|
+
parser_input = ['(','a',')', Dhaka::END_SYMBOL_NAME]
|
142
142
|
assert_equal \
|
143
143
|
["literal_a",
|
144
144
|
"empty_element_list",
|
@@ -150,14 +150,14 @@ class ParserTest < Test::Unit::TestCase
|
|
150
150
|
def test_with_a_grammar_that_is_not_SLR
|
151
151
|
grammar = LALRButNotSLRGrammar
|
152
152
|
parser = Dhaka::Parser.new(grammar)
|
153
|
-
parser_input = ['b','d','c']
|
153
|
+
parser_input = ['b','d','c', Dhaka::END_SYMBOL_NAME]
|
154
154
|
assert_equal(["A_d", "E_bAc", "start"], get_linearized_parse_result(parser_input, parser))
|
155
155
|
end
|
156
156
|
|
157
157
|
def test_with_another_grammar_that_is_not_SLR
|
158
158
|
grammar = AnotherLALRButNotSLRGrammar
|
159
159
|
parser = Dhaka::Parser.new(grammar)
|
160
|
-
parser_input = ['*', 'id', '=', 'id']
|
160
|
+
parser_input = ['*', 'id', '=', 'id', Dhaka::END_SYMBOL_NAME]
|
161
161
|
assert_equal(["identifier", "l_value", "contents", "identifier", "l_value", "assignment"], get_linearized_parse_result(parser_input, parser))
|
162
162
|
end
|
163
163
|
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: dhaka
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version:
|
7
|
-
date: 2007-01-
|
6
|
+
version: 2.0.0
|
7
|
+
date: 2007-01-21 00:00:00 -05:00
|
8
8
|
summary: An LALR1 parser generator written in Ruby
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- test/bracket_grammar.rb
|
66
66
|
- test/bracket_tokenizer.rb
|
67
67
|
- test/brackets_test.rb
|
68
|
+
- test/chittagong_driver_test.rb
|
68
69
|
- test/chittagong_evaluator.rb
|
69
70
|
- test/chittagong_evaluator_test.rb
|
70
71
|
- test/chittagong_grammar.rb
|