dhaka 2.0.1 → 2.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.
- data/Rakefile +64 -0
- data/lib/dhaka.rb +12 -0
- data/lib/dot/dot.rb +29 -0
- data/lib/evaluator/evaluator.rb +35 -26
- data/lib/grammar/grammar.rb +42 -17
- data/lib/grammar/grammar_symbol.rb +4 -3
- data/lib/grammar/production.rb +9 -3
- data/lib/lexer/compiled_lexer.rb +46 -0
- data/lib/lexer/dfa.rb +71 -0
- data/lib/lexer/lexeme.rb +33 -0
- data/lib/lexer/lexer.rb +61 -0
- data/lib/lexer/lexer_run.rb +66 -0
- data/lib/lexer/regex_grammar.rb +368 -0
- data/lib/lexer/regex_parser.rb +1888 -0
- data/lib/lexer/regex_tokenizer.rb +14 -0
- data/lib/lexer/specification.rb +69 -0
- data/lib/lexer/state.rb +45 -0
- data/lib/lexer/state_machine.rb +37 -0
- data/lib/parser/action.rb +3 -3
- data/lib/parser/compiled_parser.rb +11 -3
- data/lib/parser/parse_result.rb +3 -5
- data/lib/parser/parse_tree.rb +6 -17
- data/lib/parser/parser.rb +15 -14
- data/lib/parser/parser_run.rb +4 -2
- data/lib/parser/parser_state.rb +16 -8
- data/lib/tokenizer/tokenizer.rb +5 -3
- data/test/arithmetic_precedence/arithmetic_precedence_lexer_specification.rb +23 -0
- data/test/arithmetic_precedence/arithmetic_precedence_parser_test.rb +4 -2
- data/test/chittagong/chittagong_driver.rb +12 -13
- data/test/chittagong/chittagong_driver_test.rb +18 -11
- data/test/chittagong/chittagong_evaluator.rb +7 -16
- data/test/chittagong/chittagong_evaluator_test.rb +7 -4
- data/test/chittagong/chittagong_grammar.rb +0 -6
- data/test/chittagong/chittagong_lexer.rb +109 -0
- data/test/chittagong/chittagong_lexer_specification.rb +39 -0
- data/test/chittagong/{chittagong_tokenizer_test.rb → chittagong_lexer_test.rb} +12 -6
- data/test/chittagong/chittagong_parser.rb +879 -0
- data/test/chittagong/chittagong_parser_test.rb +8 -10
- data/test/chittagong/chittagong_test.rb +17 -13
- data/test/compiled_parser_test.rb +7 -2
- data/test/evaluator_test.rb +0 -1
- data/test/grammar_test.rb +19 -1
- data/test/lexer_test.rb +215 -0
- data/test/parse_result_test.rb +8 -8
- data/test/parser_state_test.rb +0 -12
- metadata +21 -5
- data/test/arithmetic_precedence/arithmetic_precedence_tokenizer.rb +0 -39
- data/test/chittagong/chittagong_tokenizer.rb +0 -88
data/test/parser_state_test.rb
CHANGED
@@ -21,16 +21,4 @@ class TestParserState < Test::Unit::TestCase
|
|
21
21
|
state = ParserState.new(nil, {item1 => item1, item2 => item2})
|
22
22
|
assert_equal(["i'm item 1", "i'm item 2"], state.to_s(options).split("\n").sort)
|
23
23
|
end
|
24
|
-
|
25
|
-
def test_to_dot_method
|
26
|
-
options = {:some_option => true}
|
27
|
-
item1 = mock()
|
28
|
-
item1.stubs(:to_s).with(options).returns("i'm item 1")
|
29
|
-
item2 = mock()
|
30
|
-
item2.stubs(:to_s).with(options).returns("i'm item 2")
|
31
|
-
state = ParserState.new(nil, {item1 => item1, item2 => item2})
|
32
|
-
state.stubs(:unique_name).returns("State1")
|
33
|
-
assert(state.to_dot(options) =~ /^State1 \[label="(.+)\\n(.+)"\]/)
|
34
|
-
assert_equal(["i'm item 1", "i'm item 2"], [$1, $2].sort)
|
35
|
-
end
|
36
24
|
end
|
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: 2.0
|
7
|
-
date: 2007-
|
6
|
+
version: 2.1.0
|
7
|
+
date: 2007-03-11 00:00:00 -05:00
|
8
8
|
summary: An LALR1 parser generator written in Ruby
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -30,12 +30,24 @@ authors:
|
|
30
30
|
- Mushfeq Khan
|
31
31
|
files:
|
32
32
|
- lib/dhaka.rb
|
33
|
+
- lib/dot/dot.rb
|
33
34
|
- lib/evaluator/evaluator.rb
|
34
35
|
- lib/grammar/closure_hash.rb
|
35
36
|
- lib/grammar/grammar.rb
|
36
37
|
- lib/grammar/grammar_symbol.rb
|
37
38
|
- lib/grammar/precedence.rb
|
38
39
|
- lib/grammar/production.rb
|
40
|
+
- lib/lexer/compiled_lexer.rb
|
41
|
+
- lib/lexer/dfa.rb
|
42
|
+
- lib/lexer/lexeme.rb
|
43
|
+
- lib/lexer/lexer.rb
|
44
|
+
- lib/lexer/lexer_run.rb
|
45
|
+
- lib/lexer/regex_grammar.rb
|
46
|
+
- lib/lexer/regex_parser.rb
|
47
|
+
- lib/lexer/regex_tokenizer.rb
|
48
|
+
- lib/lexer/specification.rb
|
49
|
+
- lib/lexer/state.rb
|
50
|
+
- lib/lexer/state_machine.rb
|
39
51
|
- lib/parser/action.rb
|
40
52
|
- lib/parser/channel.rb
|
41
53
|
- lib/parser/compiled_parser.rb
|
@@ -57,6 +69,7 @@ files:
|
|
57
69
|
- test/fake_logger.rb
|
58
70
|
- test/grammar_test.rb
|
59
71
|
- test/lalr_but_not_slr_grammar.rb
|
72
|
+
- test/lexer_test.rb
|
60
73
|
- test/malformed_grammar.rb
|
61
74
|
- test/malformed_grammar_test.rb
|
62
75
|
- test/nullable_grammar.rb
|
@@ -78,8 +91,8 @@ files:
|
|
78
91
|
- test/arithmetic_precedence/arithmetic_precedence_evaluator.rb
|
79
92
|
- test/arithmetic_precedence/arithmetic_precedence_grammar.rb
|
80
93
|
- test/arithmetic_precedence/arithmetic_precedence_grammar_test.rb
|
94
|
+
- test/arithmetic_precedence/arithmetic_precedence_lexer_specification.rb
|
81
95
|
- test/arithmetic_precedence/arithmetic_precedence_parser_test.rb
|
82
|
-
- test/arithmetic_precedence/arithmetic_precedence_tokenizer.rb
|
83
96
|
- test/brackets/bracket_grammar.rb
|
84
97
|
- test/brackets/bracket_tokenizer.rb
|
85
98
|
- test/brackets/brackets_test.rb
|
@@ -88,10 +101,13 @@ files:
|
|
88
101
|
- test/chittagong/chittagong_evaluator.rb
|
89
102
|
- test/chittagong/chittagong_evaluator_test.rb
|
90
103
|
- test/chittagong/chittagong_grammar.rb
|
104
|
+
- test/chittagong/chittagong_lexer.rb
|
105
|
+
- test/chittagong/chittagong_lexer_specification.rb
|
106
|
+
- test/chittagong/chittagong_lexer_test.rb
|
107
|
+
- test/chittagong/chittagong_parser.rb
|
91
108
|
- test/chittagong/chittagong_parser_test.rb
|
92
109
|
- test/chittagong/chittagong_test.rb
|
93
|
-
-
|
94
|
-
- test/chittagong/chittagong_tokenizer_test.rb
|
110
|
+
- Rakefile
|
95
111
|
test_files: []
|
96
112
|
|
97
113
|
rdoc_options: []
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/arithmetic_precedence_grammar'
|
2
|
-
|
3
|
-
class ArithmeticPrecedenceTokenizer < Dhaka::Tokenizer
|
4
|
-
|
5
|
-
digits = ('0'..'9').to_a
|
6
|
-
parenths = %w| ( ) |
|
7
|
-
operators = %w| - + / * ^ |
|
8
|
-
functions = %w| h l |
|
9
|
-
arg_separator = %w| , |
|
10
|
-
whitespace = [' ']
|
11
|
-
|
12
|
-
all_characters = digits + parenths + operators + functions + arg_separator + whitespace
|
13
|
-
|
14
|
-
for_state Dhaka::TOKENIZER_IDLE_STATE do
|
15
|
-
for_characters(all_characters - (digits + whitespace)) do
|
16
|
-
create_token(curr_char, nil)
|
17
|
-
advance
|
18
|
-
end
|
19
|
-
for_characters digits do
|
20
|
-
create_token('n', '')
|
21
|
-
switch_to :get_integer_literal
|
22
|
-
end
|
23
|
-
for_character whitespace do
|
24
|
-
advance
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
for_state :get_integer_literal do
|
29
|
-
for_characters all_characters - digits do
|
30
|
-
switch_to Dhaka::TOKENIZER_IDLE_STATE
|
31
|
-
end
|
32
|
-
for_characters digits do
|
33
|
-
curr_token.value << curr_char
|
34
|
-
advance
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
|
@@ -1,88 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/chittagong_grammar'
|
2
|
-
|
3
|
-
class ChittagongTokenizer < Dhaka::Tokenizer
|
4
|
-
|
5
|
-
KEYWORDS = %w| print if else end while def return |
|
6
|
-
|
7
|
-
digits = ('0'..'9').to_a
|
8
|
-
decimal_point = %w| . |
|
9
|
-
letters = ('a'..'z').to_a
|
10
|
-
parenths = %w| ( ) |
|
11
|
-
operators = %w| - + / * ^ ! > < |
|
12
|
-
equal_sign = %w| = |
|
13
|
-
whitespace = [' ']
|
14
|
-
arg_separator = %w| , |
|
15
|
-
newline = ["\n"]
|
16
|
-
|
17
|
-
all_characters = digits + decimal_point + letters + parenths + operators + whitespace + newline + arg_separator + equal_sign
|
18
|
-
|
19
|
-
for_state Dhaka::TOKENIZER_IDLE_STATE do
|
20
|
-
for_characters(all_characters - (digits + letters + newline + whitespace + equal_sign)) do
|
21
|
-
create_token(curr_char, nil)
|
22
|
-
advance
|
23
|
-
end
|
24
|
-
for_characters(equal_sign) do
|
25
|
-
create_token('=', nil)
|
26
|
-
advance
|
27
|
-
switch_to :get_equal_sign_operator
|
28
|
-
end
|
29
|
-
for_characters digits do
|
30
|
-
create_token('int_literal', '')
|
31
|
-
switch_to :get_integer_literal
|
32
|
-
end
|
33
|
-
for_characters letters do
|
34
|
-
create_token(nil, '')
|
35
|
-
switch_to :get_word_literal
|
36
|
-
end
|
37
|
-
for_character newline do
|
38
|
-
create_token('newline', nil)
|
39
|
-
advance
|
40
|
-
end
|
41
|
-
for_character whitespace do
|
42
|
-
advance
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
for_state :get_equal_sign_operator do
|
47
|
-
for_characters all_characters - equal_sign do
|
48
|
-
switch_to Dhaka::TOKENIZER_IDLE_STATE
|
49
|
-
end
|
50
|
-
for_character equal_sign do
|
51
|
-
curr_token.symbol_name << '='
|
52
|
-
advance
|
53
|
-
switch_to Dhaka::TOKENIZER_IDLE_STATE
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
for_state :get_integer_literal do
|
58
|
-
for_characters all_characters - digits do
|
59
|
-
switch_to Dhaka::TOKENIZER_IDLE_STATE
|
60
|
-
end
|
61
|
-
for_characters digits do
|
62
|
-
curr_token.value << curr_char
|
63
|
-
advance
|
64
|
-
end
|
65
|
-
end
|
66
|
-
# lipi:keywords
|
67
|
-
for_state :get_word_literal do
|
68
|
-
for_characters all_characters - letters do
|
69
|
-
curr_token.symbol_name = word_literal_symbol(curr_token.value)
|
70
|
-
switch_to Dhaka::TOKENIZER_IDLE_STATE
|
71
|
-
end
|
72
|
-
for_characters letters do
|
73
|
-
curr_token.value << curr_char
|
74
|
-
advance
|
75
|
-
curr_token.symbol_name = word_literal_symbol(curr_token.value) unless curr_char
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def word_literal_symbol(value)
|
80
|
-
if KEYWORDS.include? value
|
81
|
-
value
|
82
|
-
else
|
83
|
-
'word_literal'
|
84
|
-
end
|
85
|
-
end
|
86
|
-
# lipi:keywords
|
87
|
-
|
88
|
-
end
|