dhaka 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|